Apache-2.2

使用 IP 表規則阻止 DoS 攻擊?

  • November 16, 2018

我想知道是否可以使用簡單的 IP 表規則來防止小型 (D)DoS 攻擊?

小我的意思是他們正在用來自一個或兩個 IP 地址的大約 400 多個請求淹沒我的 Web 伺服器。在我注意到 IP 地址開始訪問我的 Web 伺服器後,我可以刪除它們,但 IP 表通常需要幾分鐘才能針對該 IP 啟動,然後開始完全刪除它,這樣它就不會影響該 Web 伺服器.

我使用以下命令刪除 IP:

iptables -I INPUT -s "IP HERE" -j DROP

然後顯然保存它:

/etc/init.d/iptables save

我通常使用以下命令找出攻擊 IP 地址:

netstat -plan|grep :80|awk '{print $5}'|cut -d: -f 1|sort|uniq -c|sort -n

這樣做的問題是我必須在那裡,而且它要求我在事後採取行動。是否有 IP 表規則可用於在 IP 地址達到 150 個連接後立即刪除它?這樣我就不必擔心它會壓倒網路伺服器,我也不必當時在那裡阻止它。

順便說一句,如果這很重要,我會在 CentOS 上使用 Apache。

感謝您的時間。

對於提供靈活性的東西,請查看最近的(和限制)模組。最近將跟踪 IP 在給定時間範圍內建立的連接數,並可用於觸發特定規則。最近的模組(相對)CPU 很重 - 但與載入動態頁面相比,可以接受。

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

-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
-A ATTK_CHECK -m recent --set --name ATTK –-rsource
-A ATTK_CHECK -m recent --update --seconds 600 --hitcount 150 --name ATTK --rsource -j ATTACKED
-A ATTK_CHECK -m recent --update --seconds 60 --hitcount 50 --name ATTK --rsource -j ATTACKED
-A ATTK_CHECK -j ACCEPT

從本質上講,上述內容相當於:

  • 接受已經建立的連接(即它們已經通過了我們的規則)

  • 從被禁止的 IP 中刪除埠 80 和 443 (SSL) 上的所有連接 - 如果他們繼續嘗試連接,請延長時間 - 等待一個小時(沒有任何連接嘗試),然後再解除阻止。

  • 根據我們的規則檢查新連接:

    • 考慮 10 分鐘內超過 150 個連接的攻擊
    • 考慮 1 分鐘內超過 50 個連接的攻擊
    • 記錄攻擊(但每分鐘不超過 5 個條目 - 不要淹沒我們的日誌);並阻止連接

有關更詳細的解釋,以及我使用的上述分層版本,請參閱這篇文章

請記住,ipTables 根本無助於網路擁塞,並且對任何分佈式攻擊都相當無效 - 它的優勢在於安全性和減少伺服器上的負載。

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