🔒

Fail2ban - ssh のセキュリティ対策をまとめてみた

2024/05/12に公開

先日投稿した「ssh のセキュリティ対策をまとめてみた」の続きです。Alma Linux 9.3 のホストの ssh のセキュリティ対策として Fail2ban[1] を導入します。今回もいくつかのサイトを巡って Fail2ban のインストールや設定方法をまとめてみました。

Fail2ban

Fail2ban は「ホストに対して一定期間に、何かに一定回数のちょっかいを掛けてきた相手を、一定期間 BAN する」機能を持ったソフトウェアです。「何かに」は Apache であったり Postfix でであったりします。今回は ssh になります。「ちょっかいを掛けてきた」かどうかはログを監視して判断します。

インストール

EPEL のインストール

いきなり Fail2ban をインストールしようとしてもできません。

[opadmin@node1 ~]$ sudo dnf -y install fail2ban
Last metadata expiration check: 0:12:22 ago on Sat May 11 09:37:04 2024.
No match for argument: fail2ban
Error: Unable to find a match: fail2ban
[opadmin@node1 ~]$

先に EPEL(Extra Packages for Enterprise Linux)[2] をインストールします。

sudo dnf config-manager --set-enabled crb
sudo dnf -y install epel-release
[opadmin@node1 ~]$ sudo dnf config-manager --set-enabled crb
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo dnf -y install epel-release
AlmaLinux 9 - CRB                                                                                                           1.7 MB/s | 2.4 MB     00:01
Last metadata expiration check: 0:00:01 ago on Sat May 11 09:56:30 2024.
Dependencies resolved.
============================================================================================================================================================
 Package                                  Architecture                       Version                               Repository                          Size
============================================================================================================================================================
Installing:
 epel-release                             noarch                             9-5.el9                               extras                              18 k

Transaction Summary
============================================================================================================================================================
Install  1 Package

※※※ 途中省略 ※※※

Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                    1/1
  Installing       : epel-release-9-5.el9.noarch                                                                                                        1/1
  Running scriptlet: epel-release-9-5.el9.noarch                                                                                                        1/1
Many EPEL packages require the CodeReady Builder (CRB) repository.
It is recommended that you run /usr/bin/crb enable to enable the CRB repository.

  Verifying        : epel-release-9-5.el9.noarch                                                                                                        1/1

Installed:
  epel-release-9-5.el9.noarch

Complete!
[opadmin@node1 ~]$

Fail2ban のインストール

EPEL のインストールが終了したら、次に Fail2ban をインストールします。

sudo dnf -y install fail2ban
[opadmin@node1 ~]$ sudo dnf -y install fail2ban
Extra Packages for Enterprise Linux 9 - x86_64                                                                              3.1 MB/s |  21 MB     00:06
Last metadata expiration check: 0:00:15 ago on Sat May 11 09:57:37 2024.
Dependencies resolved.
============================================================================================================================================================
 Package                                           Architecture                Version                                 Repository                      Size
============================================================================================================================================================
Installing:
 fail2ban                                          noarch                      1.0.2-12.el9                            epel                           8.8 k
Upgrading:
 audit                                             x86_64                      3.1.2-2.el9                             baseos                         253 k
 audit-libs                                        x86_64                      3.1.2-2.el9                             baseos                         117 k
 libselinux                                        x86_64                      3.6-1.el9                               baseos                          85 k
 libselinux-utils                                  x86_64                      3.6-1.el9                               baseos                         161 k
 libsemanage                                       x86_64                      3.6-1.el9                               baseos                         117 k
 libsepol                                          x86_64                      3.6-1.el9                               baseos                         329 k
 policycoreutils                                   x86_64                      3.6-2.1.el9                             baseos                         208 k
 python3-libselinux                                x86_64                      3.6-1.el9                               appstream                      186 k

※※※ 途中省略 ※※※

  Verifying        : selinux-policy-38.1.23-1.el9.noarch                                                                                              34/36
  Verifying        : selinux-policy-targeted-38.1.35-2.el9_4.noarch                                                                                   35/36
  Verifying        : selinux-policy-targeted-38.1.23-1.el9.noarch                                                                                     36/36

