每个客户端的Apache带宽限制,通过子网

我们有兴趣限制HTTP客户端的每秒请求数和/或可用带宽,以阻止意外的DoS。 我们提供免费的科学数据和networking服务,可悲的是一些用户的脚本performance不好。

我知道有很多Apache mod可以让你节省每个客户端的IP地址,但是问题是,有时候我们会看到有人从他们的集群中进行分布式爬取(现在这导致平均负载大于200次!)。

我真正想做的是节制per / 24子网,但不必事先指定哪个子网。

理想情况下,我也希望能够以最大上限的比例来做到这一点,所以如果我们只看到来自一个子网的请求,他们就可以使用所有服务器的资源,但是如果两个子网竞争,每个使用一半。

这是可能的与以下任一:

  • Apache mods
  • 交通pipe制
  • 代理服务器
  • 别的东西?

谢谢!

编辑:几个更进一步的东西…如果有什么需要在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模式。 基本包可以将来自特定终点的大量请求解释为这种模式。