我正在尝试针对此字符串创建一个fail2ban正则表达式:
[2020-Nov-10 16:13:35] [freepbx_security.NOTICE]: Authentication failure for S from 109.38.128.48 [] []
到目前为止,我创建的是这个正则表达式:
\[.*\] \[freepbx_security\.NOTICE\]: Authentication failure for .* from <HOST> \[\] \[\]
我更改了样式以显式使用Python。 Regex101显示了一个匹配项,但是我的fail2ban-regex仍然无法观察到它。
我用最基本的形式创建了一个测试用例,并以最简单的方式对它进行了测试,但是失败了:
fail2ban-regex 'Authentication failure for S from 109.38.128.48' 'Authentication failure for S from <HOST>'
Running tests
=============
Use failregex line: Authentication failure for S from <HOST>
Use single line: Authentication failure for S from 109.38.128.48
Results
=======
Failregex: 0 total
Ignoreregex: 0 total
Date template hits:
Lines: 1 lines, 0 ignored, 0 matched, 1 missed
[processed in 0.02 sec]
|- Missed line(s):
| Authentication failure for S from 109.38.128.48
如果我申请
如果将-D开关添加到fail2ban-regex,则会得到显示完全匹配的debuggex URL。但是,Fail2ban声称它仍然是一个失败:Link
无论我如何使用通配符,fail2ban-regex都不匹配,而如果我在https://regex101.com/上对其进行测试,则regex确实匹配。我可能忽略了一些小而愚蠢的东西。有谁能引导我走上启蒙之路:)
答案 0 :(得分:0)
很快,fail2ban 在日志中搜索日期(以及与该日期匹配的默认日期模式之一)。您可以尝试添加 -l HEAVYDEBUG
参数 fail2ban-regex
以查看那里发生了什么。
并且您的日期模式与 fail2ban 的默认值不匹配。
因此,只需在 jail(仅限fail2ban 版本 > 0.10)或过滤器中指定您自己的 datepattern
:
datepattern = ^\[%%Y-%%b-%%d %%H:%%M:%%S\]\s
failregex = ^\[freepbx_security.NOTICE\]: Authentication failure for \S+ from <ADDR>
如果您的 fail2ban 版本仍然是 0.9,请将 datepattern 放在过滤器的 Init 部分并将 <ADDR>
替换为 <HOST>
。
请注意,在应用 failregex 之前,匹配 datepattern 的字符串从行中被切掉(因此 failregex 不能包含它)。
这里是如何在 fail2ban-regex
中工作的:
fail2ban-regex --datepattern '^\[%Y-%b-%d %H:%M:%S\]\s' '[2020-Nov-10 16:13:35] [freepbx_security.NOTICE]: Authentication failure for S from 109.38.128.48 [] []' '\[freepbx_security.NOTICE\]: Authentication failure for \S+ from <ADDR>'