Fail2Banカスタムフィルターが適用されていません

Fail2Banカスタムフィルターが適用されていません

私はfail2ban のカスタム jail ルールですが、決して適用されません。

そのような公式ドキュメントは見つかりませんでした。何かを見逃している可能性があります。

フィルタ

[Definition]
failregex = .* from ip <HOST>

設定ファイル

[express-js]
enabled  = true
filter   = expressjs
logpath  = /var/log/expressjs/slowin-killer.log
maxretry = 5
bantime  = 3600
findtime = 600

ログファイル

[20-5-2017 20:49:57] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 20:57:19] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 20:59:20] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 21:12:47] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 21:16:9] Failed to authentificate user "[email protected]" from ip 127.0.0.1

エラーメッセージは表示されませんが、jail はアクティブなようです...

$ fail2ban-client status expressjs
Status for the jail: expressjs
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 0
|  `- File list:    /var/log/expressjs/slowin-killer.log
`- Actions
   |- Currently banned: 0
   |- Total banned: 0
   `- Banned IP list:   

そして奇妙なことに、正規表現は大丈夫です...

fail2ban-regex /var/log/expressjs/slowin-killer.log /etc/fail2ban/filter.d/expressjs.conf

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

Use   failregex filter file : expressjs, basedir: /etc/fail2ban
Use         log file : /var/log/expressjs/slowin-killer.log
Use         encoding : UTF-8


Results
=======

Failregex: 27 total
|-  #) [# of hits] regular expression
|   1) [27] .* from ip <HOST>
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [34] Day(?P<_sep>[-/])Month(?P=_sep)(?:Year|Year2) 24hour:Minute:Second
|  [1] (?:DAY )?MON Day Year 24hour:Minute:Second(?:\.Microseconds)?
`-

Lines: 162 lines, 0 ignored, 27 matched, 135 missed
[processed in 0.01 sec]

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

答え1

フィルターを機能させるには、不足している点があり、修正する必要があります。

  1. 内部でexpressjs.conf設定するfindtime = 600と、maxretry = 510 分 (600 秒) 以内に 5 回の失敗 (正規表現の一致) が発生し、iptables の自動ブロック/拒否ルールが生成されます。manjail.confページ:
   findtime
          time interval (in seconds) before the current time where failures will count towards a ban.

   maxretry
          number of failures that have to occur in the last findtime seconds to ban then IP.

ログを見ると、ここに貼り付けたログの最初のログエントリと最後のログエントリ(5 回の試行)の間に 10 分以上経過しています。最初: 20:49、最後:21:16

  1. すべてのログは から来ています。ブロック内127.0.0.1を見ると、デフォルトの設定が見つかります。これを変更していない限り、localhost アドレスをブロックするのは非常に危険です。このアドレスを内部通信に使用している他のソフトウェアが機能しなくなるからです。jail.conf[DEFAULT]ignoreip = 127.0.0.1/8

  2. 設定がされていexpressjs.confないdatepattern =ため、fail2ban はログファイルのどの部分が日付であるかを推測できません。ファイルからいくつかの例を取得すると、またはの/etc/fail2ban/filter.dような日付正規表現が見つかります。ここでのその他の問題は、ログ日付の「2 番目の」部分に、sec < 10 (例: 最後のログ) の末尾にゼロが付いていないことです。これを修正する必要があります。datepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%Sdatepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S21:16:9

見てみましょうFail2ban 公式ウィキサンプルを取得してフィルターを改善します。修正すべき点がたくさんあります。

関連情報