Categories: linux

Linuxサーバーを守る!fail2banの導入・設定方法と活用術

サーバー管理者にとって、セキュリティ対策は欠かせません。特に、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情報付きでメール通知を送ってくれます。送信設定にはsendmailmailコマンドなどの導入が必要です。

永久BAN(再接続を完全に拒否)

短期間のBANだけでなく、recidive jailを使うと、繰り返しBANされるIPに対して永久BANのような対応も可能です。


まとめ:fail2banでLinuxサーバーをしっかり守ろう

fail2banは、Linuxサーバーの不正アクセスから守るために非常に有効なツールです。簡単に導入できるうえ、ログ監視による柔軟な対応が可能で、運用負担も少なく済みます。

SSHだけでなく、ApacheやNginx、Postfixなどにも対応しており、また独自のログにも対応可能です。セキュリティを高めたい管理者にとっては、導入必須と言えるでしょう。

システムの守りをfail2banで固め、安全なサーバー運用を目指しましょう

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。