Upgraded:
  audit-3.1.2-2.el9.x86_64                                  audit-libs-3.1.2-2.el9.x86_64                  libselinux-3.6-1.el9.x86_64
  libselinux-utils-3.6-1.el9.x86_64                         libsemanage-3.6-1.el9.x86_64                   libsepol-3.6-1.el9.x86_64
  policycoreutils-3.6-2.1.el9.x86_64                        python3-libselinux-3.6-1.el9.x86_64            selinux-policy-38.1.35-2.el9_4.noarch
  selinux-policy-targeted-38.1.35-2.el9_4.noarch
Installed:
  checkpolicy-3.6-1.el9.x86_64                            esmtp-1.2-19.el9.x86_64                            fail2ban-1.0.2-12.el9.noarch
  fail2ban-firewalld-1.0.2-12.el9.noarch                  fail2ban-selinux-1.0.2-12.el9.noarch               fail2ban-sendmail-1.0.2-12.el9.noarch
  fail2ban-server-1.0.2-12.el9.noarch                     libesmtp-1.0.6-24.el9.x86_64                       liblockfile-1.14-10.el9.x86_64
  policycoreutils-python-utils-3.6-2.1.el9.noarch         python3-audit-3.1.2-2.el9.x86_64                   python3-distro-1.5.0-7.el9.noarch
  python3-libsemanage-3.6-1.el9.x86_64                    python3-policycoreutils-3.6-2.1.el9.noarch         python3-setools-4.4.4-1.el9.x86_64
  python3-setuptools-53.0.0-12.el9.noarch

Complete!
[opadmin@node1 ~]$

確認

バージョン

インストールした Fail2ban のバージョンを確認します。

fail2ban-server --version
fail2ban-client --version
fail2ban-regex --version
fail2ban-python --version
[opadmin@node1 ~]$ fail2ban-server --version
Fail2Ban v1.0.2
[opadmin@node1 ~]$
[opadmin@node1 ~]$ fail2ban-client --version
Fail2Ban v1.0.2
[opadmin@node1 ~]$
[opadmin@node1 ~]$ fail2ban-regex --version
fail2ban-regex 1.0.2
[opadmin@node1 ~]$
[opadmin@node1 ~]$ fail2ban-python --version
Python 3.9.18
[opadmin@node1 ~]$

設定ファイル

設定ファイルは /etc/fail2ban/ ディレクトリーにインストールされました。

ls -l /etc/fail2ban/
[opadmin@node1 ~]$ ls -l /etc/fail2ban/
total 56
drwxr-xr-x. 2 root root  4096 May 11 09:58 action.d
-rw-r--r--. 1 root root  3017 Feb 24 05:51 fail2ban.conf
drwxr-xr-x. 2 root root     6 Feb 24 05:51 fail2ban.d
drwxr-xr-x. 3 root root  4096 May 11 09:58 filter.d
-rw-r--r--. 1 root root 25607 Feb 24 05:51 jail.conf
drwxr-xr-x. 2 root root    31 May 11 09:58 jail.d
-rw-r--r--. 1 root root  2728 Feb 24 05:51 paths-common.conf
-rw-r--r--. 1 root root   930 Feb 24 05:51 paths-fedora.conf
[opadmin@node1 ~]$

fai2ban.conf と jail.conf の先頭部分のコメント

fail2ban.conf

fail2ban.conf の先頭部分のコメントです。

fail2ban.conf
# Fail2Ban main configuration file
#
# Comments: use '#' for comment lines and ';' (following a space) for inline comments
#
# Changes:  in most of the cases you should not modify this
#           file, but provide customizations in fail2ban.local file, e.g.:
#
# [DEFAULT]
# loglevel = DEBUG
#

要約すると次のようなことと記述例が書かれています。

  • このファイル( fail2ban.conf )は変更しないこと
  • 変更する場合は fail2ban.local ファイルを作成し、その中に変更内容を記述すること

