Fail2ban正则表达式-与日志文件中的行不匹配

时间:2020-11-11 07:58:10

标签: python regex fail2ban

我正在尝试针对此字符串创建一个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确实匹配。我可能忽略了一些小而愚蠢的东西。有谁能引导我走上启蒙之路:)

1 个答案:

答案 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>'