Apache-2.2

網際網路上典型的 apache web 伺服器的 iptables 應該起到什麼作用來幫助 DoS 攻擊

  • July 31, 2011

我需要知道網際網路上典型的 apache web 伺服器的 iptables 應該起到什麼作用,以幫助防止或限制 DoS 或其他攻擊。

正如您所指出的,IPTables 不是 DoS 的最終解決方案 - 至少一個原因是您的伺服器仍然接收數據包並且必須處理它們。如果發送了足夠多的數據包,您的頻寬將耗盡,您的伺服器仍將進行大量處理,而合法請求可能無法通過。

儘管如此,IPTables 有其用途,如果您無法在伺服器外部(上游)設置設備,它們可能是一種合理的防禦措施。

起點是關閉除您需要的埠以外的所有埠。對於 Web 請求,您需要打開埠 80(如果使用 HTTPS/SSL,則需要打開埠 443)。您的伺服器執行的任何其他服務(SSH、FTP、POP、SMTP、IMAP 等)都需要打開額外的埠。

請注意 - 在您阻止太多埠之前,請確保您已經實施了一些措施來重置您的配置,如果您讓自己“被鎖定”。

至於 DoS,您可能想查看最近的模組。它將監視來自給定 IP 地址的傳入請求的數量,可以以這樣的方式使用,即如果超出您指定的限制,來自相關 IP 地址的所有未來數據包都將被丟棄(在您指定的時間內)。

例如,您可能會說,如果在 60 秒內來自 IP 的新請求超過 100 個,則在 1 小時內丟棄來自該 IP 的請求。

如果你想要更複雜的東西,你可以實現一個分層系統,第一次阻止 IP 10 分鐘,第二次阻止 30 分鐘,等等。

我使用類似的東西,但用於非 HTTP 連接(例如 SSH、FTP 等),您可以在此處看到。對您來說,一個可能的(不完整的)實現可能如下所示:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 80 -m recent --update --seconds 1800 --name BANNED --rsource -j DROP
-A INPUT -p tcp -m multiport --dports 80 -m state --state NEW -j ATTK_CHECK

#OTHER PRE-EXISTING RULES

-A ATTK_CHECK -m recent --set --name ATTK –-rsource
-A ATTK_CHECK -m recent --update --seconds 60 --hitcount 100 --name ATTK --rsource -j ATTACKED
-A ATTK_CHECK -j ACCEPT
-A ATTACKED -m limit --limit 5/min -j LOG --log-prefix "IPTABLES (Rule ATTACKED): " --log-level 7
-A ATTACKED -m recent --set --name BANNED --rsource -j DROP

基本上是禁止30分鐘,如果80埠的命中率超過100次/分鐘,如果攻擊還在繼續,繼續延長30分鐘。

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