我们有兴趣限制HTTP客户端的每秒请求数和/或可用带宽,以阻止意外的DoS。 我们提供免费的科学数据和networking服务,可悲的是一些用户的脚本performance不好。
我知道有很多Apache mod可以让你节省每个客户端的IP地址,但是问题是,有时候我们会看到有人从他们的集群中进行分布式爬取(现在这导致平均负载大于200次!)。
我真正想做的是节制per / 24子网,但不必事先指定哪个子网。
理想情况下,我也希望能够以最大上限的比例来做到这一点,所以如果我们只看到来自一个子网的请求,他们就可以使用所有服务器的资源,但是如果两个子网竞争,每个使用一半。
这是可能的与以下任一:
谢谢!
编辑:几个更进一步的东西…如果有什么需要在networking基础设施级别(如路由器),这是我们的责任,并成为一个即时PITA。 所以我希望find一个解决scheme,只需要在服务器级别进行更改。 另外请不要冒犯,如果我花了一段时间来挑选一个胜利者,这是一个新的话题给我,所以我想读一下这个build议有点:-)
如果您使用HAProxy或可以使用它检查看看这个博客post是否有帮助</end_shameless_promotion_of_a_fellow_admin_and_company :)>
要特别小心。 简单地减慢networking意味着你将会复制任何DOS攻击 – 你需要在到达networking服务器之前限制连接。
考虑 – 磁盘速度非常慢,一次只能处理一个请求。 确定networking服务器性能的最重要的因素之一是操作系统可以执行的I / Ocaching的数量 – 这受限于系统上的可用内存量。 每当一个请求进入,一个Apache进程(或线程)计划处理它。 这个过程将会占用整个内存和CPU的时间,它需要编写响应并通过互联网发送给客户端。 拒绝这个内存到I / Ocaching。 减less这种影响的一种方法是在web服务器前面使用合适的反向代理 – 例如,作为单线程服务器的squid。
假设你可以避免堵塞你的web服务器的问题,那么你可能想看看在你的networking周边运行stream量整形器。 Linux现在标配了tc 。
(/我刚刚search了'linux tc',并得到了比基尼女孩的照片;)
在识别爬虫/真正的DDOS方面,答案要复杂得多。 当然,现在还没有现成的解决scheme可以可靠地用于我所知道的HTTP。 但是应该可以修改fail2ban中的检测器来触发locking或节stream,以检测exception模式。 基本包可以将来自特定终点的大量请求解释为这种模式。