【发布时间】:2014-08-14 02:45:56
【问题描述】:
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
是否有类似的过程可以在 rack-attack 中使用 HTTP_CF_CONNECTING_IP 作为 req.ip?
【问题讨论】:
-
在这里找到解决方案?
-
我没有。最终只是在 Cloudflare 设置中手动将 IP 列入黑名单。对不起。
标签: ip-address cloudflare rackattack