可能重复:
DDoS攻击,如何阻止?
我正在运行一个专用的http服务器来驱动一个私人网站。 服务器的IP已经公开了,这很好。 反正什么都不能隐藏。
问题是服务器每天有3到8次攻击,每次连接超过4000次。 服务器和设备同时处理最多600个连接。 因此,服务器堵塞。 当时我有两个select:
抓住攻击者的IP,并将其添加到服务器上安装的基于软件的防火墙内的阻止列表,直接攻击这个攻击。 但是攻击来自不同的IP地址,因此一个一个地阻止要求,而不是有效的。
重新启动主路由器以阻止当前的攻击,但可以在任何时候再次开始。
我的ISP对此无能为力。 我有什么select?
在服务器产生任何影响之前,是否会放置一些具有DDoS保护function的swtich /路由器?
你在这里讨论的数字是在一个单一的,performance不佳的机器人范围内。 事实上,你正在达到你的Apache MaxChildren限制,而不是内存,带宽或CPU的限制,他们正在做有效的HTTP请求也倾向于有利的机器人,而不是故意的DDoS。
如果它是一个机器人,可能会有一个小范围,甚至一个IP地址负责。 当它正在进行时,通过查看日志文件可以识别有关的IP地址:
tail -5000 access.log | cut -d' ' -f1 | sort | uniq -c | sort -n
调整尾巴中的数字以匹配网站的繁忙程度。
对于同时连接,你也可以看看netstat :
netstat -tan | grep ESTABLISHED | awk '$4 ~ /:80/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
grep通过访问日志查找由netstat标识的任何IP地址,并确保它不仅仅是一个热情的用户,甚至你自己的办公室IP地址。
一旦你能分辨出有人试图把你的网站closures,而有人试图尽快抓取你的网站,你可以采取措施来阻止它。
这个例子是“挖掘;外部”机器人。 这个僵尸工具用于从HTML页面中抓取电子邮件地址。 它在页面请求之间没有停顿,它一次运行多个线程(根据我的访问日志,我的猜测是10)。 当它到达时,它可以在我的访问日志中每分钟额外增加1000个请求。 它方便地将string“挖掘;分机”广告给它的用户代理,使我们能够轻松地阻止它。 如果Apache基于User-Agent返回403那么使用PHP的3秒页面加载可以降到几百微秒。
由于这些是完整的TCP连接,IP不能被欺骗。 因此,阻止IP地址应该是有效的。 如果IP范围是dynamic的,ADSL或类似的,那么在防火墙上丢包是合适的。 如果他们是服务器托pipe范围,可能这是由于无能,而不是恶意,很高兴发回403响应暗示,他们可能想要使自己的机器人更好的performance。
mod_security OWASP核心规则集对我上面提到的机器人以及许多其他机器人的规则,以及与许多其他机器人的特征相匹配的启发式规则,但没有真正的浏览器,比如没有Accept:头。
防止分布式DOS是具有挑战性的。 理论上不可能停止。 我会build议你运行一个数据包分析器(如tcpdump),并试图了解数据包。 攻击者主机的90%的时间共享一些类似的数据包标志,您可以用来阻止攻击。