jail.conf

jail.conf の先頭部分のコメントです。

jail.conf
#
# WARNING: heavily refactored in 0.9.0 release.  Please review and
#          customize settings for your setup.
#
# Changes:  in most of the cases you should not modify this
#           file, but provide customizations in jail.local file,
#           or separate .conf files under jail.d/ directory, e.g.:
#
# HOW TO ACTIVATE JAILS:
#
# YOU SHOULD NOT MODIFY THIS FILE.
#
# It will probably be overwritten or improved in a distribution update.
#
# Provide customizations in a jail.local file or a jail.d/customisation.local.
# For example to change the default bantime for all jails and to enable the
# ssh-iptables jail the following (uncommented) would appear in the .local file.
# See man 5 jail.conf for details.
#
# [DEFAULT]
# bantime = 1h
#
# [sshd]
# enabled = true
#
# See jail.conf(5) man page for more information

要約すると次のようなことと記述例が書かれています。

  • このファイル( jail.conf )は変更しないこと
  • 変更する場合は jail.local ファイルを作成するか、/etc/fail2ban/jail.d/ ディレクトリー内に変更用の .local ファイルを作成し、その中に変更内容を記述すること

/etc/fail2ban/jail.d/ ディレクトリー内は以下のとおりです。.conf ファイルが 1 つ登録されているだけで、.local ファイルは登録されていません。

[opadmin@node1 ~]$ ls -l /etc/fail2ban/jail.d/
total 4
-rw-r--r--. 1 root root 319 Feb 24 05:51 00-firewalld.conf
[opadmin@node1 ~]$
[opadmin@node1 ~]$ cat /etc/fail2ban/jail.d/00-firewalld.conf
# This file is part of the fail2ban-firewalld package to configure the use of
# the firewalld actions as the default actions.  You can remove this package
# (along with the empty fail2ban meta-package) if you do not use firewalld
[DEFAULT]
banaction = firewallcmd-rich-rules
banaction_allports = firewallcmd-rich-rules
[opadmin@node1 ~]$

内容確認

最初に書いた「ホストに対して一定期間に、何かに一定回数のちょっかいを掛けてきた相手を、一定期間 BAN する」のでフォルト設定は /etc/fail2ban/jail.conf ファイルに記述されています。説明のコメント込みで 1000 行ほどのあるので、一部を抜粋して見ていきます。なお、すべての設定は「無効」になっています。

DEFAULT セクション

全体に関わる設定を記述します。特に把握が必要(= 基本的な)なパラメーターを抜粋しました。

jail.conf からの抜粋
[DEFAULT]

※※※ 途中省略 ※※※

# "bantime" is the number of seconds that a host is banned.
bantime  = 10m

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 10m

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

※※※ 途中省略 ※※※

# "backend" specifies the backend used to get files modification.
# Available options are "pyinotify", "gamin", "polling", "systemd" and "auto".
# This option can be overridden in each jail as well.
#
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
#              If pyinotify is not installed, Fail2ban will use auto.
# gamin:     requires Gamin (a file alteration monitor) to be installed.
#              If Gamin is not installed, Fail2ban will use auto.
# polling:   uses a polling algorithm which does not require external libraries.
# systemd:   uses systemd python library to access the systemd journal.
#              Specifying "logpath" is not valid for this backend.
#              See "journalmatch" in the jails associated filter config
# auto:      will try to use the following backends, in order:
#              pyinotify, gamin, polling.
#
# Note: if systemd backend is chosen as the default but you enable a jail
#       for which logs are present only in its own log files, specify some other
#       backend for that jail (e.g. polling) and provide empty value for
#       journalmatch. See https://github.com/fail2ban/fail2ban/issues/959#issuecomment-74901200
backend = auto

※※※ 途中省略 ※※※

