我无法让我的 fail2ban 失败正则表达式与日志条目匹配。
以下是示例日志条目:
Failed login attempt {"xForwardedFor":"192.168.0.38","remoteAddress":"::ffff:127.0.0.1","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0","timestamp":1573556557}
这是我的配置:
[Definition]
failregex= ^Failed login attempt {\"xForwardedFor\":\"<HOST>\"
ignoreregex =
datepattern = "timestamp":{EPOCH}}$
Fail2ban 在运行时或使用 fail2ban-regex 进行测试时不会返回匹配,如下所示。
fail2ban-regex 'Failed login attempt {"xForwardedFor":"192.168.0.38","remoteAddress":"::ffff:127.0.0.1","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0","timestamp":1573556557}' '^Failed login attempt {\"xForwardedFor\":\"<HOST>\"'
答案1
您的日志文件似乎没有以时间戳开头。根据手动的,
为了使日志行与你的 failregex 匹配,它实际上必须匹配两部分:行的开头必须匹配时间戳模式或正则表达式,并且行的其余部分必须与您的 failregex 匹配。如果 failregex 以 为前导锚点
^
,则锚点指的是行的其余部分的开头,位于时间戳和中间空格之后。目前尚未记录与时间戳匹配的模式或正则表达式,用户无法读取或设置。请参阅 Debian 错误 #491253。如果您的日志具有 fail2ban 不期望的时间戳格式,则会出现问题,因为它将无法匹配任何行。因此,您应该针对示例日志行测试任何新的 failregex,如下例所示,以确保它匹配。如果 fail2ban 无法识别您的日志时间戳,那么您有两个选择:要么重新配置您的守护程序以使用更常见格式的时间戳进行记录,例如上面的示例日志行;要么提交错误报告要求包含您的时间戳格式。
我在我的计算机上通过在开头放置时间戳来尝试您的案例,Fail2Ban 确实识别了该模式。
~$ sudo fail2ban-regex '1573556557 Failed login attempt {"xForwardedFor":"192.168.0.38","remoteAddress":"::ffff:127.0.0.1","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0","timestamp":1573556557}' 'Failed login attempt {\"xForwardedFor\":\"<HOST>'
Running tests
=============
Use failregex line : Failed login attempt {\"xForwardedFor\":\"<HOST>
Use single line : 1573556557 Failed login attempt {"xForwardedFor":"...
Results
=======
Failregex: 1 total
|- #) [# of hits] regular expression
| 1) [1] Failed login attempt {\"xForwardedFor\":\"<HOST>
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [1] {^LN-BEG}Epoch
`-
Lines: 1 lines, 0 ignored, 1 matched, 0 missed
[processed in 0.01 sec]
也许您可以修改日志文件,以便将日期和时间放在开头。我还有其他与您的案例相关的参考资料:
希望这有帮助。