Fail2banによるSSH防御|総当たり攻撃を自動遮断する仕組みを解説

Fail2banによるSSH防御

Fail2banを利用してSSH総当たり攻撃からサーバを守ろう

SSHサーバをインターネットへ公開すると、ほぼ確実に総当たり攻撃(ブルートフォース攻撃)を受けます。

公開鍵認証やパスワード認証無効化は重要な対策ですが、それだけでは認証試行そのものを止めることはできません。

そこで実務で広く利用されているのがFail2banです。

Fail2banは認証失敗ログを監視し、不審なアクセス元IPアドレスを自動的に遮断するセキュリティツールです。

Linuxサーバ運用では非常に定番の防御策となっており、多くの企業環境で導入されています。

本記事ではFail2banの仕組みや設定方法、SSH防御への活用方法について詳しく解説します。

Fail2banとは

Fail2banはログファイルを監視し、不正アクセスと判断したIPアドレスを自動的にブロックするツールです。

主に以下のサービスで利用されます。

  • SSH
  • Apache
  • Nginx
  • Postfix
  • Dovecot

最も利用されるのはSSH防御です。

なぜFail2banが必要なのか

SSHサーバでは毎日大量のログイン試行が発生しています。

例えば以下のようなログです。

Failed password for root from 203.0.113.10
Failed password for root from 203.0.113.10
Failed password for root from 203.0.113.10

Fail2banはこれらの失敗を検知し、自動的に攻撃元を遮断します。

Fail2banの動作イメージ

動作の流れです。

  1. SSH認証失敗
  2. ログへ記録
  3. Fail2banが検知
  4. IPアドレスを遮断
  5. 一定時間後に解除

自動的に防御してくれることが大きな特徴です。

インストール方法

AlmaLinux 9の場合です。

# dnf install epel-release -y
# dnf install fail2ban -y

インストール後にサービスを起動します。
# systemctl enable --now fail2ban

サービス状態確認

状態を確認します。

# systemctl status fail2ban

active (running)になっていれば正常です。

設定ファイルの場所

主な設定ファイルです。

/etc/fail2ban/jail.conf

ただし直接編集は推奨されません。

通常は以下を利用します。

/etc/fail2ban/jail.local

SSH用の基本設定

代表的な設定例です。

[sshd]
enabled  = true
port     = ssh
filter   = sshd
backend  = systemd

maxretry = 5
findtime = 10m
bantime  = 1h

これが基本構成になります。

enabledとは

監視の有効化設定です。

enabled = true

SSH監視を有効にします。

maxretryとは

認証失敗回数です。

maxretry = 5

5回失敗すると遮断されます。

findtimeとは

監視時間です。

findtime = 600

600秒(10分)以内の失敗回数を集計します。

bantimeとは

遮断時間です。

bantime = 3600

3600秒(1時間)遮断します。

設定反映方法

設定変更後は再起動します。

# systemctl restart fail2ban

状態も確認しましょう。
# systemctl status fail2ban

現在の状態を確認する

Fail2banの全体状態です。

# fail2ban-client status

有効なJailが表示されます。

SSH Jailを確認する

# fail2ban-client status sshd

監視状況が表示されます。

遮断中IPの確認

出力例です。

Banned IP list:
203.0.113.10
198.51.100.20

現在ブロック中のIPが確認できます。

手動で解除する

誤って遮断した場合です。

# fail2ban-client set sshd unbanip 203.0.113.10

指定IPを解除できます。

firewalldとの連携

Fail2banは通常firewalldと連携します。

内部的にはfirewalldへルールを追加し、通信を遮断します。

管理者が個別設定する必要はほとんどありません。

iptablesやnftablesでも利用可能

環境によっては以下も利用できます。

  • iptables
  • nftables
  • firewalld

Linux環境に合わせて動作します。

公開鍵認証との関係

公開鍵認証を利用していてもFail2banは有効です。

理由は以下です。

  • 不要なアクセスを減らせる
  • ログを整理できる
  • 攻撃元を自動排除できる

多層防御として推奨されます。

クラウド環境での利用

AWSやAzureでも利用できます。

Security Groupによる制御と組み合わせるケースが一般的です。

非常に高い防御効果が得られます。

よくある設定例

企業環境では以下がよく利用されます。

maxretry = 3
findtime = 600
bantime = 86400

3回失敗で24時間遮断です。

ログ確認方法

Fail2ban自身のログです。

# journalctl -u fail2ban

遮断状況やエラーを確認できます。

よくあるトラブル

遮断されない

ログパス設定を確認します。

logpath

誤っていると監視できません。

自分が遮断された

手動解除を実行します。

コンソール接続が利用できる環境を確保しておきましょう。

サービスが起動しない

設定ファイルの構文エラーを確認します。

journalctlが役立ちます。

Fail2banだけで十分なのか

Fail2banは非常に有効ですが、それだけでは十分ではありません。

以下も組み合わせましょう。

  • 公開鍵認証
  • パスワード認証無効化
  • rootログイン禁止
  • 接続元制限
  • MFA

多層防御が基本です。

実務で推奨される構成

  • 公開鍵認証
  • PasswordAuthentication no
  • PermitRootLogin no
  • Fail2ban
  • firewalld
  • MFA

現在のLinuxサーバ運用では定番の構成です。

まとめ

Fail2banはSSH総当たり攻撃を自動的に検知し、攻撃元IPアドレスを遮断する強力なセキュリティツールです。

設定も比較的簡単であり、多くのLinuxサーバ環境で導入されています。

公開鍵認証やrootログイン禁止と組み合わせることで、SSHサーバの安全性を大幅に向上できます。

SSHをインターネットへ公開している場合は、ぜひ導入を検討してみましょう。