我可以不正常地關閉 TCP 連線以減輕拒絕服務攻擊嗎?

我可以不正常地關閉 TCP 連線以減輕拒絕服務攻擊嗎?

我從事一項 Web 服務工作,該服務可能成為拒絕服務攻擊的目標。我們針對「SYN 洪水」式攻擊採取了一些緩解措施。但我們的服務還存在其他「應用程式層級」攻擊,其中惡意/損壞的用戶端可能會重複指示 Web 服務執行昂貴的任務。

我們可以在應用程式層(即我們的伺服器進程中)識別這些濫用的客戶端。一旦我們的流程識別出濫用的客戶端連接,我們就會降低對該客戶端的服務水準。

一種簡單的方法是使用close(2)shutdown(2)或類似命令終止 TCP 連線。但隨後用戶端可以立即重新連線(達到為緩解 SYN 泛洪而設定的連線數/秒限制),並且由於 TLS 握手和其他連線設定成本,這種重新連線對我們來說成本高昂。我們正在尋找一種方法來暫時停止客戶端與我們的服務交互,但乾淨的 TCP 連線終止並不能做到這一點。

但是,如果我們的進程能夠終止 TCP 連線不潔地,濫用的客戶端在重新連接之前會延遲一段時間,從而提供一個「冷靜」期。我所說的「不乾淨終止」是指關閉伺服器端的 TCP 連線(全雙工的兩半),而不發送任何FIN資料包來通知客戶端終止,並且不發送任何引用該連線的進一步資料包。當客戶端認為連線仍處於該ESTABLISHED狀態時,這會延遲客戶端(在 Linux 上為 13-30 分鐘)。

但是,我看不出 UNIX/Linux 進程有任何方式不正常地終止 TCP 連線。close(2)shutdown(2)以及類似的所有似乎都乾淨地終止連接,並且不提供不乾淨終止的選項。

UNIX/Linux 中是否存在任何選項可以立即終止不乾淨的 TCP 連接,以緩解 DOS 攻擊?

答案1

您應該研究的是防火牆和fail2ban.iptables仍然是 Linux 發行版的標準,並且fail2ban可以與大多數服務一起使用。您想要做的是配置fail2ban為使用特定的正則表達式模式監視特定的日誌文件,以了解這些“有問題的”客戶端之一何時連接,然後fail2ban自動添加防火牆規則以丟棄或拒絕連接。 fail2ban 可以設定如何離開防火牆規則,這樣您就可以阻止客戶端 5 分鐘或 5 天,無論您真正想要什麼。

您也可以使用 Web 應用程式防火牆 (WAF) 來處理此類內容。

就 DOS 攻擊而言,根據其實施方式,您可能無法使用本地防火牆,並且可能必須與您的上游提供者聯繫以處理已知有問題並導致問題的黑洞路由或主機。聽起來您並不處於這種位置,只是有一個潛在的應用程式層問題需要解決,所以這是矯枉過正。

答案2

一旦我們的流程識別出濫用的客戶端連接,我們就會降低對該客戶端的服務水準。

由於您已經提到建立新連線會產生相關成本,因此我建議您考慮採用替代方法而不是終止連線。也許您可以考慮將該連線的速率限制為每分鐘 1 位元組或類似的值。透過這種方法,您仍然可以以最少的成本讓攻擊者的資源處於忙碌狀態。如果您有更多時間並且想要發揮創意,請將所有此類連線重新導向到您環境中的一台伺服器,以便其他伺服器不會浪費其開啟檔案限制。正如安德魯所提到的,一旦您確認連接來自攻擊者並且可以安全地禁止它幾個小時,您也可以考慮使用fail2ban。

相關內容