# "enabled" enables the jails.
#  By default all jails are disabled, and it should stay this way.
#  Enable only relevant to your setup jails in your .local or jail.d/*.conf
#
# true:  jail will be enabled and log files will get monitored for changes
# false: jail is not enabled
enabled = false

※※※ 以下省略 ※※※

「一定期間」は findtime 、「一定回数」は maxretry 、「一定期間 BAN 」の「一定期間」は bantime で設定します。上記(デフォルト)場合、「ホストに対して 10 分以内に、何かを 5 回失敗したら、10 分間 BAN する」設定です。ただし、enabledfalse なので、設定は無効になっています。これが、すべての「何か」に適用されます。

パラメーター 設定する値
bantime ホストから BAN (接続禁止)される時間
findtime 失敗回数をカウントする時間
maxretry findtime で指定した時間のホストから BAN されるまで失敗回数
backend ログファイルの変更を検出するバックエンド
auto
・"polling "の前に "pyinotify", "gamin", "systemd "を試す
polling
・外部ライブラリを必要としないポーリングアルゴリズムを使用する
pyinotify
・pyinotify Python ライブラリを持つ Linux システムでのみ有効
・pyinotify がインストールされていない場合は auto を使用する
gamin
・gamin ライブラリが必要
・gamin がインストールされていない場合は auto を使用する
systemd
・systemd Python ライブラリを使用して systemd ジャーナルにアクセスする
backend にこの値を指定した場合 logpath パラメーターを無視する
enabled 設定を有効 / 無効にする
true
設定を有効にし、ログファイルを監視する
false
設定を無効にする

bantime / findtime の単位

デフォルトは単位なしで「秒」で指定します。数値 + 単位でより長期間を指定できます。

単位 意味
指定しない 10 → 10 秒
m 10m → 10 分
h 時間 10h → 10 時間
d 10d → 10 日
mo 10mo → 10 ヶ月
y 10y → 10 年

単位は複数組み合わせて使用できます。例えば、 1y6mo や 1d12h30m のような指定が可能です。

個別の設定の始まりのマーキング

DEFAULT セクションの後に、以下のコメントが現れます。これは「ホストに対して一定期間に、何かに一定回数のちょっかいを掛けてきた相手を、一定期間 BAN する」の「何かに」の部分の定義の始まりです。このコメント以降に「何か」ごとの定義が記述されています。

#
# JAILS
#

sshd セクション

SSH Server に関する記述の中から ssh 部分の抜粋です。

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

recidive セクション

BAN されたのに再度ちょっかいを掛けてきて BAN されたときの対応を定義します。通常よりも長い期間 BAN されるよう設定されています。

# Jail for more extended banning of persistent abusers
# !!! WARNINGS !!!
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
#    is not at DEBUG level -- which might then cause fail2ban to fall into
#    an infinite loop constantly feeding itself with non-informative lines
# 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days)
#    to maintain entries for failed logins for sufficient amount of time
[recidive]

logpath  = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime  = 1w
findtime = 1d

設定

設定は /etc/fail2ban/jail.local ファイルを作成するか /etc/fail2ban/jail.d/ ディレクトリー内に .local ファイルを作成し、その中に記述します。

