基于ip,请求和useragent的组合的Apache阻止 – 可以fail2ban做到这一点?

在过去的48小时内有3次,我们大约有6X的通话量持续了几个小时。 服务器每次处理它,但几乎没有。 这几乎是所有不好的僵尸stream量(或者可能是DOS尝试失败)。 我需要设置某种types的墙,以便在发生这种情况时自动阻止此操作(而不是在第二天手动通过日志)。 当然,fail2ban在我的search中出现了很多,但我找不到任何好的例子或文档来知道它是否适合我。

我需要为apache实现一个filter,忽略大部分日志,具体取决于请求的URL以及用户代理的正则expression式。 然后才开始确定一个IP是否太多了。

问题是,我不能只使用一个简单的阈值禁止IP地址。 每一个合法的页面请求都会紧接着很多其他请求来支持内容(GET / images / …; GET / extensions / …; GET / skins / …)在2秒钟内几乎会抓住所有人。 我需要从任何计算中过滤这些条目,并只计算顶级请求。

但即使我只是看看顶级请求(所以现在也许我10分钟内禁止20个请求),那么我的问题是,我可以轻松地阻止抓取工具,我很乐意为页面提供服务(GoogleBot ,Slurp等),所以我也希望它跳过这些。

是Fail2Ban或任何其他产品在那里强大? 我可以用两个grep -v语句快速获得需要的信息,但是有没有现有的程序已经这样做?