1

失敗した HTTP 認証試行を検出するために、fail2ban 用の独自のフィルターを作成しようとしました。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 と日付/時刻も表示されます。

しかし、jail は 1 回のログイン試行の失敗を検出しません。

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

ここであなたの例に出くわしました。そこからインスピレーションを得て構成で使用しましたが、機能しています。
user .*? の後の最初の正規表現の「:」に注意し、他の正規表現に 2 番目の「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 に答える