Rails 应用,使用 Kickstarter 的rack-attack
在我的 config/rack-attack.rb 文件中,我有:
class Rack::Attack
Rack::Attack.blacklist ('block ip') do |req|
# Request are blocked if the return value is truthy
'68.888.23.22' == req.ip
# req.ip if IPCat.datacenter?(req.ip)
end
end
在我开始使用 CloudFlare 之前,这一直很好。req.ip 现在是 Cloudflare IP 与实际最终用户的 IP
尝试将用户的 IP 保存到我的服务器日志(正在保存 Cloudflare IP)时,我遇到了类似的问题。为了解决这个问题,我在我的应用程序控制器中添加了以下内容:
module ActionDispatch
class Request < Rack::Request
alias :remote_ip_orig :remote_ip
def remote_ip
@remote_ip ||= (@env['HTTP_CF_CONNECTING_IP'] || remote_ip_orig)
end
end
end
为了在机架攻击中使用 HTTP_CF_CONNECTING_IP 作为 req.ip 是否有类似的过程?