You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为fail2ban编写可用的Apache AH10244错误正则过滤规则

Fail2Ban Apache AH10244日志过滤配置问题解答

问题背景

我的Apache2 error.log包含以下日志条目:

[Thu Jan 12 09:18:51.078445 2023] [core:error] [pid 47992] [client 152.89.196.211:53158] AH10244: invalid URI path (/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh)
[Wed Jan 11 06:01:09.820582 2023] [core:error] [pid 30833] [client 185.225.74.55:39856] AH10244: invalid URI path (/cgi-bin/.%%%%32%%65/.%%%%32%%65/.%%%%32%%65/.%%%%32%%65/.%%%%32%%65/bin/sh)
[Wed Jan 11 17:16:49.643509 2023] [core:error] [pid 41882] [client 152.89.196.211:52746] AH10244: invalid URI path (/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh)

我用命令行测试正则有效:

fail2ban-regex test.log '.*\[client <HOST>:\d+\] AH10244.*$'

但将正则写入filter.conf后:

[Definition]
 
failregex = .*\[client <HOST>:\d+\] AH10244.*$
 
ignoreregex =

执行测试时Fail2Ban报错:

Running tests
=============

Use   failregex line : filter.conf
ERROR: No failure-id group in 'filter.conf'

1. 如何将该正则正确封装到.conf文件中?

分两步修正:

  • 修正配置文件中的正则:把配置里的&lt;HOST&gt;改成<HOST>——命令行里用&lt;是为了避免Shell转义,但配置文件里直接写Fail2Ban的原生变量<HOST>即可,不需要HTML转义。修正后的配置:
    [Definition]
    failregex = .*\[client <HOST>:\d+\] AH10244.*$
    ignoreregex =
    
  • 使用正确的测试命令:测试配置文件时,要把配置文件路径作为第二个参数传给fail2ban-regex,而不是把文件名当成正则字符串。示例命令:
    fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/your-filter.conf
    

2. 该错误提示的含义是什么?

这个错误是因为你执行fail2ban-regex时,误将配置文件名filter.conf当作了正则表达式字符串来解析。Fail2Ban会尝试把filter.conf这个文本当作正则去匹配日志,但其中没有包含<HOST>(Fail2Ban用来捕获客户端IP的预定义组),自然无法识别到失败事件的标识(failure-id),因此报错。

简单说:命令用错了,把配置文件当成了正则文本参数。

3. 能否并如何利用apache-common.conf中的预定义内容增强正则的健壮性?

完全可以。apache-common.conf中定义了大量适配Apache日志的通用正则片段,能避免自己写冗余的正则,同时适配不同的Apache日志格式。

具体操作:

  1. 在你的filter配置文件顶部添加before = apache-common.conf,引入预定义规则
  2. 使用预定义的正则变量重构failregex:
    [Definition]
    before = apache-common.conf
    failregex = %(apache_error_log)s \[client %(apache_client_host)s\] AH10244:.*
    ignoreregex =
    

其中:

  • %(apache_error_log)s:匹配Apache错误日志的前缀(包含时间戳、日志级别、进程ID等),适配不同的时间格式和日志前缀
  • %(apache_client_host)s:匹配客户端IP和端口的部分,替代自己写的<HOST>:\d+,更通用

这样的正则不仅更简洁,还能兼容不同的Apache日志配置,健壮性更强。


内容的提问来源于stack exchange,提问作者JB0x2D1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:35:27