Apache 访问日志

Apache 访问日志

我使用 fail2ban 来检测对我托管的任何域的恶意请求,除了一个例外,其他都运行良好。

如果请求发送到 IP 而不是 fqdn 或子域,则会被捕获并写入 other_vhosts_access.log,因为 ip 本身不是虚拟主机。

示例条目:

somedomain.de:80 20.37.96.167 - - [24/Jan/2020:15:47:04 +0100] "POST //4walls/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1" 301 587 "https://www.google.com/“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/79.0.3945.88 Safari/537.36”

因此看起来,apache 对 IP 进行反向查找并首先记下主机名。

这会导致 fail2ban 自行禁止服务器 IP 而不是请求者的 IP。

我怎样才能阻止 somedomain.de:80 进入?

答案1

apache 对 IP 进行反向查找并首先记下主机名。

如果您的过滤器正确制作(例如没有捕获所有内容的锚定正则表达式),则无论域和外部地址的具体写在哪里都无所谓。

我假设在您的示例日志条目中,somedomain.de是您的,并且20.37.96.167是“入侵者”的地址。那么正确的失败正则表达式将如下所示:

# ban everything (with code 300-599):
failregex = ^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+

锚定部分^\S+\s+<ADDR>匹配somedomain.de:80 20.37.96.167,并且仅由于锚点而从开头搜索字符串^。如果您必须禁止所有内容(无论生成的 http 状态如何),
这也足以作为正则表达式。other_vhosts_access.log

如果您的 fail2ban 版本 <= 0.9,请使用<HOST>而不是<ADDR>

您还可以检查fail2ban-regex它是否会捕获一些误报,例如:

fail2ban-regex --raw -vv /path/to/log '^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+' \
  | grep <your-IP-or-hostname>

相关内容