我有一個不允許編輯iptables的虛擬主機。從時間上看,光(約300個請求/秒)拒絕服務攻擊(通常不分發)。我決定編寫一個PHP腳本來阻止這些ips。首先,我嘗試將最近10秒的所有請求存儲在數據庫中,並查找濫用每個請求的地址。但是我很快意識到,這種方式對於每個DoS請求都必須至少執行一次數據庫請求,並且它不好。然後我優化的這種做法如下:如何使用php檢測和禁止攻擊ips
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
請求數據庫中,然後被阻斷。
因此,問題是,這種方法是否具有最佳性能?有沒有更好的方法來完成這項任務?
或者只是存儲永久黑名單成'.htaccess'文件。那麼PHP甚至不會再被那些困擾。 – hakre
@GolezTrol非常好的建議,但不幸的是我沒有訪問memcached – Poma
@hakre哇!這很可能會加速我的腳本。謝謝! – Poma