fail2ban で延長banを除外したいときの設定

シュー

※写真と本文は関係ありません。


# Jail for more extended banning of persistent abusers
しつこいIPアドレスのban期間を延長する recidive jail
サービスに影響があるかもしれないので、sshdは延長banしたいけど、dovecotは通常banにしたいときの設定方法。
recidive の jail 設定

$ cat /etc/fail2ban/jail.d/jail.local
# recidiveの部分を抽出
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 604800 ; 1 week
findtime = 86400 ; 1 day
action = sendmail-whois-lines-subject-w-country[name=%(__name__)s, logpath=%(logpath)s]
%(banaction)s[name=%(__name__)s]

filterはjail.conf に書いてあるデフォルト設定なので
/etc/fail2ban/jail.conf:filter = %(__name__)s
-> filter = recidive
/etc/fail2ban/filter.d/recidive.conf が filter 設定ファイル

recidive.conf にある変数 _jailname を recidive.local で書き換える

# デフォルト
$ cat /etc/fail2ban/filter.d/recidive.conf
[Definition]
_jailname = recidive

延長ban を除外する jailname で正規表現を書く。

$ cat /etc/fail2ban/filter.d/recidive.local
[Definition]
_jailname = (recidive|dovecot|postfix-rbl)

recidive.conf の 変数 failregex の_jailname のところに代入される。

failregex = ^(%(__prefix_line)s| %(_daemon)s%(__pid_re)s?:\s+)NOTICE\s+\[(?!%(_jailname)s\])(?:.*)\]\s+Ban\s+\s*$

fail2ban-regexを使うとfailregexが出力されるので確認できる。
–print-all-missed マッチしてないログ、–print-all-matched でマッチしたログを確認できる。

# fail2ban-regex /var/log/fail2ban.log /etc/fail2ban/filter.d/recidive.conf 

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

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


Results
=======

Failregex: 185 total
|-  #) [# of hits] regular expression
|   1) [185] ^((?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?fail2ban\.actions\s*(?:\(\S+\))?[\]\)]?:?|[\[\(]?fail2ban\.actions\s*(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?| fail2ban\.actions\s*(?:\[\d+\])?:\s+)NOTICE\s+\[(?!(recidive|dovecot|postfix-rbl)\])(?:.*)\]\s+Ban\s+\s*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [2581] Year(?P<_sep>[-/.])Month(?P=_sep)Day 24hour:Minute:Second(?:,Microseconds)?
`-

Lines: 2581 lines, 0 ignored, 185 matched, 2396 missed
[processed in 0.48 sec]

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