使用 IP 表規則阻止 DoS 攻擊?
我想知道是否可以使用簡單的 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 根本無助於網路擁塞,並且對任何分佈式攻擊都相當無效 - 它的優勢在於安全性和減少伺服器上的負載。