Centos
如何應對 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
這是計算每個 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
可能會有所幫助除此之外,您可以查看
iftop
或iptraf
幫助您更深入地了解正在發生的事情。另請參閱https://stackoverflow.com/questions/368002/network-usage-top-htop-on-linux