Php

如何使用 php 檢測和禁止攻擊 ip

  • November 5, 2011

我有一個不允許編輯 iptables 的虛擬主機。有時我會遇到輕微的(大約 300 個請求/秒)DoS 攻擊(通常不是分佈式的)。我決定編寫一個 PHP 腳本來阻止這些 IP。首先,我嘗試將過去 10 秒的所有請求儲存在數據庫中,並為每個請求查找濫用地址。但是我很快意識到,這種方式我必須為每個 DoS 請求至少向數據庫發出 1 個請求,這並不好。然後我優化了這種方法如下:

Read 'deny.txt' with blocked ip's
If it contains request ip, then die()
--- at this point we have filtered out all known attacking ips ---
store requesting ip in database
clean all requests older than 10 secs
count requests from this ip, if it is greater than threshold, add it to 'deny.txt'

這樣,新的攻擊 ip 只會Threshold向數據庫發出請求,然後被阻止。

那麼,問題是,這種方法是否具有最佳性能?有沒有更好的方法來完成這項任務?

如果請求可以以任何方式訪問您的伺服器(即使您可以編輯 iptables),它仍然會佔用頻寬。如果您的伺服器每秒可以處理 300 個請求,那麼請不要擔心。如果您因頻寬而窒息,那麼您將不得不在上游處理它。如果你不能在你的伺服器上編輯 iptables,你可能有共享主機,所以你的主機很可能會看到攻擊,並希望在它失控之前限制它上游。

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