
我的 Apache Web 伺服器有一個問題,其中的 IP 比連接到我的伺服器時使用了大量連接並且不會死掉,這最終使我的 Web 伺服器逾時。如果我檢查使用,連線將保持 SYN_SENT 狀態
netstat -netapu
我什至刷新了我的 iptables 並使用了基本規則,但它仍然不起作用。當我啟動 Apache 時,IP 將被連接
我使用的基本規則:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
iptables -A INPUT -s 89.149.244.117 -j REJECT
iptables -A OUTPUT -s 89.149.244.117 -j REJECT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
粗體部分是有問題的規則。
不確定這是否相關,但 tcp_syncookies 值為 1。
有人可以指出我的錯誤嗎?有沒有辦法永久阻止它。
答案1
你能向我們展示一下輸出嗎
iptables-save
?也許規則的順序不是你想像的那樣。然後
iptables -A OUTPUT -s 89.149.244.117 -j REJECT
可能應該讀:
iptables -A OUTPUT -**d** 89.149.244.117 -j REJECT
順便問一下,為什麼 REJECT 而不是 DROP ?那如果你使用的是state模組,你應該這樣寫:
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
請注意,如果您的伺服器位於 DSR 模式下的負載平衡器後面,則狀態模組將無法正常運作。
答案2
停留在 SYN_SENT 狀態的連線稱為胚胎連接。當您嘗試與 IP 位址建立連線並且由於某種原因 IP 無法與您聯繫時,就會發生這種情況。這意味著你試圖與他建立聯繫,而不是相反。
我不知道在添加這兩個規則之前它是什麼樣子,但按照現在的方式,您可以發送三向握手的第一部分(SYN),但無法接收第二部分(SYN) /ACK),這將為每次嘗試留下一個處於SEN_SENT 狀態的連線。
我懷疑您複製/貼上了第一條規則來創建第二條規則並將 INPUT 更改為 OUTPUT 但忘記更改-s
為-d
.我知道,因為我自己已經做過不只一次了。
答案3
您需要嘗試“FAIL2BAN”linux實用程序,它可以阻止大多數此類暴力攻擊。 Fail2Ban 支持保護 ssh、apache 和許多其他服務的暴力攻擊。例如,如果某個 IP 位址試圖建立大量並發連接,則fail2ban 將透過 iptables 自動新增(並在一段時間後刪除)該 IP 位址來封鎖它。