RockyLinuxおよびAlmaLinuxにFail2banをインストールする方法


Pythonで記述されたFail2banは、ブルートフォース攻撃からサーバーを保護する無料のオープンソースの侵入防止システム(IPS)です。

指定された回数の誤ったパスワードの試行の後、クライアントのIPアドレスは、指定された期間、またはシステム管理者がブロックを解除するまで、システムへのアクセスを禁止されます。このようにして、システムは単一のホストからの繰り返しのブルートフォース攻撃から保護されます。

[あなたも好きかもしれません:OpenSSHサーバーを保護して強化する方法]

Fail2banは高度に構成可能であり、SSH、vsftpd、Apache、Webminなどの無数のサービスを保護するように設定できます。

このガイドでは、RockyLinuxおよびAlmaLinuxにFail2banをインストールして構成する方法に焦点を当てています。

ステップ1:Firewalldが実行されていることを確認する

デフォルトでは、RockyにはFirewalldが実行されています。ただし、これがシステムに当てはまらない場合は、以下を実行してFirewalldを起動します。

$ sudo systemctl start firewalld

次に、起動時に開始できるようにします。

$ sudo systemctl enable firewalld

次に、Firewalldのステータスを確認します

$ sudo systemctl status firewalld

さらに、次のコマンドを使用して、現在適用されているすべてのFirewalldルールを確認できます。

$ sudo firewall-cmd --list-all

ステップ2:RockyLinuxにEPELをインストールする

fail2banおよびその他の必要なパッケージをインストールするための要件として、RHELベースのディストリビューションに追加の高品質パッケージを提供するEPELリポジトリをインストールする必要があります。

$ sudo dnf install epel-release

ステップ3:RockyLinuxにFail2banをインストールする

EPELをインストールしたら、次に進み、fail2banおよびfail2ban-firewalldパッケージをインストールします。

$ sudo dnf install fail2ban fail2ban-firewalld

これにより、fail2banサーバーとfirewalldコンポーネントが他の依存関係とともにインストールされます。

fail2banのインストールが完了したら、fail2banサービスを開始します。

$ sudo systemctl start fail2ban

そして、起動時に開始できるようにします。

$ sudo systemctl enable fail2ban

次のコマンドを実行して、fail2banサービスのステータスを確認できます。

$ sudo systemctl status fail2ban

出力は、Fail2banが期待どおりに実行されていることの確認です。

ステップ4:RockyLinuxでFail2banを構成する

次に、意図したとおりに機能するようにfail2banを構成する必要があります。理想的には、メインの構成ファイル–/etc/fail2ban/jail.confを編集します。ただし、これはお勧めしません。回避策として、jail.conf構成ファイルの内容をjail.localファイルにコピーします。

$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

次に、お好みのエディターを使用してjail.localファイルを開きます。

$ sudo vim /etc/fail2ban/jail.local

[デフォルト]セクションで、次の設定が表示されていることを確認します。

bantime = 1h
findtime = 1h
maxretry = 5

属性を定義しましょう:

  • bantimeディレクティブは、認証の試行に失敗した後にクライアントが禁止される期間を指定します。
  • findtimeディレクティブは、誤ったパスワードの繰り返しの試行を検討するときにfail2banが考慮する期間または期間です。
  • maxretryパラメータは、リモートクライアントがサーバーへのアクセスをブロックされるまでの不正なパスワードの試行の最大回数です。ここでは、5回の認証失敗後にクライアントがロックアウトされます。

デフォルトでは、fail2banはiptablesで機能します。ただし、これはfirewalldを優先して非推奨になりました。 iptablesではなくfirewalldと一緒に動作するようにfail2banを設定する必要があります。

したがって、次のコマンドで実行します。

$ sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local

変更を適用するには、fail2banを再起動します。

$ sudo systemctl restart fail2ban

ステップ5:Fail2banでSSHサービスを保護する

デフォルトでは、fail2banは、保護したいサービスのjail構成を有効にするまで、リモートホストをブロックしません。 jail構成は/etc/fail2ban/jail.dパスで指定され、jail.localファイルで指定された構成をオーバーライドします。

この例では、SSHサービスを保護するためのjail構成ファイルを作成します。したがって、SSHjailファイルを作成します。

$ sudo vim /etc/fail2ban/jail.d/sshd.local

次に、次の行を貼り付けます。

[sshd]
enabled = true

# Override the default global configuration
# for specific jail sshd
bantime = 1d
maxretry = 3

上記の構成では、SSHログインの試行が3回失敗した後、リモートホストは1日間システムにアクセスできなくなります。変更を保存して、fail2banサービスを再起動します。

$ sudo systemctl restart fail2ban

次に、fail2ban-clientコマンドラインユーティリティを使用して、jailの設定ステータスを確認します。

$ sudo fail2ban-client status

出力から、「sshd」と呼ばれるサービス用に1つのjailが構成されていることがわかります。

さらに、getオプションを使用してsshdjailのmaxretry値を確認できます。

$ sudo fail2ban-client get sshd maxretry

3

印刷された値3は、sshd.localファイルで指定した値と一致する必要があります。

ステップ6:Fail2ban構成のテスト

fail2banを設定し、SSHサービスのjail構成ファイルを作成した後、テスト実行を実行し、パスワードプロンプトごとに誤ったパスワードを指定して3回の失敗したログインをシミュレートします。

したがって、リモートLinuxシステムにアクセスし、間違ったパスワードを使用してログインしてみてください。 3回失敗すると、接続が切断され、禁止期間が経過するまで、その後の再接続の試行はブロックされます。

ブロックされたクライアントシステムに関する洞察を収集するには、jailのステータスを確認してください。

$ sudo fail2ban-client status sshd

クライアントの禁止を解除するか、jailから削除するには、次のコマンドを実行します。

$ sudo fail2ban-client unban 192.168.2.102

もう一度、jailステータスをチェックして、クライアントが禁止IPリストに含まれていないことを確認します。

$ sudo fail2ban-client status sshd

これまで見てきたように、Fail2banは、Linuxシステムを侵害しようとする侵入者を防ぐのに非常に便利なツールです。これはFirewalldと連携して機能し、特定の回数のログイン試行が失敗した後、指定された期間クライアントシステムを禁止します。そうすることで、Linuxサーバーに追加の保護レイヤーを提供します。