
我在負載平衡器後面運行了數百個網頁伺服器,託管著許多不同的站點,其中包含大量應用程式(我無法控制這些應用程式)。大約每月一次,其中一個網站會遭到駭客攻擊,並上傳洪水腳本攻擊某些銀行或政治機構。過去,這些都是 UDP 洪水,透過阻止單一網路伺服器上的傳出 UDP 流量來有效解決。昨天,他們開始使用許多到連接埠 80 的 TCP 連接從我們的伺服器淹沒一家大型美國銀行。
我正在考慮以下替代方案。您會推薦哪一款?您實施了這些嗎?
- 限制來源連接埠 != 80 的 Web 伺服器 (iptables) 傳出 TCP 封包
- 相同,但需要排隊 (tc)
- 對每個伺服器每個使用者的傳出流量進行速率限制。這是相當大的管理負擔,因為每個應用程式伺服器可能有 1000 個不同的使用者。也許這個:如何限制每個使用者的頻寬?
- 還要別的嗎?
當然,我也在尋找方法來最大程度地減少駭客進入我們託管網站的機會,但由於該機制永遠不會 100% 防水,因此我想嚴格限制入侵的影響。
更新:我目前正在使用這些規則進行測試,這將阻止這種特定的攻擊。您建議如何使它們更加通用?當我僅對 SYN 封包進行速率限制時,我是否錯過了已知的 TCP DoS 攻擊?
iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset
乾杯!
答案1
我認為最好的解決方案以及對我來說效果很好的解決方案是限制目標 IP 的連接/資料包數量。將限制設為合理的速率將防止攻擊者向目標發送大量連線。設定連接埠和協定不是一個好主意,因為如果攻擊者今天發送 http 洪水,明天他將使用不同類型的攻擊。因此,限制每個 ip 的連線通常可以解決您的問題。
我希望它有幫助:)
答案2
我一直採取的立場是,網頁伺服器根本不應該建立出站 TCP 連線 - 僅作為回應入站請求的伺服器發送流量。 (我還只允許 Web 伺服器和 SSH 使用入站 TCP。)(與此相關,我還相信 Web 伺服器永遠不是發送郵件的正確主機。)這不僅可以防止出站攻擊 - 它還增加了一些難度對您的系統進行的攻擊(駭客無法取得xterm 視窗或將他們的工具包發送到您的主機)。