我们的身份验证网址一直在遭受持续不断的攻击,每天有数百万个请求,我猜他们正在试图暴力破解密码。
每当我们使用服务器防火墙阻止 IP 时,几秒钟后攻击就会从不同的 IP 再次开始。
我们最终实施了通过 rack-attack 和自定义代码进行节流的组合,以动态阻止防火墙中的 IP。但是,随着我们改进软件的安全性,攻击者也在改进,现在我们看到他们发出的每个请求都是从不同的 IP 发出的,每个 IP 一个调用,每秒仍有几个,虽然没有那么多,但仍然是一个问题。
现在我想弄清楚我还能做些什么来防止这种情况发生,我们尝试了 recaptcha 但很快就用完了每月的配额,然后就没人可以登录了。
我正在研究 Nginx 速率限制器,但据我所知它也使用 IP,考虑到他们现在为每个请求轮换 IP,有没有办法实现这一点?
关于如何处理这个问题还有其他建议吗,也许你们中有人经历过同样的事情?
堆栈:Nginx 和 Rails 4,Ubuntu 16。
答案1
通过速率限制,您可以过滤掉一些高流量密码喷洒器,这很有帮助。但是,当攻击者拥有许多 IP 地址、快速轮换这些 IP 地址并将请求限制在人类速率范围内时,仅基于 IP 的速率限制不起作用。
我们尝试了 recaptcha,但很快就用完了每月的配额,然后就没人可以登录了。
支付您的 CAPTCHA 服务费用,并观察其当月的规模运行情况。如果您不喜欢定价,请查看备择方案。验证码例如,有一个基本的免费套餐。
更根本的是,用更好的东西替换密码,可能是硬件安全密钥或生物识别技术。或者至少用额外的身份验证因素补充密码。这样做的标准是 FIDO2。对于非用户交互凭证,ssh 密钥、x509 证书或生成的 API 密钥也比用户选择的密码更好。