サーバー管理者にとって、セキュリティ対策は欠かせません。特に、SSHやWebサービスなど外部公開しているポートは、日常的に不正アクセスの脅威にさらされています。そんな中で注目されているのが、ログを監視して不審なアクセス元を自動的に遮断する「fail2ban(フェイル・トゥー・バン)」というツールです。本記事では、fail2banの概要から、インストール方法、基本的な設定、実践的なカスタマイズ方法までをわかりやすく解説します。Linuxサーバーの防御力を高めたい方は必見です。
fail2banは、Linux環境で動作するセキュリティツールの一つです。サーバーログを定期的にチェックし、不正なアクセス(例:短時間に何度もログイン失敗を繰り返すなど)を検知すると、該当IPアドレスを一時的にiptablesやfirewalldを用いて遮断してくれます。
たとえばSSHポート(22番)への総当たり攻撃(ブルートフォースアタック)を防ぐために、fail2banが5回以上失敗したIPを10分間遮断するといったルールを簡単に構築できます。
このように、fail2banは「ログ監視」「条件の一致」「IPブロック」を自動的に行ってくれる、非常に頼もしいツールです。
fail2banは主要なLinuxディストリビューションで利用できます。以下は代表的なインストール手順です。
sudo apt update
sudo apt install fail2ban
sudo dnf install epel-release
sudo dnf install fail2ban
インストール後は、fail2banのサービスを有効化して起動します。
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
現在の状態は以下で確認できます。
sudo systemctl status fail2ban
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にはfail2ban-client
というCLIツールがあり、現在のバン状況などを確認・操作できます。
sudo fail2ban-client status
sudo fail2ban-client status sshd
# ブロック
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名のタイポ、対象ログファイルが存在しない場合などはすぐに確認できます。
fail2banでは、SSH以外にも多数のサービスに対応しています。代表的なものをいくつか紹介します。
[apache-auth]
enabled = true
logpath = /var/log/apache2/error.log
maxretry = 3
[nginx-http-auth]
enabled = true
logpath = /var/log/nginx/error.log
[postfix]
enabled = true
logpath = /var/log/maillog
それぞれのサービスに応じたログ形式を解析できるよう、fail2banには「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はIPブロックだけでなく、他のアクションも設定可能です。
action
に以下のような設定を加えることで、バン発生時にメールを送信できます。
action = %(action_mwl)s
この設定では、Whois情報付きでメール通知を送ってくれます。送信設定にはsendmail
やmail
コマンドなどの導入が必要です。
短期間のBANだけでなく、recidive
jailを使うと、繰り返しBANされるIPに対して永久BANのような対応も可能です。
fail2banは、Linuxサーバーの不正アクセスから守るために非常に有効なツールです。簡単に導入できるうえ、ログ監視による柔軟な対応が可能で、運用負担も少なく済みます。
SSHだけでなく、ApacheやNginx、Postfixなどにも対応しており、また独自のログにも対応可能です。セキュリティを高めたい管理者にとっては、導入必須と言えるでしょう。
システムの守りをfail2banで固め、安全なサーバー運用を目指しましょう