CentOS8でFail2banが稼働済みとする。
BANしてもさらにしつこくアクセスしてくるIPを[recidive]を有効にして長めにBANする。
環境
jail.localファイルの編集
# vi /etc/fail2ban/jail.local
前回までの設定
[DEFAULT] # 1日(findtime)に3回失敗アクセスがあったら1日(bantime)BANする設定 bantime = 1d findtime = 1d maxretry = 3 # # ACTIONS # backend = systemd destemail = info@example.com sender = fail2ban@<fq-hostname> banaction = firewallcmd-ipset banaction_allports = firewallcmd-allports # # JAILS # [sshd] enabled = true port = 2222 action = %(action_mw)s [postfix-sasl] enabled = true action = %(action_mw)s
backendの変更
[DEFAULT] ... # backend = systemd backend = auto
“backend”は初期値で“auto”になっているので、この行自体がいらない。
ただし”jail.conf”で
# cat /etc/fail2ban/jail.conf [DEFAULT] --- backend = auto
”backend = auto”となっていること。
”backend”使用可能なオプション
- pyinotify:pyinotifyをインストールする必要がある。
- gamin:Gaminをインストールする必要がある。
- polling:外部ライブラリを必要としないポーリングアルゴリズムを使用する。
- systemd:systemdpythonライブラリを使用してsystemdジャーナルにアクセスする。「logpath」の指定は、このバックエンドでは無効。
- auto:次のバックエンドを順番に使用しようとする。 pyinotify、gamin、polling。
[recidive]を有効にする
以下を追記。2日間(2d)に2回不正アクセスで1週間(1w)BANする設定。
[recidive] enabled = true bantime = 1w findtime = 2d maxretry = 2 action = %(action_mw)s
fail2ban.localの編集
1.fail2ban.conf/ .locaで指定されたログレベルがDEBUGレベルでないことを確認します。
fail2ban-GitHub
2.fail2ban.confで定義されているdbpurgeageを次のように増やします。失敗したログインのエントリを十分な時間維持するための648000(7.5日)
loglevelの確認
[recidive]を用いる場合、loglevelが「DEBUG」以外になっていることを確認する。
# vi /etc/fail2ban/fail2ban.local
[Definition] loglevel = NOTICE
dbpurgeageの変更
データベースに保持する日数を示すdbpurgeageパラメータ。初期値は1日(1d)なので、7d12h(648000秒)を追記
[Definition] loglevel = NOTICE dbpurgeage = 7d12h
下は7.5日間に設定した、fail2ban.sqlite3のbansテーブルの抜粋部分。
19日から26日まで保持されているのがわかる。
設定変更後はfail2banの再起動を行う
# systemctl restart fail2ban
fail2ban.logファイル確認
下記の「/var/log/fail2ban.log」は、見やすいように日時など左側の項目は省いて表示したもの。さらにloglevelは「INFO」に戻してある。
INFO Creating new jail 'sshd' INFO Jail 'sshd' uses systemd {} INFO Initiated 'systemd' backend INFO maxLines: 1 INFO [sshd] Added journal match for: '_SYSTEMD_UNIT=sshd.service + _COMM=sshd' INFO maxRetry: 3 INFO findtime: 86400 INFO banTime: 86400 INFO encoding: UTF-8 INFO Creating new jail 'postfix-sasl' INFO Jail 'postfix-sasl' uses systemd {} INFO Initiated 'systemd' backend INFO [postfix-sasl] Added journal match for: '_SYSTEMD_UNIT=postfix.service' INFO maxRetry: 3 INFO findtime: 86400 INFO banTime: 86400 INFO encoding: UTF-8 INFO Creating new jail 'recidive' INFO Jail 'recidive' uses poller {} INFO Initiated 'polling' backend INFO maxRetry: 2 INFO findtime: 172800 INFO banTime: 604800 INFO encoding: UTF-8
[recidive]のbackendは”polling”となっている。なおpyinotifyやgaminは入れていない。