Answers:
Fail2Ban。Linux平台上此问题的黄金标准/默认解决方案。
您应该避免尝试使用PHP进行此操作。到PHP介入时,已经为时已晚-内存已分配。
您可以在任何层禁止IP地址,但是使用最少资源的最低级别是您要采用的路由。通常是防火墙。至少要使用iptables(Linux防火墙)。还有其他人提到的工具,例如Fail2Ban,可以为您自动化。外部防火墙会更好。
除了尝试禁止违规的IP地址外,您还应该尝试更好地利用您的资源。如果请求占用的资源较少,则攻击生效所需的时间会更长。
Apache也使用大量内存。如果您使用的是mod_php,则更糟,因为PHP加载在每个Apache子进程中。这意味着即使不使用PHP,甚至对静态内容(css / js / images)的请求也正在加载PHP。您可以改用FastCGI解决此问题。mod_fcgid是一个不错的选择。
还有其他Web服务器更节省资源。Nginx是我的最爱。还有Lighttpd。很多人喜欢Litespeed(取代Apache的替代品)。
如果您想坚持使用Apache,请考虑对其进行最佳调整。考虑禁用.htaccess。这是一个很好的解释。
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可以基于系统日志自动透明地执行此类操作。
man iptables
并了解每个标志的含义以及它们如何协同工作。
NoooBS,
iptables -N logdrop iptables -A logdrop -m最近--set --name黑名单
iptables -A logdrop -j DROP
iptables -N ddos iptables -A ddos -m最近--rcheck --name黑名单--seconds 300 --hitcount 1 -j logdrop iptables -A ddos -m最近--set-再次命名iptables -A ddos -m最近--update-再次命名--seconds 60 --hitcount 2 -j logdrop iptables -A ddos -j RETURN