Linux 上如何应对 TCP 连接攻击

Linux 上如何应对 TCP 连接攻击

我的服务器被淹没,直到 Apache 变得无响应,并且我需要帮助查找并阻止负责的 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,我不知道为什么会显示它。谢谢。

答案1

您可以尝试限制连接对 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

这将允许每个源 IP 在 10 分钟内建立 5 个到端口 80 的新连接,这可能有助于您花一些时间进行进一步挖掘。如果问题不仅仅影响 Apache,您可以考虑将其应用于全部TCP 连接 - 但在这种情况下,我还建议您为 SSH 连接添加例外。

如果您还没有研究过 fail2ban,可能值得研究一下,您可以配置它来查看您的 apache 日志,并根据特定标准阻止主机。

我不确定我是否会建议现在部署它(出错的可能性似乎有点高),但从长远来看,它值得列入潜在解决方案列表中。

顺便说一句:所有这些都假设问题在于 Apache 的响应能力/负载,而不是互联网连接的负载。

如果您的整个上行链路都已饱和,那么您在主机上能做的事情就不多了,因为问题远不止于此。

如果您使用的是云端系统,也许值得看看有哪些选择。如果不是,也许值得看看 CDN/DDoS 保护公司(首先想到的是 cloudflare,但我不能代表他们的服务发言)是否可以提供帮助。

我还想了解你的机器用这些连接做什么——netstat -ptn可能会有所帮助

除此之外,您还可以查看iftopiptraf帮助您更深入地了解正在发生的事情。另请参阅https://stackoverflow.com/questions/368002/network-usage-top-htop-on-linux

相关内容