![fail2ban は禁止ではないがログと一致する](https://rvso.com/image/776300/fail2ban%20%E3%81%AF%E7%A6%81%E6%AD%A2%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%81%8C%E3%83%AD%E3%82%B0%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B.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 が基本的にそれに一致するため、例とは異なるものが 1 つのログ ラインとしてログに記録されます。したがって、7 回の試行すべてに対応するログ抜粋全体を質問に更新してください。
そして最後に、もっと良い RE は次のようになります。
failregex = ^\s*<ADDR>:\d+ [^"]*"[A-Z]+ /login\b[^"]*" 200\b
しかし、実際にそれを使用するかどうかはまだわかりません (上で述べた 200 番目の問題などにより)。
テストのみ(3つのログライン)で、実際のログに7つのログラインがすべて表示されている場合は、これを確認できます。fail2ban が禁止されない理由に関する FAQたとえば、これが間違っているbackend
(ファイル関連の監視用に設定auto
)、不適切な禁止アクションである、または fail2ban 側に何らかのエラーがある (fail2ban.log も確認) 可能性があります。