在过去的 48 小时内,有 3 次,我们的流量激增了大约 6 倍,持续了几个小时。服务器每次都能处理,但只是勉强应付。这几乎都是坏机器人流量(或者可能是失败的 DOS 尝试)。我需要设置某种墙来自动阻止这种情况发生(而不是在第二天手动查看日志)。当然,fail2ban 在我的搜索中出现了很多次,但我找不到任何好的例子或文档来知道它是否适合我。
我需要为 Apache 实现一个过滤器,该过滤器会根据请求的 URL 和用户代理的正则表达式忽略大部分日志。然后才开始确定某个 IP 是否对我们造成过多的攻击。
问题是我不能只对 IP 地址使用简单的阈值禁令。每个合法的页面请求后面都会紧跟着许多其他支持内容的请求(GET /images/...;GET /extensions/...;GET /skins/...),因此只要阻止在 2 秒内发出 10 个请求的任何人,几乎就能抓住所有人。我需要将这些条目从任何计算中过滤掉,并且只计算顶级请求。
但即使我让它只查看顶级请求(所以现在我可能在 10 分钟内禁止 20 个请求),那么我的问题就是我可以轻松阻止我乐于为其提供页面的爬虫(GoogleBot、Slurp 等),所以我也希望它跳过这些。
Fail2Ban 或其他任何产品是否如此强大?我可以使用几个 grep -v 语句快速获取所需信息,但是否有现有的程序可以做到这一点?