我定期检查我的apache domlog检查GET和POST请求中的exception。 今天早些时候,我注意到相同的POST请求到一个loginPHP发生两次,有时三次,从相同的IP地址2-3小时。 我假设这是有人试图入侵一个帐户。
防止这种情况的最好方法是什么? 我可以将IP列入黑名单,但他们当然可以使用代理或交换机IP地址。 有没有更好的方式来做这个服务器端?
这台服务器正在运行CentOS 6.4
你可以使用类似fail2ban的东西,在一定数量的失败login后自动将主机列入黑名单。 这意味着,即使攻击者切换他们的IP地址,他们也只会在经过less量的尝试后再次被阻止。
fail2ban在可configuration的时间量之后解除阻塞地址,所以这不会导致无限地阻止地址。
如果你拥有PHP代码,你显然可以在你的Web应用程序中实现类似的function(基本上,来自同一客户端IP地址的速率限制失败login)。
你可以使用modsecurity定义你想要的任何规则,通过计数请求,黑名单,运行外部应用程序(即阻止带防火墙),转发到代理,丢弃数据包,拒绝连接,重置连接,redirect,显示404错误(IR也许你喜欢错误666),玩variables等。它可以做很多事情: 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>