运行测试

运行测试

我在装有 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 文档中的文章。

相关内容