我的服务器被淹没,直到Apache变得无法响应, 我需要一些帮助find并阻止负责任的IP地址 。
通常,我没有超过150个连接。 现在我有几千:
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n 1 established) 1 Foreign 13 LAST_ACK 20 CLOSING 30 SYN_RECV 41 LISTEN 44 FIN_WAIT1 74 FIN_WAIT2 77 CLOSE_WAIT 273 ESTABLISHED 1960 TIME_WAIT
MRTG图清楚地显示了攻击开始之前的正常连接:
这是每个IP计数连接的结果(仅列表的结尾):
netstat -atun | awk '{print $5}' | cut -d: -f1 | sed -e '/^$/d' |sort | uniq -c | sort -n 5 4.59.90.216 5 4.59.90.222 5 4.59.90.237 5 4.59.90.242 5 74.125.26.95 6 186.158.143.202 6 216.58.219.162 6 4.59.90.251 7 104.24.5.60 7 216.58.192.66 7 4.59.90.212 7 4.59.90.231 7 4.59.90.241 9 216.58.192.98 10 189.177.214.89 10 23.10.101.162 11 4.59.90.226 12 85.94.197.200 25 216.58.219.66 31 216.58.219.130 40 0.0.0.0 86 83.101.136.42 1026 10.0.0.2
最后一个是服务器的IP,我不知道为什么显示。 谢谢。
有一件事你可以尝试限制在Apache上的连接的影响是限制他们。
有几种方法可以做到这一点,但有一种方法可能是:
iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 600 --hitcount 5 -j DROP
这将允许5个新的连接到每个源IP在10分钟内端口80,这可能会帮助您购买一些时间进一步挖掘。 如果问题不仅仅是apache,你可能会考虑把它应用到所有的 TCP连接 – 但是我也build议你在这种情况下为你的SSH连接添加一个例外。
可能值得研究的是fail2ban,你可以configuration它来查看你的apache日志,并根据特定的标准阻塞主机。
我不确定我现在是否会build议部署这种方法(出现问题的可能性似乎有点高),但从长远来看,这是值得列出潜在解决scheme的。
顺带一提:所有这一切都假设问题是Apache的响应/负载,而不是您的互联网连接的负载。
如果您的整个上行链路正在饱和,那么您的主机上可以做的事情就不多了,因为问题进一步恶化了。
如果你是基于云的,也许值得看看有什么select。 如果你不是,也许值得一看,如果一个CDN / DDoS防护公司(cloudflare想到的,但我不能说服务)可以帮助。
我也倾向于找出你的机器正在做的所有连接 – netstat -ptn可能有一些帮助
除此之外,您可以看看iftop或iptraf有助于您更深入地了解正在发生的事情。 另请参阅https://stackoverflow.com/questions/368002/network-usage-top-htop-on-linux