我定期检查我的apache以检查GET和POST请求中的异常。今天早些时候,我注意到同一个登录php的POST请求在同一个IP地址中每秒发生两次,有时三次,每次2-3小时。我猜是有人想要黑进一个账户。
防止这种情况的最好方法是什么?我可以将IP列入黑名单,但他们当然可以使用代理或交换IP地址。有更好的方法来做这个服务器端吗?
此服务器正在运行CentOS 6.4
发布于 2013-08-30 21:17:11
您可以使用像fail2ban这样的工具,在一定数量的失败登录后自动将主机列入黑名单。这意味着,即使攻击者切换了他们的ip地址,他们也会在一小部分尝试后再次被阻止。
fail2ban在可配置的时间之后解锁地址,所以这不会导致地址无限期地被阻塞。
如果您拥有PHP代码,您显然可以在web应用程序中完成类似的任务(基本上,限制来自同一个客户端ip地址的失败登录)。
发布于 2013-08-31 00:03:05
您可以使用模数安全来定义任何您想要的规则,通过计数请求、黑名单、运行外部应用程序(即防火墙阻塞)、转发到代理、丢弃数据包、拒绝连接、重置连接、重定向、显示404错误(ir可能您喜欢错误666)、处理变量等方法来阻止密集请求。它可以做很多事情:https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual。
示例:http://halfelf.org/2013/wp-login-protection-modsec/
SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},initcol:user=%{REMOTE_ADDR},id:5000134
<Locationmatch "/login.php">
# deny status and log, 401 to client
SecRule user:bf_block "@gt 0" "deny,status:401,log,id:5000135,msg:'ip address blocked for 5 minutes, more than 10 login attempts in 3 minutes.'"
# Tracking: On a successful login, a 302 redirect is performed, a 200 indicates login failed.
SecRule RESPONSE_STATUS "^302" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000136"
# count last 3 minutes
SecRule RESPONSE_STATUS "^200" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000137"
# if matched 10 times, block for 5 minutes
SecRule ip:bf_counter "@gt 10" "t:none,setvar:user.bf_block=1,expirevar:user.bf_block=300,setvar:ip.bf_counter=0"
</locationmatch>https://serverfault.com/questions/535248
复制相似问题