Centos

如何應對 Linux 上的 TCP 連接攻擊

  • March 9, 2017

我的伺服器被淹沒,直到 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 圖表清楚地顯示了攻擊開始之前的正常連接: 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

這將允許在 10 分鐘內每個源 IP 有 5 個新連接到埠 80,這可能有助於為您贏得一些時間來進一步探勘。如果問題不僅僅是 apache,您可能會考慮將其應用於所有TCP 連接 - 但我也建議您在這種情況下為您的 SSH 連接添加一個例外。

如果您還沒有,可能值得研究的是fail2ban,您可以將其配置為查看您的apache日誌,並根據某些標準阻止主機。

我不確定我是否會建議立即部署它(出現問題的可能性似乎有點高),但從長遠來看,值得將其列入潛在解決方案列表。

順便說一句:所有這些都是假設問題是 Apache 的響應能力/負載,而不是您的 Internet 連接上的負載。

如果您的整個上行鏈路已經飽和,那麼您在主機上就無能為力了,因為問題遠不止於此。

如果您是基於雲的,也許值得看看存在哪些選項。如果你不是,也許值得看看 CDN/DDoS 保護公司(想到 cloudflare,但我不能代表他們的服務)可以提供幫助。

我也傾向於想知道你的機器對所有這些連接做了什麼——netstat -ptn可能會有所幫助

除此之外,您可以查看iftopiptraf幫助您更深入地了解正在發生的事情。另請參閱https://stackoverflow.com/questions/368002/network-usage-top-htop-on-linux

引用自:https://serverfault.com/questions/837297