Fail2Banで攻撃元IPアドレスを永久banする方法とインストールから基本的な設定までを説明:AlmaLinux 9

Fail2Banで攻撃元IPアドレスを永久banする方法 NEWS
この記事は約32分で読めます。
  1. はじめに
  2. Fail2Banのインストール
    1. EPELリポジトリの有効化(# dnf install epel-release)
    2. EPELリポジトリの設定確認(/etc/yum.repos.d/epel.repo)
    3. 必要なセクションの有効化(「enabled=1)
    4. リポジトリの有効化の確認
    5. リポジトリの更新(推奨)(# dnf update)
      1. 新しいパッケージの追加
      2. パッケージのバージョン管理
      3. 依存関係の解決
    6. Fail2Banのインストール(# dnf install fail2ban)
  3. Fail2Banの基本設定
    1. jail.localファイルが存在する場合
      1. 基本設定を追加する
      2. ファイルを保存してViを終了する
    2. jail.localファイルが存在しない場合
      1. jail.localファイルの作成
        1. 1.ファイルを作成する
        2. 2.基本設定を入力する
        3. 3.ファイルを保存してViを終了する
  4. Fail2Banの自動起動の有効化
  5. Fail2Banの再起動
  6. Fail2Banのステータス確認
  7. Fail2Banのログを確認
    1. Fail2Banのログファイル確認方法
      1. IPアドレスの検出
      2. IPアドレスのban
      3. IPアドレスのUnban
  8. iptables -L -v -nで設定を確認
  9. Fail2Banを使って手動でIPアドレスをbanする手順
    1. 1.対象のJailを特定する
    2. 2.Fail2Banのステータスを確認する
    3. 3.対象Jailの詳細を確認する
    4. 4.IPアドレスを手動でbanする
    5. 5.iptablesの確認
  10. 攻撃元IPアドレスを永久banする方法
    1. jail.localに設定を追加
    2. Fail2Banの再起動
    3. Fail2Banのステータス確認
    4. Fail2Banのログ確認
  11. Fail2Banで永久banしたIPアドレスを解除する方法
    1. おおまかな作業の流れ
      1. 1.banされているIPアドレスを確認。
      2. 2.特定のIPアドレスを解除
      3. 3.ステータスの確認
    2. banされているIPアドレスを確認する
    3. 特定のIPアドレスを解除する
    4. Fail2Banのステータスを確認する
    5. ipsetを使用している場合の確認方法
  12. jail.localファイルとjail.confファイルの違いについて
    1. jail.confファイル
    2. jail.localファイル
    3. ポイント
  13. Fai2Banで作成されたipsetリストを確認する方法
    1. Jail設定ファイルを確認する
    2. banactionの確認
    3. ipsetリストの確認
    4. Fai2Banで設定したリスト以外も把握したい場合
    5. 特定のipsetリストを確認する
    6. jail.localに設定したにも関わらず、ipset list -nameに表示されない場合
  14. まとめ
    1. オススメ

はじめに

Fail2Banは、不正アクセスを防止するための効果的なツールであり、特定の条件に一致するIPアドレスを自動的にブロックすることができます。

この記事では、Fail2BanをAlmaLinux 9にインストールし、しつこく不正アクセスを繰り返してくる攻撃元IPアドレスを永久banしたり、iptablesやfirewalldと連携してセキュリティを強化する手順を紹介します。

村人
村人

サーバにしつこく攻撃してくるIPアドレスがあって、ほんと困っています。

ソルジャー<br>クラス1st
ソルジャー
クラス1st

そんなときは、Fail2Banを使えば自動的にブロックしてくれるから非常に便利よ。セキュリティも確保できるし。

村人
村人

マジですか!?さっそく、使ってみたいです!

ソルジャー<br>クラス1st
ソルジャー
クラス1st

じゃあ、インストールから設定方法まで、詳しく説明するね。

あと、受講料は前払いね。

村人
村人

ん?受講料は無料?ありがとうございます!

Fail2Banのインストール

AlmaLinux 9に初めてFail2Banをインストールする際、リポジトリの問題に遭遇することがあります。

デフォルトのリポジトリにはFail2Banが含まれていないため、EPEL(Extra Packages for Enterprise Linux)リポジトリを有効にする必要があります。

以下は、EPELリポジトリを有効にしてFail2Banをインストールする手順になります。

もし、すでにリポジトリを追加済みであれば、ここはスキップしてください。

EPELリポジトリの有効化(# dnf install epel-release)

EPELリポジトリを有効にするには、以下のコマンドを実行します。

# dnf install epel-release

念のため、EPELリポジトリの設定を確認しましょう。

EPELリポジトリの設定確認(/etc/yum.repos.d/epel.repo)

まず、/etc/yum.repos.d/epel.repo ファイルを確認し、必要なセクションだけが有効になっているかを確認します。

# vi /etc/yum.repos.d/epel.repo

次の通り、[epel] セクションenabled=1 になっていればOKですね。

[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=1     ←※ここですね。
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever

[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
# It is much more secure to use the metalink, but if you wish to use a local mirror
# place its address here.
#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1

必要なセクションの有効化(「enabled=1)

上記に記載していますが、念のためEPELリポジトリの設定ファイルを確認し、[epel] セクションが有効 (enabled=1) であり、他のセクションが無効 (enabled=0) であることを確認します。

必要に応じて、設定を修正します。

リポジトリの有効化の確認

次のようにコマンドを実行し、enabledの値が1、0、0であれば大丈夫だと思います。

[root@xxxx]#  cat /etc/yum.repos.d/epel.repo | grep enabled
enabled=1
enabled=0
enabled=0
[root@xxxx]# 

リポジトリの更新(推奨)(# dnf update)

必須ではありませんが、リポジトリの更新は推奨されますので、更新しておきます。

# dnf update

リポジトリの更新を行うことで、最新のパッケージ情報を取得し、依存関係の問題を回避することができます。

特に、以下のような場合にはリポジトリの更新を行うことが有益です。

新しいパッケージの追加

新しいパッケージがリポジトリに追加された場合、それを反映させるためにリポジトリを更新する必要があります。

パッケージのバージョン管理

パッケージの新しいバージョンやセキュリティパッチがリリースされた場合、最新の状態に保つために更新します。

依存関係の解決

パッケージの依存関係が変わった場合、リポジトリを更新することでこれを解決できます。

Fail2Banのインストール(# dnf install fail2ban)

それでは、Fail2Banをインストールしていきます。

# dnf install fail2ban

fail2banをインストールしたら、次のように基本設定を行っていきます。

Fail2Banの基本設定

次に、Fail2Banの設定ファイルを編集して、基本的な設定を行います。

もし、jail.localファイルが存在しない場合は、少し下の記事で説明していますので、ご参考にしてください。

jail.localファイルが存在する場合

jail.localファイルが存在する場合は、次の手順になります。

基本設定を追加する

jail.localファイルを開きます。

# vi /etc/fail2ban/jail.local

以下の内容を追加します。

これは、Fail2Banの基本設定を行う部分です。

以下のbanaction =の箇所では、firewalldのipsetを指定した例になります。

[DEFAULT]
banaction = firewallcmd-ipset
bantime = 3600    # 1 hour
maxretry = 5      # 5回
findtime = 3600   # 1 hour

[sshd]
enabled = true
filter = sshd
port = ssh
logpath = /var/log/secure
maxretry = 5

ファイルを保存してViを終了する

「ESC」キーを押してコマンドモードに移行し、「:wq」でファイルを保存します。

これで、Fail2Banのカスタム設定を適用する準備が整いました。

jail.localファイルが存在しない場合

Fail2Banを初めてインストールした場合、/etc/fail2ban ディレクトリにはデフォルトで jail.localファイルが存在しないことがあります。

このファイルは、Fail2Banのカスタム設定を行うためのもので、デフォルトの jail.confファイルの設定を上書きすることができます。

jail.localファイルの作成

もし、jail.localファイルが存在しない場合は、新規に作成します。

以下の手順になります。

1.ファイルを作成する

viを使用して新しいファイルを作成します。

# vi /etc/fail2ban/jail.local

入力する内容は次の「基本設定を追加する」をご確認ください。

2.基本設定を入力する

以下の内容を jail.localファイルに追加します。

これは、Fail2Banの基本設定を行う部分です。

[DEFAULT]
banaction = firewallcmd-ipset
bantime = 3600    # 1 hour
maxretry = 5      # 5回
findtime = 3600   # 1 hour

[sshd]
enabled = true
filter = sshd
port = ssh
logpath = /var/log/secure
maxretry = 5
3.ファイルを保存してViを終了する

「ESC」キーを押してコマンドモードに移行し、「:wq」でファイルを保存します。

これで、jail.localファイルが作成され、Fail2Banのカスタム設定を適用する準備が整いました。

Fail2Banの自動起動の有効化

Fail2Banがシステム起動時に、自動的に起動するように設定します。

# systemctl enable fail2ban

念のため、自動起動設定になっていることを確認します。

[root@xxxx]# systemctl is-enabled fail2ban
enabled
[root@xxxx]#

うん、大丈夫そうですね。

Fail2Banの再起動

設定変更を反映させるために、Fail2Banサービスを再起動します。

fail2ban-client reload で設定が反映されない場合は、サービスをリスタートさせましょう。

# systemctl restart fail2ban

念のため、systemctlでfail2banのサービス稼働状況を確認します。

# systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-06-xx 02:29:36 JST; 20min ago
※以下、省略。

問題なく、サービスが開始されていますね。

次に、fail2banのステータスを確認したいと思います。

Fail2Banのステータス確認

次に、Fail2Banが正しく動作しているかを確認します。

# fail2ban-client status
Status
|- Number of jail:      6
`- Jail list:   apache-auth, custom-tcp, custom-udp, dovecot, postfix, sshd
#

Jail list:欄に、sshdが追加されていることが確認できました。

私の場合、ssh以外にも「apache-auth」や「custom-tcp」、「custom-udp」、「dovecot」、「postfix」なども設定しているため、上記のように表示されています。

また、もう少し詳しい状態を確認するには、次のようにコマンドを実行します。

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:
#

まだ設定したばかりですので数値は0になっていますが、時間の経過とともに増えていきます。

Fail2Banのログを確認

Fail2Banがどのように動作しているかを確認するためには、ログファイルを見るのが重要です。

Fail2Banのログファイルには、ブロックされたIPアドレスや発生したイベントに関する詳細な情報が記録されます。

Fail2Banのログファイル確認方法

以下のコマンドを実行して、Fail2Banのログをリアルタイムで確認することができます

# tail -f /var/log/fail2ban.log

このコマンドを実行すると、Fail2Banがリアルタイムでどのような動作をしているか、どのIPアドレスがブロックされたかなどを詳細に確認することができます。

例えば、次のような情報が表示されます。

IPアドレスの検出

IPアドレスを検出した場合は、次のようにログ出力されます。

2024-06-xx 18:15:35,408 fail2ban.filter         [1286908]: INFO    [custom-udp] Found 133.xxx.xxx.xxx - 2024-06-xx 18:15:35

「custom-udp」の箇所は、今回の「sshd」に読み替えてください。

IPアドレスのban

IPアドレスをBanした場合は、次のようにログ出力されます。

2024-06-xx 18:16:00,123 fail2ban.actions        [1286908]: NOTICE  [custom-udp] Ban 133.xxx.xxx.xxx

IPアドレスのUnban

bantimeが経過した場合などでunbanされた場合は、次のようにログ出力されます。

2024-06-xx 19:16:00,456 fail2ban.actions        [1286908]: NOTICE  [custom-udp] Unban 133.xxx.xxx.xxx

これにより、Fail2Banが正しく動作しているか、どのようなアクションが実行されているかをリアルタイムで把握することができます。

iptables -L -v -nで設定を確認

fail2banの設定が反映されても、まだ1件もヒットしていない場合は、次のように「# iptables -L -v -n」を実行しても「sshd」の行が表示されません。

# fail2banの設定は反映されているが、まだ1件もヒットしていないのでここには表示されていない状態。

# iptables -L -v -n
Chain INPUT (policy ACCEPT 4332 packets, 8232K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     6    --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 0:65535 match-set f2b-custom-udp src reject-with icmp-port-unreachable
    4   164 REJECT     6    --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 0:65535 match-set f2b-custom-tcp src reject-with icmp-port-unreachable

本当に設定が反映され、機能しているのか不安になります。

しかし、手動でbanipを追加したら、無事sshdの行も表示されました。

手動でBanIPを追加する手順は、以下になります。

Fail2Banを使って手動でIPアドレスをbanする手順

Fail2Banを使用して特定のIPアドレスを手動でBanすることができます。

これは、特定のIPアドレスが不正な活動を行っている場合に即座に対処するのに役立ちます。

1.対象のJailを特定する

まずは、どのJailでIPアドレスをBanするかを決めます。

例えば、SSHの不正アクセスを防ぐために「sshd」Jail を使用します。

2.Fail2Banのステータスを確認する

現在有効なJailのリストを確認します。

# fail2ban-client status
Status
|- Number of jail:      6
`- Jail list:   apache-auth, custom-tcp, custom-udp, dovecot, postfix, sshd

これにより、現在有効なJailのリストが表示されます。

ここから、どのJailに対してアクションを行うかを決めます。

今回は、sshdにします。

3.対象Jailの詳細を確認する

特定のJailの詳細ステータスを確認します。

例えば、sshd Jailの場合は以下になります。

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:   

このコマンドで、sshd Jailに関する詳細情報(現在BanされているIPアドレスなど)が表示されます。

4.IPアドレスを手動でbanする

以下のコマンドを使用して、特定のIPアドレスを手動でBanします。

例えば、IPアドレス 192.168.1.100 を sshd JailでBanする場合は、以下になります。

# 手動でbanipを追加

# fail2ban-client set sshd banip 192.168.1.100

このコマンドを実行すると、指定したIPアドレスが即座にBanされます。

実際に実行してみます。

# fail2ban-client set sshd banip 192.168.1.100
1
#

以下のように、fail2banに指定したIPアドレスが追加されていますね。

これで安心です。

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     2
   `- Banned IP list:   192.168.1.100

5.iptablesの確認

Banが適用されているかを確認するために、iptables のルールも確認します。

# iptables -L -v -n

実際にコマンドを実行します。

# 手動でbanipを追加したら、無事sshdの行が表示されました。

# iptables -L -v -n
Chain INPUT (policy ACCEPT 100K packets, 303M bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REJECT     6    --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 0:65535 match-set f2b-custom-udp src reject-with icmp-port-unreachable
   31  1280 REJECT     6    --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 0:65535 match-set f2b-custom-tcp src reject-with icmp-port-unreachable
    0     0 REJECT     6    --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22 match-set f2b-sshd src reject-with icmp-port-unreachable

問題なく、「f2b-sshd」が追加されていますね。

これで安心です。

攻撃元IPアドレスを永久banする方法

村人
村人

不正アクセスを繰り返してくる攻撃元IPアドレスを、永久に闇に葬り去りたいんですけど。

ソルジャー<br>クラス1st
ソルジャー
クラス1st

じゃあ、メテオ使っちゃう?

村人
村人

。。いや、もう少し平和な方法でお願いします。

ソルジャー<br>クラス1st
ソルジャー
クラス1st

じゃあ、今回はFail2Banを使って永久にbanする方法を説明するね。

村人
村人

ありがとうございます。

不正アクセスしてきた攻撃元IPアドレスを、Fail2Banを使用して永久にbanするためには、jail.localbantime =の値を-1に設定します。

以下に、その設定を記載します。

jail.localに設定を追加

jail.localファイルに以下の内容を追加します。

これにより、SSHの不正アクセスを検出し、永久にbanする設定が適用されます。

[DEFAULT]
banaction = firewallcmd-ipset
bantime = -1    # 永久ban
maxretry = 5
findtime = 3600 # 1hour

[sshd]
enabled = true
filter = sshd
port = ssh
logpath = %(sshd_log)s
maxretry = 5

上記の例では「[DEFAULT]」欄に「bantime = -1」を追加していますが、sshのみに適用したい場合は「[sshd]」欄に追加する方が良いでしょう。

Fail2Banの再起動

設定を反映させるために、Fail2Banサービスを再起動します。

fail2ban-client reload で設定が反映されない場合は、サービスをリスタートさせましょう。

# systemctl restart fail2ban

これで不正アクセスをしてくる攻撃元のIPアドレスを、永久にbanすることができます。

Fail2Banのステータス確認

設定が正しく適用されたかを確認するために、Fail2Banのステータスを確認します。

# fail2ban-client status

sshd Jailが有効になっていることを確認します。

# fail2ban-client status
Status
|- Number of jail:      6
`- Jail list:   apache-auth, custom-tcp, custom-udp, dovecot, postfix, sshd
#

「sshd」以外の設定が表示されていますが、これは私が個別で設定してあるものです。

Fail2Banのログ確認

Fail2Banが正常に動作しているかを確認するために、ログを確認します。

# tail -f /var/log/fail2ban.log

このコマンドで、自動的にbanされたIPアドレスやFail2Banの動作状況をリアルタイムで確認できます。

banされたログだけをtailで表示したい場合は、以下のようにgrepで「NOTICE」を引っかければOKです。

# 以下のログは、別途jail.localに設定している「custom-tcp」を例にしたものです。

$ sudo tail -f /var/log/fail2ban.log | grep 'NOTICE'
[sudo] password for xxxx:
2024-07-05 06:40:38,936 fail2ban.actions        [1321057]: NOTICE  [custom-tcp] Ban 101.201.48.92
2024-07-05 06:44:23,233 fail2ban.actions        [1321057]: NOTICE  [custom-tcp] Ban 167.94.146.57

「# tail -f /var/log/fail2ban.log」でログを見ていると、「お~、不正アクセスがきてますねぇ」と確認はできるのですが、banしたタイミングとipアドレスのみを知りたい場合は「# tail -f /var/log/fail2ban.log | grep ‘NOTICE’」の方が良いと思います。

Teratermでログを流しっぱなし(「tail -f /var/log/fail2ban.log | grep ‘NOTICE’」)にしておいて、banしたタイミングでログが表示されるので、「おっ!今、このIPをbanしたな。」ってわかります。

やっぱり、世界中から不正アクセスが来ますね。。

困ったものです。

Fail2Banで永久banしたIPアドレスを解除する方法

村人
村人

永久banしたIPアドレスを解除するには、どうしたらいいですか?

ソルジャー<br>クラス1st
ソルジャー
クラス1st

なにぬるいこと言ってるの?

7番街プレート落とすわよ。

村人
村人

。。いや、間違って自分のPCがbanされてしまいまして。。

ソルジャー<br>クラス1st
ソルジャー
クラス1st

仕方ないわね。

解除用コマンドを教えるから、一緒に見ていきましょう。

Fail2Banで一度永久banしたIPアドレスを解除するには、以下の手順を行います。

これは誤ってbanしてしまった場合や、特定のIPアドレスを許可リストに追加したい場合に役立ちます。

おおまかな作業の流れ

全体的な作業の流れは、以下になります。

1.banされているIPアドレスを確認。

現状、banされているIPアドレスを確認します。

# 例
# fail2ban-client status sshd

2.特定のIPアドレスを解除

解除したいIPアドレスを指定し、永久banから解除します。

# 構文
# fail2ban-client set sshd unbanip <IPアドレス>

3.ステータスの確認

指定したIPアドレスが解除されたことを確認します。

# fail2ban-client status sshd

おおまかな作業は、以上です。

続いて、詳しい作業手順を見ていきたいと思います。

banされているIPアドレスを確認する

まずは、現状banされているIPアドレスのリストを確認します。

Fail2Banのステータスを表示して、対象のJail(例えばsshd)でbanされているIPアドレスを確認します。

# fail2ban-client status sshd

私の環境では、こんな感じですね。

[root@xxx]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     20
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 3
   |- Total banned:     3
   `- Banned IP list:   xxx.xxx.xxx.85 xxx.xxx.xxx.58 xxx.xxx.xxx.68
[root@xxx]#

上記の表示から、現在banされているIPアドレスが確認できます。

現在、3個のIPアドレスが登録されていますね。

特定のIPアドレスを解除する

特定のIPアドレスを解除するには、以下のコマンドを使用します。

# 構文
fail2ban-client set sshd unbanip <IPアドレス>

今回は例として、xxx.xxx.xxx.68というIPアドレスを解除したいと思います。

[root@xxx]# fail2ban-client set sshd unbanip xxx.xxx.xxx.68
1
[root@xxx]#

Fail2Banで永久banされたIPアドレス1件が、解除されました。

IPアドレスが解除される(unban)と、ログには次のように表示されます。

[root@xxx]# tail -f /var/log/fail2ban.log | grep 'NOTICE'
2024-07-xx 06:17:26,150 fail2ban.actions        [1471705]: NOTICE  [sshd] Unban xxx.xxx.xxx.68

Fail2Banのステータスを確認する

永久banされたIPアドレスが正しく解除されたかどうかを確認しましょう。

再度Fail2Banのステータスを確認します。

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     20
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 2
   |- Total banned:     3
   `- Banned IP list:   xxx.xxx.xxx.85 xxx.xxx.xxx.58
[root@purpledice ~]#

先程は3件登録されていましたが、2件になりましたね。

これで、Fail2Banから解除できました。

また、Fail2Banはバックエンドでiptablesやipsetを使用しているので、Firewall側にも自動反映されます。

念のための確認として、ipset(Firewall)の登録状況も見ておきましょう。

ipsetを使用している場合の確認方法

Fail2Banがipsetを使用している場合、banされたIPアドレスの確認方法は以下の流れになります。

まず、Fail2Banが使用しているipsetのリストを確認します。

[root@xxx]# ipset list -name
BLOCK_IP_LIST
f2b-sshd
f2b-custom-udp
f2b-custom-tcp
f2b-custom-tcp6
[root@xxx]#

上記は私の環境なんですが、今回であれば「f2b-sshd」が対象になります。

次のように「f2b-sshd」の内容を確認してみましょう。

[root@xxx]# ipset list f2b-sshd
Name: f2b-sshd
Type: hash:ip
Revision: 5
Header: family inet hashsize 1024 maxelem 65536 timeout 0 bucketsize 12 initval 0x39b36bf0
Size in memory: 344
References: 1
Number of entries: 2
Members:
xxx.xxx.xxx.85 timeout 0
xxx.xxx.xxx.58 timeout 0
[root@xxx]#

うん。先程と同じように2件に減っていますね。

これで、永久banされたIPアドレスが、ipsetからも解除されたことが確認できました。

あとは、実際にアクセスしてみて、問題なく通信できれば完了です。

jail.localファイルとjail.confファイルの違いについて

Fail2Banの設定ファイルには、主に「jail.conf」「jail.local」の2つのファイルがあります。

これらのファイルの違いは、以下になります。

jail.confファイル

  • 役割: jail.conf ファイルはFail2Banのデフォルト設定を保持しています。
  • 場所: 通常、/etc/fail2ban/jail.conf にあります。
  • 変更: このファイルは直接変更しないことが推奨されます。アップデート時に上書きされる可能性があるためです。

jail.localファイル

  • 役割: jail.local ファイルはカスタム設定を行うためのファイルです。jail.conf の設定を上書きすることができます。
  • 場所: /etc/fail2ban/jail.local に手動で作成します。
  • 変更: こちらのファイルにカスタム設定を追加することで、Fail2Banの設定を永続的に変更することができます。

ですので、少しまとめると以下のようになります。

ポイント

  • jail.conf: デフォルト設定用。直接変更しない。
  • jail.local: カスタム設定用。手動で作成し、カスタム設定を追加する。
  • Fail2Banの再起動: 変更を反映させるために必須。
  • ログ確認: tail -f /var/log/fail2ban.logでリアルタイム監視。

Fai2Banで作成されたipsetリストを確認する方法

Fail2Banが利用しているipsetのリスト名だけを取得するには、Fail2Banの設定ファイルから情報を抽出する必要があります。

以下は、その手順です。

Jail設定ファイルを確認する

jail.localファイルを確認して、Fail2Banがどのアクションを使用しているかを確認します。

例えば、firewallcmd-ipsetを使用している場合。

# cat /etc/fail2ban/jail.local | grep banaction
banaction = firewallcmd-ipset
#

ふむふむ。「firewallcmd-ipset」が使用されていますね。

banactionの確認

Fail2Banのアクション定義ファイルを確認して、ipsetリスト名を取得します。

例えば、firewallcmd-ipsetアクションを使用している場合は、次のコマンドを実行してアクションファイルを確認します。

# cat /etc/fail2ban/action.d/firewallcmd-ipset.conf | grep name
ipmset = f2b-<name>
ipmset = f2b-<name>6
#

f2b-から始まっていますね。

ipsetリストの確認

Fail2Banの設定ファイルからipsetリスト名を確認できたら、次のコマンドでipsetリスト名を確認できます。

# ipset list -name | grep f2b-
f2b-sshd
f2b-custom-udp
f2b-custom-tcp
f2b-custom-tcp6
[root@xxx fail2ban]#

これにより、Fail2Banによって作成されたすべてのipsetリスト名が表示されます。

Fai2Banで設定したリスト以外も把握したい場合

Fail2Banで設定したリストだけでなく、個別にipsetコマンドで登録したリストも把握したいときもあるかと思います。

個別に登録したリストも含めて表示させたい場合は、次になります。

※ipsetに登録されているリストを確認する方法(fail2ban以外も含む)

# ipset list -name
BLOCK_IP_LIST
f2b-sshd
f2b-custom-udp
f2b-custom-tcp
f2b-custom-tcp6
#

Fail2Banで登録されたものだけではなく、個別にipsetコマンドで登録したリスト(例、「BLOCK_IP_LIST」)も表示されます。

この中に表示されたリストの詳細を確認したい場合は、次のように実行します。

特定のipsetリストを確認する

特定のipsetリストを確認するには、以下のようにします。

※「f2b-sshd」を例にした場合。

# ipset list f2b-sshd
Name: f2b-sshd
Type: hash:ip
Revision: 5
Header: family inet hashsize 1024 maxelem 65536 timeout 0 bucketsize 12 initval 0x39b36bf0
Size in memory: 344
References: 1
Number of entries: 2
Members:
xxx.xx.xx.85 timeout 0
xx.xxx.xx.58 timeout 0
#

Members:欄のところに、banされたIPアドレスが表示されていますね。

これで、現状どのIPが不正アクセスしてきてbanされたのかがわかります。

ほとんどが海外からの不正アクセスなんですけどね。

jail.localに設定したにも関わらず、ipset list -nameに表示されない場合

因みに、jail.localに設定を記載したにも関わらず、ipset list -nameに表示されない場合は、恐らくまだ1回もbanしていないので、表示されていないだけかと思います。

不正アクセスしてきたIPアドレスをbanする際、ipsetコマンドが実行されるので、まだ実行されていないから非表示なんじゃないかと。

しばらく待ってみると、(設定内容や不正アクセス数にも因るかと思いますが、)表示されると思います。

まとめ

初めてFail2Banをインストールする場合、jail.local がないときがあるのでその際は、手動で作成する必要があります。

jail.localを作成し基本設定を追加した後は、Fail2Banサービスを再起動します。

そうすることで設定が反映され、Fail2Banは指定した設定に基づいて動作し、システムのセキュリティを強化します。

また、tail -f /var/log/fail2ban.log コマンドを使用して、Fail2Banのログをリアルタイムで監視し、ブロックされたIPアドレスやその他のイベントを確認することができます。

しつこく攻撃してくるIPアドレスを自動的に永久banしてくれるので、fail2banは非常に便利です。

ご参考になれば幸いです。

コメント