rails 4 中的机架攻击和 Allow2Ban 过滤

Posted

技术标签:

【中文标题】rails 4 中的机架攻击和 Allow2Ban 过滤【英文标题】:Rack-attack and Allow2Ban filtering in rails 4 【发布时间】:2014-03-28 19:28:42 【问题描述】:

我正在我的 rails 应用程序中实现 Kickstarter 的 Rack-attack。

白名单/黑名单过滤工作正常,但我在使用 Allow2Ban 锁定影响我的登录(设计)页面的 IP 地址时遇到问题。注意:我在本地对此进行了测试,并已将 localhost 从白名单中删除。

# Lockout IP addresses that are hammering your login page.
# After 3 requests in 1 minute, block all requests from that IP for 1 hour.
Rack::Attack.blacklist('allow2ban login scrapers') do |req|
  # `filter` returns false value if request is to your login page (but still
  # increments the count) so request below the limit are not blocked until
  # they hit the limit.  At that point, filter will return true and block.
  Rack::Attack::Allow2Ban.filter(req.ip, :maxretry => 3, :findtime => 1.minute, :bantime => 1.hour) do
    # The count for the IP is incremented if the return value is truthy.
    req.path == '/sign_in' and req.post?
  end
end

在 Rack-attack 文档中,它明确指出,限制功能需要缓存,即:

Rack::Attack.throttle('req/ip', :limit => 5, :period => 1.second) do |req| )

,但它没有为 Allow2Ban 说明这一点。任何人都知道 Allow2Ban 是否需要缓存,或者我是否在 Devise 登录页面上使用上面的代码错误地实现了

【问题讨论】:

由于您配置的过滤器可能存在共享状态,我想您需要打开缓存以在开发中对其进行测试。问之前你试过吗? 顺便说一句,机架攻击功能是否需要在服务器上安装一些 linux 实用程序(fail2ban 等)? 【参考方案1】:

是的,Allow2Ban 和 Fail2Ban 肯定需要 chaching(在https://github.com/kickstarter/rack-attack/blob/master/lib/rack/attack/fail2ban.rb 你可以看到如何以及为什么)。 顺便提一句。我建议使用 Redis 作为缓存,因为它可以确保您的应用程序阻止 IP 地址,即使您使用多个应用程序节点也是如此。如果您在多应用程序节点场景中使用 Rails 缓存,您的过滤器将按实例管理,这不是您想要的。

【讨论】:

以上是关于rails 4 中的机架攻击和 Allow2Ban 过滤的主要内容,如果未能解决你的问题,请参考以下文章

Sinatra 应用程序作为机架中间件 TimeOut Rails 3

机架错误安装问题。服务器没有启动

如何避免 Rails 中的 BREACH 攻击?

在通用机架应用程序中获取中间件的有序列表?

Ruby on rails 中的捆绑错误

穿越机用途和机架尺寸