Linux fail2ban コマンド
fail2ban は、Linux サーバーをブルートフォース攻撃から保護するためのオープンソースの侵入防御ツールです。システムログファイル(/var/log/auth.log など)を監視して、SSH ログインの複数回の失敗試行などの悪意のある行為を検出し、ファイアウォールルールを自動的に更新して、これらの攻撃者の IP アドレスをブロックします。
fail2ban コア機能
リアルタイムログ監視
fail2ban は指定されたログファイルを継続的に監視し、事前定義されたパターンの悪意のある行為を探します。
自動IPバン
同一 IP からの複数回の失敗試行(設定可能なしきい値)を検出すると、fail2ban は自動的にその IP をファイアウォールのブロックリストに追加します。
設定可能なバン時間
管理者は初期バン時間と、複数回の違反後の漸増バン時間を設定できます。
マルチサービスサポート
SSH だけでなく、Apache、Nginx、FTP、メールサービスなど、さまざまなサービスの保護もサポートしています。
メール通知
IP をバンしたときに管理者へメール通知を送信するよう設定できます。
fail2ban のインストールと設定
インストール方法
Debian/Ubuntu ベースのシステムの場合:
例
sudo apt install fail2ban
RHEL/CentOS ベースのシステムの場合:
例
sudo yum install fail2ban
基本設定
fail2ban の主要な設定ファイルは次の場所にあります:
/etc/fail2ban/jail.conf- メイン設定ファイル(直接変更は推奨されません)/etc/fail2ban/jail.local- ユーザーカスタム設定(ここでの変更を推奨)
カスタム設定ファイルを作成:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
fail2ban のよく使うコマンド
サービスの起動/停止/再起動
例
sudo systemctl stop fail2ban # サービスを停止
sudo systemctl restart fail2ban # サービスを再起動
sudo systemctl enable fail2ban # 起動時に自動起動を設定
サービスの状態確認
sudo systemctl status fail2ban
バンされたIPの確認
sudo fail2ban-client status sshd
特定IPのバン解除
sudo fail2ban-client set sshd unbanip 192.168.1.100
手動でのIPバン
sudo fail2ban-client set sshd banip 192.168.1.100
fail2ban 設定ファイルの詳細
主要な設定パラメータ
例
# 無視する IP アドレス(ホワイトリスト)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# バン時間(秒)
bantime = 600
# 検出時間ウィンドウ(秒)
findtime = 600
# 最大試行回数
maxretry = 3
# 使用するファイアウォールバックエンド
banaction = iptables-multiport
[sshd]
# SSH保護を有効にするかどうか
enabled = true
# ログファイルのパス
logpath = %(sshd_log)s
# フィルター名
filter = sshd
# ポート番号
port = ssh
カスタムフィルター
フィルターは/etc/fail2ban/filter.d/ディレクトリ内に定義されています。例えば、カスタム SSH フィルターを作成する場合:
-
デフォルトの SSH フィルターをコピー:
sudo cp /etc/fail2ban/filter.d/sshd.conf /etc/fail2ban/filter.d/sshd-custom.conf
-
カスタムフィルターを編集し、特定の失敗パターンに一致するように正規表現を変更します。
fail2ban 実践例
SSHサービスの保護
-
jail.local ファイルを編集:
sudo nano /etc/fail2ban/jail.local
-
以下の内容を追加または変更します:
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 600
-
fail2ban サービスを再起動:
sudo systemctl restart fail2ban
Apacheサービスの保護
-
jail.local に以下の内容が含まれていることを確認します:
[apache] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache2/error.log maxretry = 3 bantime = 86400
-
サービスを再起動して設定を有効にします。
fail2ban の高度な使い方
fail2ban でカスタムサービスを保護する
-
カスタムフィルターファイルを作成:
sudo nano /etc/fail2ban/filter.d/myapp.conf
-
フィルタールールを追加(例):
[Definition] failregex = ^.* .* "POST /login.php.* 401 ignoreregex =
-
jail.local に対応する jail を追加します:
enabled = true port = http,https filter = myapp logpath = /var/log/myapp/access.log maxretry = 5 bantime = 3600
メール通知の設定
-
jail.local ファイルを編集:
[DEFAULT] destemail = admin@example.com sender = fail2ban@example.com mta = sendmail action = %(action_mwl)s
-
メール送信ツール(sendmail や postfix など)がシステムにインストールされ、設定されていることを確認します。
fail2ban ログとトラブルシューティング
fail2ban ログの確認
sudo tail -f /var/log/fail2ban.log
よくある問題の解決
fail2ban が動作しない
- サービスが実行されているか確認します:
sudo systemctl status fail2ban - ログにエラーがないか確認します:
sudo journalctl -u fail2ban
IP がバンされない
- ログのパスが正しいことを確認する
- フィルターの正規表現がログエントリに一致するか確認する
- ログレベルをデバッグに上げる:jail.local で設定する
loglevel = DEBUG
IP の誤バン
- 信頼できる IP を ignoreip リストに追加します
- maxretry を減らすか、findtime を増やします
fail2ban のベストプラクティス
-
定期的な更新:fail2ban を最新の状態に保ち、最新のセキュリティ修正と機能改善を入手します。
-
適切な設定:
- 適切な maxretry と bantime を設定する
- bantime を長く設定しすぎない。正当なユーザーを誤ってバンしないようにするため
- 短く設定しすぎない。そうしないと保護効果が限定的になる
-
監視とレビュー:
- バンされた IP のリストを定期的に確認する
- ログを分析して攻撃パターンを把握する
-
多層防御:
- fail2ban を他のセキュリティ対策(ファイアウォール、強力なパスワードポリシーなど)と組み合わせる
- SSH のデフォルトポートの変更を検討する
-
設定のバックアップ:
- カスタム設定ファイルとフィルターをバックアップする
- 障害復旧のためにすべての変更を記録する
まとめ
fail2ban は Linux システムのセキュリティにおける重要なツールであり、悪意のある行為を自動的に検出してブロックすることで、ブルートフォース攻撃を効果的に防ぎます。fail2ban を適切に設定して使用することで、サーバーのセキュリティを大幅に向上させると同時に、管理者の手動介入の作業負担を軽減できます。この記事の紹介を通じて、fail2ban の基本的な使い方と高度な設定テクニックを習得し、実際のニーズに応じて独自のセキュリティ保護戦略をカスタマイズできるはずです。
その他の拡張