fail2ban 不禁止但匹配日誌

fail2ban 不禁止但匹配日誌

我嘗試使用fail2ban 創建強力保護。透過fail2ban 測試,它匹配了我想要匹配的日誌,但透過我的測試暴力強制網站登入失敗7 次以上,它不會禁止我的IP 位址。

篩選:

[Definition]
failregex = <HOST>:.*"POST /login.*" 200 .*$
ignoreregex =

監獄:

[shop-brute-force]
enabled  = true
filter   = shop-brute-force
logpath  = /etc/exampleorg/shop/log/access.log
maxretry = 7
findtime = 60
bantime  = 900
ignoreip =

日誌範例(使用 ...、88.88.88.88 和 example.org 匿名):

2022/04/01 08:09:25.413720 88.88.88.88:10729 - - [01/Apr/2022:08:09:25 +0000] "POST /login?target=%2Fshop%2F HTTP/1.1" 200 2192 "https://example.org/login?target=%2Fshop%2F" "..."

測試:

Running tests
=============

Use   failregex filter file : shop-brute-force, basedir: /etc/fail2ban
Use         log file : /home/user/test.log
Use         encoding : UTF-8


Results
=======

Failregex: 3 total
|-  #) [# of hits] regular expression
|   1) [3] <HOST>:.*"POST /login.*" 200 .*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [106] Year(?P<_sep>[-/.])Month(?P=_sep)Day 24hour:Minute:Second(?:,Microseconds)?
`-

Lines: 106 lines, 0 ignored, 3 matched, 103 missed
[processed in 0.02 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 103 lines

答案1

我嘗試使用fail2ban創建強力保護
failregex = ... 200 ...

這不一定是暴力嘗試,因為200 是常規回應,這意味著OK...通常,像401 或403 這樣的程式碼將表示未經授權的嘗試,或者如果服務以200 應答,它將在其中寫入附加日誌條目一些日誌檔案或日記(不一定進入access.log)。但這裡還有一件事非常值得懷疑,更不用說理論上可以使用另一種方​​法進行暴力破解了POST

但我的測試暴力破解了該網站 7 次以上登入失敗的情況...
Lines: 106 lines, 0 ignored, 3 matched, 103 missed

您沒有提供與這 7 次嘗試相對應的完整日誌摘錄。並且fail2ban-regex只找到 3 個與您相關的匹配項failregex(這一點都不好,例如未錨定並且具有包羅萬象的內容,但是沒關係 - 匹配項不在那裡)。可能它會在您的範例中將其他內容記錄為單一日誌行,因為您的 RE 基本上與此相符。因此,請使用與您所做的所有 7 次嘗試相對應的完整日誌摘錄來更新您的問題。

最後但並非最不重要的一點是,更好的 RE 可能看起來像這樣:

failregex = ^\s*<ADDR>:\d+ [^"]*"[A-Z]+ /login\b[^"]*" 200\b

然而我仍然不確定你是否真的會使用它(由於我上面提到的第 200 個問題等)。

如果這只是測試(有 3 個日誌行)並且您確實在真實日誌中看到了所有 7 個日誌行,您可以檢查此fail2ban 未禁止的可能原因常見問題解答。例如,它可能不正確backend(將其設定auto為與檔案相關的監控)或不合適的禁止操作或fail2ban方面的某些錯誤(另請檢查fail2ban.log)。

相關內容