![fail2ban 不禁止但匹配日誌](https://rvso.com/image/776300/fail2ban%20%E4%B8%8D%E7%A6%81%E6%AD%A2%E4%BD%86%E5%8C%B9%E9%85%8D%E6%97%A5%E8%AA%8C.png)
我嘗試使用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)。