設定上の注意

  • /etc/fai2ban/jail.conf 等の .conf ファイルは Fail2ban が配布するファイルであり、将来変更される可能性があるので編集しない
  • .local ファイルを用意し、変更する内容を記述する
    • /etc/fail2ban/jail.local
    • /etc/fail2ban/jail.d/*.local
    • /etc/fail2ban/filter.d/*.local
    • /etc/fail2ban/action.d/*.local

適用順序

jail 関係のファイルを次の順序で適用します。ファイルは異なるが同一 jail (セクション)内で同一パラメーターが使用されている場合、後から出現したものを優先します。

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local

/etc/jail2ban/jail.d/ ディレクトリ内のファイルはアルファベット順に適用します。

セクション

[] で括って、セクションを定義します。以下はセクションの一例です。

[DEFAULT]
[sshd]

/etc/fail2ban/jail.conf 内を確認すると多数のセクションが定義されているのを確認できます。今回インストールした Fail2ban は全部で 92 のセクションが定義されています。このセクションのことを Fail2ban では jail と表現します。

定義

各 jail 内でパラメーターを使用して監視するログファイルを指定したり、BAN するまで失敗回数を指定したりします。DEFAULT の jail と個別の jail で同じパラメーターを設定した場合、個別の jail で設定したものを優先します(DEFAULT の設定内容を個別設定で上書きします)。

パラメーター名 = 設定する値

パラメーター

パラメーター 設定する値
enabled 個別のセクションの設定を有効 / 無効にする
true
設定を有効にし、ログファイルを監視する
false
設定を無効にする
bantime ホストから BAN (接続禁止)される時間
findtime 失敗回数をカウントする時間
maxretry findtime で指定した時間のホストから BAN されるまで失敗回数
backend ログファイルの変更を検出するバックエンド
auto
・"polling "の前に "pyinotify", "gamin", "systemd" を試す
polling
・外部ライブラリを必要としないポーリングアルゴリズムを使用する
pyinotify
・pyinotify Python ライブラリを持つ Linux システムでのみ有効
・pyinotify がインストールされていない場合は auto を使用する
gamin
・gamin ライブラリが必要
・gamin がインストールされていない場合は auto を使用する
systemd
・systemd Python ライブラリを使用して systemd ジャーナルにアクセスする
backend にこの値を指定した場合 logpath パラメーターを無視する
port 監視対象のポートをポート番号または ssh などのニーモニックで指定する
ignoreself 自 IP アドレスを BAN 対象から除外する
true ← default
除外する
false
除外しない
ignoreip BAN 対象から除外するホストの IP アドレス、CIDR 形式のネットワークアドレ
ス、ホスト名(名前解決ができる場合)
logpath 監視するログファイルの path
filter ・ログファイルをフィルタリングするときに使用するフィルタ
・フィルターは /etc/fail2ban/filter.d/ ディレクトリ内に定義済みの物を使用
 する
・ .local ファイルを作成してフィルターを編集する
banaction ・BAN するときのアクションを指定する
・アクションは /etc/fai2ban/action.d/ ディレクトリ内に定義済みのものを使
 用する
・ .local ファイルを作成してアクションを編集する

設定例

ssh でちょっかいを掛けてきた相手を BAN する定義の例です。 3 分間に 2 回 ssh に失敗したら 5 分間 BAN します。

sudo vi /etc/fail2ban/jail.d/sshd.local
/etc/fai2ban/jail.d/sshd.local
[sshd]
enabled = true
ignoreself = true
findtime = 3m
maxretry = 2
bantime = 5m

コマンド

初期状態の確認

インストール直後の Fail2ban の状態を確認します。

sudo systemctl status fail2ban.service
sudo systemctl is-enabled fail2ban.service

確認結果です。fail2ban.service は起動しておらず、自動起動は設定されていません。

[opadmin@node1 ~]$ sudo systemctl status fail2ban.service
○ fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; preset: disabled)
     Active: inactive (dead)
       Docs: man:fail2ban(1)
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo systemctl is-enabled fail2ban.service
disabled
[opadmin@node1 ~]$

サービスの起動

fail2ban.service を起動し、自動起動を有効にします。

sudo systemctl start fail2ban.service
sudo systemctl enable fail2ban.service
sudo systemctl status fail2ban.service
sudo systemctl is-enabled fail2ban.service
[opadmin@node1 ~]$ sudo systemctl start fail2ban.service
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo systemctl enable fail2ban.service
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-05-12 14:05:06 JST; 14s ago
       Docs: man:fail2ban(1)
   Main PID: 1093 (fail2ban-server)
      Tasks: 3 (limit: 50285)
     Memory: 12.8M
        CPU: 118ms
     CGroup: /system.slice/fail2ban.service
             └─1093 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start

May 12 14:05:06 node1.example.jp systemd[1]: Starting Fail2Ban Service...
May 12 14:05:06 node1.example.jp systemd[1]: Started Fail2Ban Service.
May 12 14:05:06 node1.example.jp fail2ban-server[1093]: Server ready
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo systemctl is-enabled fail2ban.service
enabled
[opadmin@node1 ~]$

サービスの再起動

新たに .local ファイルを作成した場合は fail2ban.service を再起動して設定を反映します。

sudo systemctl restart fail2ban.service
[opadmin@node1 ~]$ sudo systemctl restart fail2ban.service
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-05-12 18:19:23 JST; 10s ago
       Docs: man:fail2ban(1)
    Process: 980 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
   Main PID: 981 (fail2ban-server)
      Tasks: 5 (limit: 50285)
     Memory: 11.4M
        CPU: 153ms
     CGroup: /system.slice/fail2ban.service
             └─981 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start

May 12 18:19:23 node1.example.jp systemd[1]: Starting Fail2Ban Service...
May 12 18:19:23 node1.example.jp systemd[1]: Started Fail2Ban Service.
May 12 18:19:23 node1.example.jp fail2ban-server[981]: Server ready
[opadmin@node1 ~]$

jail ルール

.local ファイルを作成したり、更新したりして jail ルールを更新した後は jail ルールをリロードします。

ロード済みのすべての jail ルールのステータスの確認

sudo fail2ban-client status

sshd jail がロード済みのときの出力例です。

[opadmin@node1 ~]$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd
[opadmin@node1 ~]$

ロード済みの jail ルールを指定してステータスの確認

sudo fail2ban-client status <jail名>

sshd jail の出力例です。ssh 接続に失敗した回数やBAN 中の IP アドレス、トータルの BAN 回数などが確認できます。

[opadmin@node1 ~]$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     4
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     2
   `- Banned IP list:   192.168.0.133
[opadmin@node1 ~]$

sshd jail がロードされていない場合、以下のようにエラーになります。

[opadmin@node1 ~]$ sudo fail2ban-client status sshd
2024-05-12 15:11:13,217 fail2ban                [1277]: ERROR   NOK: ('sshd',)
Sorry but the jail 'sshd' does not exist
[opadmin@node1 ~]$

BAN

BAN 中の状態は firewall-cmd コマンドでも確認できます。

sudo firewall-cmd --list-all
[opadmin@node1 ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="192.168.0.133" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"
[opadmin@node1 ~]$

すべての jail ルールのリロード

sudo fail2ban-client reload --all
[opadmin@node1 ~]$ sudo fail2ban-client reload --all
OK
[opadmin@node1 ~]$

ロード済みの jail ルールを指定してリロード

sudo fail2ban-client reload <jail名>

sshd jail をリロードした場合です。

[opadmin@node1 ~]$ sudo fail2ban-client reload sshd
OK
[opadmin@node1 ~]$

sshd jail がロードされていない場合、以下のようにエラーになります。

[opadmin@node1 ~]$ sudo fail2ban-client reload sshd
2024-05-12 15:11:24,243 fail2ban                [1280]: ERROR   NOK: ('sshd',)
Sorry but the jail 'sshd' does not exist
[opadmin@node1 ~]$

すべての BAN の解除

sudo fail2ban-client unban --all
[opadmin@node1 ~]$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     4
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     2
   `- Banned IP list:   192.168.0.133
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo fail2ban-client unban --all
1
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     4
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     2
   `- Banned IP list:
[opadmin@node1 ~]$

特定の IP アドレスの BAN の解除

sudo fail2ban-client set <jail名> unbanip <IPアドレス>
[opadmin@node1 ~]$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     6
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     3
   `- Banned IP list:   192.168.0.133
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo fail2ban-client set sshd unbanip 192.168.0.133
1
[opadmin@node1 ~]$
[opadmin@node1 ~]$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     6
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     3
   `- Banned IP list:
[opadmin@node1 ~]$
脚注
  1. https://www.fail2ban.org/ ↩︎

  2. https://docs.fedoraproject.org/en-US/epel/ ↩︎

Discussion