Nginxを実行しているUbuntu 18.04 Digital Oceanドロップレットでfail2banをセットアップしています。
このチュートリアルに従ってセットアップし、このチュートリアルに従ってカスタム フィルターを作成し、禁止された URL の要求をキャッチしました。
これが私のフィルターです:
[Definition]
failregex = ^ \[error\] \d+#\d+: .* forbidden .*, client: <HOST>, .*$
ignoreregex =
サンプルのログ ファイル エントリは次のようになります。
2020/03/09 12:18:08 [error] 14843#14843: *8 access forbidden by rule, client: xx.xx.xx.xx, server: xx.xx.xx.xx, request: "GET /var/ HTTP/1.1", host: "xxx.xxx.xxx.xx"
私が実行しているテストは次のとおりです。
/etc/fail2ban/filter.d# fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-forbidden.conf
出力は次のとおりです。
Running tests
=============
Use failregex filter file : nginx-forbidden, basedir: /etc/fail2ban
Use log file : /var/log/nginx/error.log
Use encoding : UTF-8
Results
=======
Failregex: 131 total
|- #) [# of hits] regular expression
| 1) [131] ^ \[error\] \d+#\d+: .* forbidden .*, client: <HOST>, .*$
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [200] {^LN-BEG}ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T| ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
| [254] ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T| ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
`-
Lines: 1060 lines, 0 ignored, 131 matched, 929 missed
[processed in 0.47 sec]
Missed line(s): too many to print. Use --print-all-missed to print all 929 lines
私のログ ファイルを見ると、約 1060 行あり、そのうち 200 行に日付が含まれています。それらの 200 のうち、131 には「禁止」が含まれているので、おそらく機能していると思いますが、よくわかりません。
ここに私の質問があります:
1) 「日付テンプレート ヒット」とは何ですか? 期待される形式の日付で始まる行ですか? したがって、それらは一致する必要があるログエントリの「候補」ですか?
2) 「無視」と「見逃し」の違いは何ですか?
3) 131 の「一致した」エントリを表示して、キャッチしようとしているものと同じように見えることを確認する方法はありますか?
4) フィルター内の正規表現が言うところ、client: <HOST>
その一致は何ですか? ログエントリの「クライアント」IP アドレスですか、それとも行末の「ホスト」エントリですか?
用語の意味を理解すれば、答えはおそらく明らかですが、私の無知のために十分に単純な説明を見つけることができません。