fail2banのカスタムjailルールを作成しようとしましたが、適用されません。
私はそのような公式文書を見つけられませんでした、私は何かを逃すかもしれません。
/etc/fail2ban/filter.d/expressjs.conf
[Definition]
failregex = .* from ip <Host>
/etc/fail2ban/jail.conf
[express-js]
enabled = true
filter = expressjs
logpath = /var/log/expressjs/slowin-killer.log
maxretry = 5
bantime = 3600
findtime = 600
/var/log/expressjs/slowin-killer.log
[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
エラーメッセージはありませんが、刑務所はアクティブなようです...
$ 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
欠落していて、フィルターを機能させるために修正する必要があるものがいくつかあります。
expressjs.conf
内でfindtime = 600
とmaxretry = 5
を設定しました。これは、自動ブロックを生成するために、10分(600秒)の間に5回の試行(正規表現の一致)が失敗する必要があることを意味します。/rejectiptablesルール。 jail.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
すべてのログは127.0.0.1
から取得されます。 jail.conf
ブロック内の[DEFAULT]
を見ると、ignoreip = 127.0.0.1/8
のデフォルト構成が見つかります。これを変更しない限り、ローカルホストアドレスをブロックすると、内部通信にこのアドレスを使用している他のソフトウェアが破損するため、かなり危険です。
expressjs.conf
にはdatepattern =
構成が設定されていないため、fail2banはログファイルのどの部分が日付であるかを推測できません。 /etc/fail2ban/filter.d
ファイルからいくつかの例を取得すると、datepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%S
やdatepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S
のような日付正規表現が見つかります。ここでの他の問題は、ログ日付の「2番目」の部分に秒<10の末尾のゼロがないことです(例:最後のログの21:16:9
)。これを修正する必要があります。
Fail2ban公式ウィキ を見て、例を取得し、フィルターを改善してください。修正すべきことがたくさんあります。