我在装有 Buster 的 Raspberry Pi 3 上运行 Fail2ban。Fail2ban 版本为 v0.10.2。上面的一个应用程序正在运行一个简单的 python HTTP 服务器脚本。
我正在尝试从日志文件中匹配这种记录:
12 月 4 日 07:50:00 Pi-New HTTP_Server[585]: 123.456.789.123 - - [04/Dec/2022 07:50:00] 代码 400,消息错误请求版本 ('\xc0\x13\xc0')
我尝试了很多正则表达式。这些是最新的几行,但都没有成功
1. '^.*\]: <HOST> - - .* 400, $'
2. "^.*\]: <HOST> - - \[\+0000\].* 400, $"
后者当我读到一篇帖子说fail2ban在传递给正则表达式行之前删除了日期部分时
fail2ban-regex 的输出总是这样的:
运行测试
使用 failregex 行:^。]: - - [+0000]。400,$ 使用
单行:12 月 4 日 07:50:00 Pi-New HTTP_Server[585]:...结果
Failregex:共 0 个
忽略正则表达式:共 0 个
日期模板命中:|- [命中数] 日期格式 | [1] {^LN-BEG}(?:DAY )?MON Day %k:Minute:Second(?:.Microseconds)?(?: ExYear)? `-
行数:1 行,0 行被忽略,0 行被匹配,1 行遗漏 [处理用时 0.03 秒]
|- 错过的行:| 12 月 4 日 07:50:00 Pi-New HTTP_Server[585]: 123.456.789.123 - - [04/Dec/2022 07:50:00] 代码 400,消息错误请求版本('\xc0\x13\xc0')
这似乎表明它找到了日期,但之后没有找到任何匹配项。我做错了什么?...RDK
答案1
在正则表达式中,$
断言行末尾的位置,但日志行不以 结尾400,
。
如果您对 HTTP 错误的更具体原因不感兴趣400
,则以下正则表达式可以匹配您的日志行。您可能希望使其更具限制性,以避免任何误报,但这是您可以使用的格式,例如https://regex101.com/。
^.*\[[0-9]+\]: ([0-9.]+) - - \[.+\] code 400,.*$
准备好后,
- 匹配组
([0-9.]+)
是对 IP 地址的快速而粗略的匹配:应该将其替换为以<host>
检测它。 - 也许
.*\[[0-9]+\]:
可以用 来代替%(__prefix_line)s
。
最终的 fail2ban 过滤器看起来像这样:
^%(__prefix_line)s <host> - - \[.+\] code 400,.*$
另请查看开发过滤器Fail2Ban 文档中的文章。