Fail2ban(CentOS8)でしつこいアクセスをブロックするため[recidive]を有効にする。

vps
Adina VoicuによるPixabayからの画像

CentOS8でFail2banが稼働済みとする。
BANしてもさらにしつこくアクセスしてくるIPを[recidive]を有効にして長めにBANする。

環境

  • CentOS 8.2
  • Apache 2.4.37
  • PHP 7.4
  • Fail2ban 0.11.1

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”使用可能なオプション

  1. pyinotify:pyinotifyをインストールする必要がある。
  2. gamin:Gaminをインストールする必要がある。
  3. polling:外部ライブラリを必要としないポーリングアルゴリズムを使用する。
  4. systemd:systemdpythonライブラリを使用してsystemdジャーナルにアクセスする。「logpath」の指定は、このバックエンドでは無効。
  5. 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レベルでないことを確認します。
2.fail2ban.confで定義されているdbpurgeageを次のように増やします。失敗したログインのエントリを十分な時間維持するための648000(7.5日)

fail2ban-GitHub

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は入れていない。

タイトルとURLをコピーしました