Fail2ban:failregex 中使用的正则表达式不起作用(方括号] 问题?!)

Fail2ban:failregex 中使用的正则表达式不起作用(方括号] 问题?!)

使用 fail2ban,我想根据 apache_access.log 文件的内容禁止 IP。

这是我想要与正则表达式规则匹配的行的示例:

197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"

所以,这是我的 fail2ban 自定义过滤器文件:

[Definition]

failregex = ^<ADDR> - - \[\S+ \S+\] "GET \/ HTTP\/1.0" 400 \S "-" "-"$
ignoreregex =

正则表达式在像‘https://regex101.com/’这样的网站上完美运行

但是当我使用fail2ban-regex工具时,如下所示:

sudo fail2ban-regex /var/log/site1_access.log /etc/fail2ban/filter.d/les400enhttp1-0.conf

我什么都配。

我尝试了这个最简单的正则表达式规则:^<ADDR> - - \[\S+ \S+ 并且它有效!

Results
=======

Failregex: 10 total
|-  #) [# of hits] regular expression
|   1) [10] ^<ADDR> - - \[\S+ \S+
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [10] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 10 lines, 0 ignored, 10 matched, 0 missed
[processed in 0.03 sec]

但是当我尝试使用正则表达式时:(^<ADDR> - - \[\S+ \S+\]左方括号]添加到右边)命令'fail2ban-regex'返回我:

Lines: 10 lines, 0 ignored, 0 matched, 10 missed
[processed in 0.03 sec]

|- Missed line(s):
|  36.170.59.167 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  126.131.138.146 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  110.11.157.122 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  220.135.236.27 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  106.165.107.215 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
|  61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
`-

10 错过了!当我添加左方括号 ( ] ) 时,我的示例行均与正则表达式不匹配

我不明白我的错误在哪里...感谢您的帮助:)

答案1

最好以经典的方式捕捉你想要的东西,例如:

\[.*\]

日期模式部分(产生了您注意到的问题)显然由 fail2ban 以特殊的方式处理。

如果您尝试以下模式:

\[\]

讽刺的是,你会发现它也匹配,这意味着方括号内的日期模式被删除了。所以不要考虑这一点。

你可以使用这样的方法:

^<ADDR> -.*\"(GET|POST|HEAD).*HTTP.*\"$

PS. 您的 failregex 确实在过滤器文件中被注释掉了,请确保在进行更改时取消注释。

相关内容