如何使用php检测并禁止攻击ip

如何使用php检测并禁止攻击ip

我有一个不允许编辑 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向数据库发出请求,然后就会被阻止。

那么,问题是,这种方法是否具有最佳性能?有没有更好的方法来完成这项任务?

答案1

如果请求可以以任何方式到达您的服务器(即使您可以编辑 iptables),它仍然会占用带宽。如果您的服务器每秒可以处理 300 个请求,那么不用担心。如果您的带宽被堵塞,那么您就必须在上游处理它。如果您无法在服务器上编辑 iptables,则您可能拥有共享主机,因此您的主机很可能会发现攻击,并希望在失控之前将其限制在上游。

相关内容