如何检测和禁止使用php攻击ips

我有一个虚拟主机,不允许编辑iptables。 从时间上来说,我有轻(约300请求/秒)的DoS攻击(通常不分发)。 我决定写一个PHP脚本来阻止这些ips。 首先,我尝试将最近10秒的所有请求存储在数据库中,并查找滥用每个请求的地址。 但是我很快意识到,这样我必须对每个DoS请求至less执行一次数据库请求,这样做不好。 然后我优化了这个方法如下:

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,你可能已经共享了主机,所以你的主机很有可能会看到一个攻击,并希望在它失控之前将其限制在上游。