1

我尝试为 fail2ban 创建一个自己的过滤器来检测失败的 HTTP 身份验证尝试。它在使用 fail2ban-regex 进行测试时确实有效,但在运行环境中无效。

/etc/fail2ban/jail.local

...
[DEFAULT]
bantime  = 600
...
[nginx-user-auth]
enabled = true
filter  = nginx-user-auth
port    = http,https
logpath = /var/log/nginx/error.log
backend = polling
maxretry = 6
...

/etc/fail2ban/filter.d/nginx-user-auth.conf

[Definition]
failregex = user .*? password mismatch, client: <HOST>
        user .*? was not found in .*?, client: <HOST>
ignoreregex = 

测试时:

root@debian:~# fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-user-auth.conf
...
Success, the total number of match is 54
...

它还向我显示了正确的 IP 和日期/时间。

但是监狱没有检测到一次失败的登录尝试:

root@debian:~# fail2ban-client status nginx-user-auth
Status for the jail: nginx-user-auth
|- filter
|  |- File list:        /var/log/nginx/error.log
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
   |- Currently banned: 0
   |  `- IP list:
   `- Total banned:     0

其他监狱运行良好。而且我完全不知道我在哪里犯了错误。

提前致谢!

4

2 回答 2

0

在这里遇到您的示例,我从中获得灵感并在我的配置中使用它,并且它正在工作。
请注意第一个正则表达式中的“ ”,在用户 .*? 之后,并为另一个正则表达式添加第二个“failregex”后缀。

/etc/fail2ban/filter.d/nginx-auth.conf
failregex = user .*?: password mismatch, client: <HOST>
failregex = user .*? was not found in .*?, client: <HOST>

Status for the jail: nginx-auth
|- filter
| |- File list: /var/log/nginx/error.log
| |- Currently failed: 0
| `- Total failed: 6
`- action
|- Currently banned: 1
| `- IP list: x.x.x.x
`- Total banned: 1

于 2013-09-05T12:04:17.813 回答
0

这可能是由于您安装的 fail2ban 版本中的错误所致。我的 Ubuntu 版本(0.8.4)分发的 fail2ban 版本有完全相同的问题。从源代码安装 fail2ban 0.8.10 后,我的 nginx 过滤器开始工作。

fail2ban Github 页面上有几个问题提到了这个问题(它们现在已关闭并修复)。

于 2013-10-12T21:55:13.600 回答