Logging

Fail2ban 正則表達式工作但不禁止。改為 DNS 警告

  • December 15, 2021

我在使用fail2ban 時遇到了以下問題(已經解決了),並將其放在堆棧溢出上,所以我現在把它放在這裡。

所以,我已經閱讀了幾天的問題,似乎沒有在任何地方找到解決方案。我正在 Web 伺服器實驗室進行一些測試,我已經設置了兩個 VM(Ubuntu 20.04)伺服器和客戶端。在伺服器上,我配置了一個 PHP 登錄應用程序,只要有人登錄失敗,就可以給我這個日誌。

root@local:/var/log/apache2# tail -f error.log
[Fri Jun 18 10:13:37.657446 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php
[Fri Jun 18 10:13:41.434454 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php
[Fri Jun 18 10:13:46.236750 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php

並且 Fail2Ban v0.10.2 配置為擷取它。/etc/fail2ban/jail.local:

[login-ban]
enabled   = true
port      = http,https
filter    = login-ban
logpath  = /var/log/apache2/error.log
maxretry = 3
findtime  = 180
bantime = 60

/etc/fail2ban/filter.d/login-ban.conf:

[Definition]
failregex =  ^\[.*\]\s\[.*]\s\[.*].*\[client.*<HOST>\].*\[error\].*
ignoreregex =

現在,如果我使用 fail2ban-regex 檢查,正則表達式可以完美執行:

fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/login-ban.conf --print-all-matched

我明白了

|- Matched line(s):
|  [Fri Jun 18 10:36:07.312503 2021] [php7:notice] [pid 780] [client 192.168.1.11:44754] [error] failed login, referer: http://192.168.1.10/index.php
|  [Fri Jun 18 10:36:14.417955 2021] [php7:notice] [pid 784] [client 192.168.1.11:44756] [error] failed login, referer: http://192.168.1.10/index.php

但是fail2ban沒有禁止IP,fail2ban.log給我一個DNS警告:

2021-06-18 10:50:22,083 fail2ban.ipdns          [2154]: WARNING Determined IP using DNS Lookup: 8 = {'0.0.0.8'}
2021-06-18 10:50:22,085 fail2ban.filter         [2154]: INFO    [login-ban] Found 0.0.0.8 - 2021-06-18 10:50:22

我已經嘗試將 usedns 參數設置為“no”和“raw”,唯一完成的事情是擺脫 dns 警告日誌,仍然沒有禁止並且沒有記錄嘗試登錄的主機。

我希望這是足夠的資訊,並且這將幫助像我一樣的人。

解決方案

使用者@sebres 回答我:

只需停止使用包羅萬象(.* 等),例如,使其工作的一項更正可能是

- ... \[client.*<HOST>\] ...
+ ... \[client <HOST>:\d+\] ...

RE .* 是貪心的,所以它匹配盡可能多的字元,並且 <HOST> 可以匹配任何東西(主機名),而不僅僅是地址,如果你的 fail2ban 版本> = 0.10,最好使用 <ADDR> 代替。

由於幾個包羅萬象,你的整個表情都是“脆弱的”(所以錨並沒有真正被抓住)。

*** 所以我做了他建議的改變,結果是這樣的:

^\[.*\[client &lt;ADDR&gt;:\d+\].*\[error\].*

現在一切正常。希望能幫助到你!

引用自:https://serverfault.com/questions/1067107