開発運用

SSH セキュリティ強化 Fail2Ban

SSH (Secure Shell) は、リモートサーバーへの安全な接続を提供する重要なツールですが、同時にサーバーへの不正アクセスを試みる攻撃者のターゲットにもなります。これを防ぐために、Fail2Ban というセキュリティツールを使用することで、SSHのセキュリティを強化できます。Fail2Ban は、ログファイルを監視し、繰り返し不正なアクセスを試みるIPアドレスを自動的にブロックする仕組みを提供します。この仕組みを使って、SSH接続をより安全に保つ方法を以下に詳しく説明します。

Fail2Ban の概要

Fail2Ban は、サーバーのログファイルを監視し、悪意のあるアクセスを検出するツールです。特に、SSHやApache、Nginxなどのサービスのログを監視し、ログイン試行が規定の回数を超えたIPアドレスを自動的にブロックすることができます。これにより、ブルートフォース攻撃などによる不正アクセスを効果的に防ぐことができます。

Fail2Ban のインストール

Ubuntu に Fail2Ban をインストールするためには、まず次のコマンドを実行してパッケージリストを更新し、Fail2Ban をインストールします。

bash
sudo apt update sudo apt install fail2ban

インストールが完了したら、Fail2Ban が自動的に起動し、システムのサービスとして稼働を開始します。インストール後にサービスの状態を確認するには、次のコマンドを使用します。

bash
sudo systemctl status fail2ban

このコマンドで、「active (running)」と表示されれば、Fail2Ban は正常に動作しています。

Fail2Ban の基本設定

Fail2Ban の設定は、/etc/fail2ban/jail.conf という設定ファイルで行いますが、直接このファイルを編集するのではなく、jail.local というローカル設定ファイルを作成するのが推奨されています。このファイルで、カスタマイズ設定を行うことができます。

まず、設定ファイルのバックアップを作成し、新しい設定ファイルを作成します。

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

次に、jail.local をエディタで開きます。

bash
sudo nano /etc/fail2ban/jail.local

ここで、SSHに関連する設定を行います。例えば、以下の設定を確認します。

  • enabled: Fail2Ban がSSHを監視するかどうかを設定します。デフォルトで false になっている場合は、これを true に変更します。
  • port: SSH のポート番号を設定します。通常はデフォルトのポート 22 ですが、カスタムポートを使用している場合は、それに合わせて変更します。
  • maxretry: 失敗したログイン試行回数を指定します。例えば、3回の失敗後にブロックを行う設定にできます。
  • bantime: IPアドレスをブロックする時間(秒)を設定します。例えば、600秒(10分)に設定すると、失敗後10分間ブロックされます。

以下は、SSHの設定例です。

ini
[sshd] enabled = true port = ssh maxretry = 3 bantime = 600

設定が完了したら、ファイルを保存して終了します(Ctrl + XYEnter)。

Fail2Ban の再起動

設定を変更した後、Fail2Ban を再起動して新しい設定を反映させます。

bash
sudo systemctl restart fail2ban

これで、SSHへのアクセス試行が失敗した場合に、自動的にIPアドレスがブロックされるようになります。

Fail2Ban のログの確認

Fail2Ban の動作を確認するために、ログを確認することができます。ログファイルは /var/log/fail2ban.log に保存されています。

bash
sudo tail -f /var/log/fail2ban.log

このコマンドを使って、Fail2Ban がどのようにIPアドレスをブロックしているかをリアルタイムで確認することができます。

Fail2Ban の追加設定

Fail2Ban には、さらに細かい設定を行うことができます。例えば、SSH以外にも、ウェブサーバーの攻撃を防ぐために Apache や Nginx のログも監視できます。jail.local でこれらの設定を追加することが可能です。

Nginxの設定例:

ini
[nginx-http-auth] enabled = true port = http,https filter = nginx-http-auth logpath = /var/log/nginx/error.log maxretry = 3 bantime = 600

Apacheの設定例:

ini
[apache-auth] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache2/error.log maxretry = 3 bantime = 600

Fail2Ban の管理と監視

Fail2Ban では、実際にブロックされているIPアドレスや、失敗したログイン試行の状況を確認できます。例えば、次のコマンドで Fail2Ban の状態を確認できます。

bash
sudo fail2ban-client status sshd

このコマンドは、sshd ジェイルの現在の状態(ブロックされているIPアドレスの数、ログイン試行の数など)を表示します。

Fail2Ban のホワイトリスト設定

特定のIPアドレスがブロックされないようにするには、そのIPをホワイトリストに追加することができます。ホワイトリストに追加するには、jail.local に以下の設定を加えます。

ini
ignoreip = 127.0.0.1/8 ::1

上記の設定では、ローカルホスト(127.0.0.1)とIPv6ローカルアドレス(::1)がホワイトリストに追加されます。これにより、これらのアドレスからの接続はブロックされません。

まとめ

Fail2Ban を使用すると、SSH サービスへのブルートフォース攻撃を防ぐために非常に効果的な対策を講じることができます。特に、ログイン失敗の回数を制限し、過剰な試行を行うIPアドレスを自動的にブロックすることで、サーバーのセキュリティを大幅に強化できます。上記の手順に従って、Fail2Ban を正しく設定し、SSH のセキュリティを守りましょう。また、必要に応じて Apache や Nginx など、他のサービスも保護することが可能です。

Back to top button