我的一个LAMP服务器最近被某种脚本机器人用来寻找漏洞。 从外观上来看,它每秒钟发出如此多的请求,使得服务器上的RAM过载,并把整个网站停下来一个小时。 这个“attacK”全部来自一个IP地址。
那么如何在短时间内自动暂时阻止IP地址在我的LAMP服务器上点击太多呢? 什么是最好的工具,我应该在操作系统级别还是通过PHP来解决这个问题?
Fail2Ban 。 Linux平台上这个问题的黄金标准/默认解决scheme。
你应该避免试图用PHP来做到这一点。 在PHP介入的时候,已经太晚了 – 内存已经被分配了。
您可以禁止任何层的IP地址,但使用最less量资源的最低级别是您要采用的路由。 这通常是防火墙。 至less,iptables(linux防火墙)是你想使用的。 有其他人提到的工具,比如Fail2Ban,可以为你自动化。 外部防火墙会更好。
除了试图禁止违规的IP地址,你应该尝试更好地利用你的资源。 如果请求占用较less的资源,攻击才会有效。
Apache也使用了很多内存。 如果你使用的是mod_php,那就更糟了,因为PHP是在每个Apachesubprocess中加载的。 这意味着甚至当PHP没有被使用时,即使对静态内容(css / js / images)的请求也在加载PHP。 您可以通过使用FastCGI来解决这个问题。 mod_fcgid是一个不错的select。
还有其他更节约资源的Web服务器。 Nginx是我的最爱。 还有Lighttpd。 很多人喜欢Litespeed(替代Apache)。
如果你想坚持使用Apache,请考虑尽可能调整它。 考虑禁用.htaccess。 这是一个很好的解释 。
要控制或阻止httpstream量,您可以使用:
但是,请注意,这些工具可能会阻止/减慢网页search引擎,从而影响search引擎优化。
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
ossec可以根据syslog自动而透明地完成这种types的事情。