我有一个不允许编辑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