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

Fail2Ban のインストール
Ubuntu に Fail2Ban をインストールするためには、まず次のコマンドを実行してパッケージリストを更新し、Fail2Ban をインストールします。
bashsudo apt update sudo apt install fail2ban
インストールが完了したら、Fail2Ban が自動的に起動し、システムのサービスとして稼働を開始します。インストール後にサービスの状態を確認するには、次のコマンドを使用します。
bashsudo systemctl status fail2ban
このコマンドで、「active (running)」と表示されれば、Fail2Ban は正常に動作しています。
Fail2Ban の基本設定
Fail2Ban の設定は、/etc/fail2ban/jail.conf
という設定ファイルで行いますが、直接このファイルを編集するのではなく、jail.local
というローカル設定ファイルを作成するのが推奨されています。このファイルで、カスタマイズ設定を行うことができます。
まず、設定ファイルのバックアップを作成し、新しい設定ファイルを作成します。
bashsudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
次に、jail.local
をエディタで開きます。
bashsudo 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 + X
→ Y
→ Enter
)。
Fail2Ban の再起動
設定を変更した後、Fail2Ban を再起動して新しい設定を反映させます。
bashsudo systemctl restart fail2ban
これで、SSHへのアクセス試行が失敗した場合に、自動的にIPアドレスがブロックされるようになります。
Fail2Ban のログの確認
Fail2Ban の動作を確認するために、ログを確認することができます。ログファイルは /var/log/fail2ban.log
に保存されています。
bashsudo 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 の状態を確認できます。
bashsudo fail2ban-client status sshd
このコマンドは、sshd
ジェイルの現在の状態(ブロックされているIPアドレスの数、ログイン試行の数など)を表示します。
Fail2Ban のホワイトリスト設定
特定のIPアドレスがブロックされないようにするには、そのIPをホワイトリストに追加することができます。ホワイトリストに追加するには、jail.local
に以下の設定を加えます。
iniignoreip = 127.0.0.1/8 ::1
上記の設定では、ローカルホスト(127.0.0.1
)とIPv6ローカルアドレス(::1
)がホワイトリストに追加されます。これにより、これらのアドレスからの接続はブロックされません。
まとめ
Fail2Ban を使用すると、SSH サービスへのブルートフォース攻撃を防ぐために非常に効果的な対策を講じることができます。特に、ログイン失敗の回数を制限し、過剰な試行を行うIPアドレスを自動的にブロックすることで、サーバーのセキュリティを大幅に強化できます。上記の手順に従って、Fail2Ban を正しく設定し、SSH のセキュリティを守りましょう。また、必要に応じて Apache や Nginx など、他のサービスも保護することが可能です。