【问题标题】:Regex in fail2ban not matchingfail2ban 中的正则表达式不匹配
【发布时间】:2021-05-18 07:01:29
【问题描述】:

应该是一件简单的事情,但使用正则表达式没有什么是简单的。

我的 wordpress 网站的 fail2ban 过滤器:

[Definition]
#failregex = <HOST>.*POST.*(wp-login\.php|xmlrpc\.php).* 200
#failregex = <HOST>.*POST.*(wp-login\.php|xmlrpc\.php).* 200[ 0-9]*
failregex = ^"<HOST> .* "POST .*wp-login.php

#failregex = <HOST>.*POST.*wp-login.php .*
#failregex = ^"<HOST> .* "POST .*(wp-login.php|xmlrpc.php) HTTP/.*" (200|401)
ignoreregex =

如您所见,我已经测试了多个东西,但我没有得到匹配。奇怪的是,我确实在 regex101 上得到了匹配。

这是我的日志文件(应该可以找到这些文件):

"hostname 172.70.34.43 - - [18/May/2021:05:58:22 +0000] "POST //wp-login.php HTTP/1.1" 200 3069"
"hostname 172.70.34.43 - - [18/May/2021:05:58:22 +0000] "POST //wp-login.php HTTP/1.1" 200 3069"
"hostname 172.70.34.43 - - [18/May/2021:05:58:21 +0000] "POST //wp-login.php HTTP/1.1" 200 3069"

日志文件还可以包含如下条目:

"hostname 172.69.63.84 - - [19/May/2021:09:23:01 +0000] "GET /feed/ HTTP/1.1" 200 14872"
"hostname 172.69.63.84 - - [19/May/2021:09:23:00 +0000] "GET /feed HTTP/1.1" 301 0"
"hostname 162.158.91.10 - - [19/May/2021:09:23:01 +0000] "POST /wp-cron.php?doing_wp_cron=1621416181.1017169952392578125000 HTTP/1.1" 200 0"
"hostname 172.68.57.138 - - [19/May/2021:09:22:34 +0000] "GET /versand/ HTTP/1.1" 200 27456"
"hostname 172.68.110.69 - - [19/May/2021:09:22:34 +0000] "POST /wp-cron.php?doing_wp_cron=1621416154.5001699924468994140625 HTTP/1.1" 200 0"
"hostname 172.69.34.217 - - [19/May/2021:09:19:48 +0000] "GET / HTTP/1.1" 200 32986"

我已经用 fail2ban-regex 进行了测试,但没有成功。我也尝试用实际的主机名替换 ,但在这种情况下,fail2ban 将不接受正则表达式。

Running tests                                                                                           
=============                                                                                           
                                                                                                        
Use   failregex filter file : wordpress, basedir: /etc/fail2ban                                         
Use         log file : /home/runcloud/logs/tmp.log                                                      
Use         encoding : UTF-8                                                                            
                                                                                                        
                                                                                                        
Results                                                                                                 
=======                                                                                                 
                                                                                                        
Failregex: 0 total                                                                                      
                                                                                                        
Ignoreregex: 0 total                                                                                    
                                                                                                        
Date template hits:                                                                                     
|- [# of hits] date format                                                                              
|  [3] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)? 
`-                                                                                                      
                                                                                                        
Lines: 3 lines, 0 ignored, 0 matched, 3 missed

                                                      

【问题讨论】:

  • 请添加您希望与您的正则表达式匹配的示例?简单明确的名称,例如:必须找到。
  • 从我的日志文件中:应该找到这三行
  • 以及一个不应该匹配的示例(以便我们看到差异)
  • 我添加了更多数据
  • 所以只需检查数字 3069?在吗?

标签: regex fail2ban


【解决方案1】:

此正则表达式匹配(在此示例中为前 3 行) “wp-login.phpxmlrp.php 上的 POST 请求”作为 rapsli 想要

"POST\b.+\b(wp-login|xmlrp)\.php

"hostname 172.70.34.43 - - [18/May/2021:05:58:22 +0000] "POST //wp-login.php HTTP/1.1" 200 3069"
"hostname 172.70.34.43 - - [18/May/2021:05:58:22 +0000] "POST //wp-login.php HTTP/1.1" 200 3069"
"hostname 172.70.34.43 - - [18/May/2021:05:58:21 +0000] "POST //wp-login.php HTTP/1.1" 200 3069"
"hostname 172.69.63.84 - - [19/May/2021:09:23:01 +0000] "GET /feed/ HTTP/1.1" 200 14872"
"hostname 172.69.63.84 - - [19/May/2021:09:23:00 +0000] "GET /feed HTTP/1.1" 301 0"
"hostname 162.158.91.10 - - [19/May/2021:09:23:01 +0000] "POST /wp-cron.php?doing_wp_cron=1621416181.1017169952392578125000 HTTP/1.1" 200 0"
"hostname 172.68.57.138 - - [19/May/2021:09:22:34 +0000] "GET /versand/ HTTP/1.1" 200 27456"
"hostname 172.68.110.69 - - [19/May/2021:09:22:34 +0000] "POST /wp-cron.php?doing_wp_cron=1621416154.5001699924468994140625 HTTP/1.1" 200 0"
"hostname 172.69.34.217 - - [19/May/2021:09:19:48 +0000] "GET / HTTP/1.1" 200 32986"

https://regexr.com/5t8e3

【讨论】:

  • 似乎不适用于fail2ban。虽然正则表达式可能没问题,但fail2ban 不会选择它 user@vultr:/etc/fail2ban/filter.d# fail2ban-regex /home/runcloud/logs/tmp.log wordpress 运行测试 ======== ===== 使用failregex过滤器文件:wordpress,basedir:/etc/fail2ban 错误:'"POST\b.+\b(wp-login|xmlrp)\.php'中没有失败ID组
【解决方案2】:

需要代表有IP的地方。所以这个正则表达式应该适用于fail2ban

failregex = "[a-z]* <HOST>.*(wp-login\.php|xmlrpc.php).*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多