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.10Fail2banはこれらの失敗を検知し、自動的に攻撃元を遮断します。
Fail2banの動作イメージ
動作の流れです。
- SSH認証失敗
- ログへ記録
- Fail2banが検知
- IPアドレスを遮断
- 一定時間後に解除
自動的に防御してくれることが大きな特徴です。
インストール方法
AlmaLinux 9の場合です。
# dnf install epel-release -y
# dnf install fail2ban -y
インストール後にサービスを起動します。
# systemctl enable --now fail2banサービス状態確認
状態を確認します。
# systemctl status fail2banactive (running)になっていれば正常です。
設定ファイルの場所
主な設定ファイルです。
/etc/fail2ban/jail.confただし直接編集は推奨されません。
通常は以下を利用します。
/etc/fail2ban/jail.localSSH用の基本設定
代表的な設定例です。
[sshd]
enabled = true
port = ssh
filter = sshd
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1hこれが基本構成になります。
enabledとは
監視の有効化設定です。
enabled = trueSSH監視を有効にします。
maxretryとは
認証失敗回数です。
maxretry = 55回失敗すると遮断されます。
findtimeとは
監視時間です。
findtime = 600600秒(10分)以内の失敗回数を集計します。
bantimeとは
遮断時間です。
bantime = 36003600秒(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 = 864003回失敗で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をインターネットへ公開している場合は、ぜひ導入を検討してみましょう。





