我没有做任何特别的事情。我只是使用 Apache2 访问控制来密码保护目录。
我认为,如果 Apache 能够限制用户从给定 IP 尝试验证用户名和密码的频率,那就太聪明了。这是一种阻止暴力破解密码的廉价方法,无需对合法用户登录尝试进行 DoSing 攻击。
我搜索了一下,没有找到任何具体的方法,这让我很惊讶。有办法吗?还有更好的方法吗?
答案1
这博客文章表示你可以这样做mod_security使用类似下面的方法:
SecRuleEngine On
<LocationMatch "^/somepath">
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>
ErrorDocument 509 "Rate Limit Exceeded"
更多讨论这个答案。