针对唯一 IP 的 Nginx 速率限制

问题描述

我们一直在处理对我们的身份验证 url 的持续攻击,我们每天都在讨论数百万个请求,我猜他们正在尝试暴力破解密码。

每当我们使用服务器防火墙阻止 IP 时,几秒钟后攻击就会从不同的 IP 再次开始。

我们最终实现了通过机架攻击和自定义代码进行节流的组合,以动态阻止防火墙中的 IP。但是随着我们提高了软件的安全性,攻击者也提高了,现在我们看到他们发出的每个请求都是从不同的 IP 完成的,每个 IP 调用一次,每秒调用几次,数量不多,但仍然是一个问题。

现在我想弄清楚我还能做些什么来防止这种情况发生,我们尝试了重新验证,但很快就用完了每月的配额,然后没有人可以登录

我正在研究 Nginx 速率限制器,但从我所见它也使用 IP,考虑到它们现在为每个请求轮换 IP,有没有办法做到这一点?

关于如何处理这个问题的任何其他建议,也许你们中的一个人经历过同样的事情?

堆栈:Nginx 和 Rails 4、Ubuntu 16。

解决方法

对于您的情况,防止这种攻击的最有效方法是使用验证码。您提到您已经使用了验证码,并且很快就会用完,但是如果您自己开发验证码,您将拥有无限的验证码图像。

另外一种防止方法,比如锁定IP,当攻击者使用IP池时,这总是没用的,有太多的IP(包括一些物联网设备的IP),你无法识别/锁定它们,即使您使用商业威胁情报池。 所以这样的建议

  1. 自己开发验证码,并在您的 api 上实现,
  2. 识别并锁定您认为恶意的 IP
  3. 设置一些规则来识别http请求的UA和Cookie(通常是正常请求不受攻击)
  4. 使用 WAF(如果您有足够的预算)