サーバー管理者にとって、セキュリティ対策は欠かせません。特に、SSHやWebサービスなど外部公開しているポートは、日常的に不正アクセスの脅威にさらされています。そんな中で注目されているのが、ログを監視して不審なアクセス元を自動的に遮断する「fail2ban(フェイル・トゥー・バン)」というツールです。本記事では、fail2banの概要から、インストール方法、基本的な設定、実践的なカスタマイズ方法までをわかりやすく解説します。Linuxサーバーの防御力を高めたい方は必見です。
fail2banとは?不正アクセスを自動でブロックするツール
fail2banは、Linux環境で動作するセキュリティツールの一つです。サーバーログを定期的にチェックし、不正なアクセス(例:短時間に何度もログイン失敗を繰り返すなど)を検知すると、該当IPアドレスを一時的にiptablesやfirewalldを用いて遮断してくれます。
たとえばSSHポート(22番)への総当たり攻撃(ブルートフォースアタック)を防ぐために、fail2banが5回以上失敗したIPを10分間遮断するといったルールを簡単に構築できます。
このように、fail2banは「ログ監視」「条件の一致」「IPブロック」を自動的に行ってくれる、非常に頼もしいツールです。
fail2banのインストール手順(Debian系・Red Hat系)
fail2banは主要なLinuxディストリビューションで利用できます。以下は代表的なインストール手順です。
Debian / Ubuntu 系
sudo apt update
sudo apt install fail2ban
CentOS / Rocky Linux / RHEL系
sudo dnf install epel-release
sudo dnf install fail2ban
インストール後は、fail2banのサービスを有効化して起動します。
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
現在の状態は以下で確認できます。
sudo systemctl status fail2ban
fail2banの基本設定(jail.localファイル)
fail2banの設定は主に2つのファイルで行います。
/etc/fail2ban/jail.conf
(デフォルト設定:書き換えない)/etc/fail2ban/jail.local
(こちらに独自設定を記述)
jail.local ファイルに設定することで、各サービスに対する監視ルールを作成できます。以下はSSHに対しての設定例です。
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5
bantime = 600
findtime = 600
enabled
: 有効化の可否port
: 対象ポート(カスタムポートも指定可能)logpath
: ログの場所(OSにより異なる)maxretry
: 失敗回数の上限bantime
: ブロック時間(秒)findtime
: 上記回数の検知対象期間
設定ファイルを保存後、fail2banを再起動して反映します。
sudo systemctl restart fail2ban
fail2ban-clientによる状態確認と管理
fail2banにはfail2ban-client
というCLIツールがあり、現在のバン状況などを確認・操作できます。
稼働中のjailの一覧表示
sudo fail2ban-client status
特定のjailの状態確認(例:sshd)
sudo fail2ban-client status sshd
特定IPを手動でブロック/解除
# ブロック
sudo fail2ban-client set sshd banip 192.168.0.100
# 解除
sudo fail2ban-client set sshd unbanip 192.168.0.100
ログファイルの監視とエラー時の対処法
fail2banのログは以下に保存されます:
/var/log/fail2ban.log
ここには、バンされたIPや、jailの起動エラーなどが記録されています。設定ミスがあるとログにエラーが表示されるため、設定変更後に確認するのが安全です。
たとえば、logpath
の指定ミス、jail名のタイポ、対象ログファイルが存在しない場合などはすぐに確認できます。
よく使うjailの例(SSH、Apache、Nginx、Postfixなど)
fail2banでは、SSH以外にも多数のサービスに対応しています。代表的なものをいくつか紹介します。
Apache
[apache-auth]
enabled = true
logpath = /var/log/apache2/error.log
maxretry = 3
Nginx
[nginx-http-auth]
enabled = true
logpath = /var/log/nginx/error.log
Postfix(メールサーバー)
[postfix]
enabled = true
logpath = /var/log/maillog
それぞれのサービスに応じたログ形式を解析できるよう、fail2banには「filter」と呼ばれる正規表現のテンプレートも多数用意されています。
カスタムルールの作り方(filterの編集)
fail2banでは、jailだけでなく、ログの中から検知するルールを定義する「filter」も編集できます。filterは以下のような構成で保存されています:
/etc/fail2ban/filter.d/
たとえば、SSH用のfilterファイルは sshd.conf
にあり、以下のような正規表現で構成されています:
failregex = ^%(__prefix_line)sFailed password for .* from <HOST> port .*
ここで <HOST>
は攻撃元IPを表します。独自のアプリケーションログに対してfail2banを使いたい場合は、このフィルターをカスタマイズすることで対応可能です。
fail2banをさらに強化する設定(メール通知・permanent ban)
fail2banはIPブロックだけでなく、他のアクションも設定可能です。
ブロック時にメール通知を受け取る
action
に以下のような設定を加えることで、バン発生時にメールを送信できます。
action = %(action_mwl)s
この設定では、Whois情報付きでメール通知を送ってくれます。送信設定にはsendmail
やmail
コマンドなどの導入が必要です。
永久BAN(再接続を完全に拒否)
短期間のBANだけでなく、recidive
jailを使うと、繰り返しBANされるIPに対して永久BANのような対応も可能です。
まとめ:fail2banでLinuxサーバーをしっかり守ろう
fail2banは、Linuxサーバーの不正アクセスから守るために非常に有効なツールです。簡単に導入できるうえ、ログ監視による柔軟な対応が可能で、運用負担も少なく済みます。
SSHだけでなく、ApacheやNginx、Postfixなどにも対応しており、また独自のログにも対応可能です。セキュリティを高めたい管理者にとっては、導入必須と言えるでしょう。
システムの守りをfail2banで固め、安全なサーバー運用を目指しましょう