如何自动暂时阻止在短时间内对服务器进行过多点击的 IP 地址?

如何自动暂时阻止在短时间内对服务器进行过多点击的 IP 地址?

我的一台 LAMP 服务器最近被某种寻找漏洞的脚本机器人搞垮了。从表面上看,它每秒发出的请求太多了,以至于服务器的 RAM 超载,导致我的整个网站瘫痪了一个小时。那次“攻击”全部来自一个 IP 地址。

那么,如何才能自动暂时阻止在短时间内对我的 LAMP 服务器进行过多点击的 IP 地址?最适合这项工作的工具是什么?我应该在操作系统级别还是通过 PHP 来解决这个问题?

答案1

失败禁止。Linux 平台上解决此问题的黄金标准/默认解决方案。

答案2

您应该避免尝试使用 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。这很好地解释了为什么

答案3

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

奥塞克可以根据系统日志自动且透明地执行此类操作。

答案4

要控制或阻止 http 流量,您可以使用:

但是,请注意这些工具也可能会阻止/减慢网络蜘蛛的速度,从而影响 SEO。

相关内容