![Fail2ban: failregex で使用される正規表現が機能しません (角括弧 ] の問題?!)](https://rvso.com/image/777952/Fail2ban%3A%20failregex%20%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%20(%E8%A7%92%E6%8B%AC%E5%BC%A7%20%5D%20%E3%81%AE%E5%95%8F%E9%A1%8C%3F!).png)
fail2ban を使用して、apache_access.log ファイルの内容に基づいて IP を禁止します。
これは正規表現ルールに一致させたい行の例です:
197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
これが私の fail2ban カスタム フィルター ファイルです。
[Definition]
failregex = ^<ADDR> - - \[\S+ \S+\] "GET \/ HTTP\/1.0" 400 \S "-" "-"$
ignoreregex =
正規表現は「https://regex101.com/」のようなウェブサイトで完璧に機能します。
しかし、fail2ban-regex ツールを次のように使用すると:
sudo fail2ban-regex /var/log/site1_access.log /etc/fail2ban/filter.d/les400enhttp1-0.conf
何にでも合います。
この最も単純な正規表現ルールを試してみました:^<ADDR> - - \[\S+ \S+
そしてうまくいきました!
Results
=======
Failregex: 10 total
|- #) [# of hits] regular expression
| 1) [10] ^<ADDR> - - \[\S+ \S+
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [10] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 10 lines, 0 ignored, 10 matched, 0 missed
[processed in 0.03 sec]
しかし、正規表現を試みると:^<ADDR> - - \[\S+ \S+\]
左四角いラケット]右に追加))コマンド「fail2ban-regex」が返されます:
Lines: 10 lines, 0 ignored, 0 matched, 10 missed
[processed in 0.03 sec]
|- Missed line(s):
| 36.170.59.167 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 126.131.138.146 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 110.11.157.122 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 220.135.236.27 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 106.165.107.215 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
`-
10 見逃しました! 左角括弧 (]) を追加すると、例の行はどれも正規表現と一致しません
どこに間違いがあるのか分かりません... 助けていただければ幸いです :)
答え1
必要なものを古典的な方法でキャッチする方が良いでしょう。例:
\[.*\]
日付パターン部分 (これが、あなたが気づいた問題の原因) は、どうやら fail2ban によって特別な方法で処理されるようです。
次のパターンを試してください:
\[\]
皮肉なことに、これも一致することがわかります。つまり、角括弧内の日付パターンが削除されるということです。したがって、これを考慮する必要はありません。
次のようなものを使うことができます:
^<ADDR> -.*\"(GET|POST|HEAD).*HTTP.*\"$
PS. failregex はフィルター ファイル内でコメント アウトされているので、変更を加えるときには必ずコメントを解除してください。