如何在短时间内自动临时阻止IP地址对服务器造成太大影响?


21

我的一台LAMP服务器最近被某种脚本僵尸程序关闭,以寻找漏洞。从外观上看,它每秒发出如此多的请求,以至于服务器上的RAM过载,并使我的整个站点宕机了一个小时。该“ attacK”全部来自单个IP地址。

那么,如何在短时间内自动和临时阻止在LAMP Server上点击次数过多的IP地址?什么是完成这项工作的最佳工具,我应该在操作系统级别还是通过PHP解决此问题?

Answers:


25

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


有趣,谢谢。这如何处理或影响Google等网络抓取工具?
ProgrammerGirl

1
@Programmer取决于您对事物的配置方式,但是您不希望Web爬网程序输入错误的密码,搜索漏洞利用或累积足够的命中次数来触发明确定义的阈值-因此,只需检查您的日志以找出答案即可定义阈值的方式。
HopelessN00b

5

您应该避免尝试使用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。这是一个很好的解释


2

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

但是,请注意,这些工具也可能会阻止/减慢webspiders,从而影响SEO。


2
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可以基于系统日志自动透明地执行此类操作。


1
您能解释一下第一行代码的确切含​​义吗?另外,ossec与fail2ban相比如何?谢谢。
ProgrammerGirl

2
这是一个iptables规则。我相信它会计算进行多少次新的连接尝试,并在60秒内超过4次尝试后将其丢弃。我鼓励您查看man iptables并了解每个标志的含义以及它们如何协同工作。
路加福音

-3

NoooBS,

-洪水-

iptables -N logdrop iptables -A logdrop -m最近--set --name黑名单

iptables -A logdrop -m limit --limit 1 / s --limit-burst 1 -j LOG --log-prefix“ Flood:”

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.