Fail2Banインストール完全ガイド【Ubuntu、AlmaLinux、Rocky Linux対応】

Fail2Banは、ブルートフォース攻撃からサーバを保護するためのログ監視型の侵入防止システム(IPS)です。

本記事では、Ubuntu Server、AlmaLinux、Rocky Linuxそれぞれの環境におけるFail2Banのインストール手順を、わかりやすく解説します。

対象OS
  • Debian系
    • Ubuntu Server
  • RHEL系
    • AlmaLinux
    • Rocky Linux

Fail2Banを初めて導入する方にも理解しやすいように、用語解説から動作確認まで、段階的に理解できる構成となっています。

目次

Fail2Banとは

Fail2Banは、不正アクセスの試行を検知し、自動的に該当IPアドレスをブロックすることでサーバのセキュリティを高めるログ監視型の侵入防止システム(IPS)です。不正なログイン試行や攻撃と見なされるアクセスが一定回数以上繰り返された場合に、攻撃元のIPアドレスを一時的または恒久的にブロックすることで、サーバーへの侵入リスクを大幅に低減します。特に、ブルートフォース攻撃への対策として広く利用されており、システム管理者やセキュリティエンジニアの間で高く評価されています。

Fail2BanはPythonで実装されており、UbuntuやAlmaLinux、Rocky Linuxをはじめとする多くのLinuxディストリビューションで動作します。軽量かつ依存関係が少ないため、リソースに制限のあるVPS環境などでも導入が容易です。

Fail2Banの最大の特徴は、システムのログファイルをリアルタイムに監視し、そこに記録されたアクセスログに基づいて自動的に対処を行う点にあります。たとえば、SSHのログイン失敗が連続して記録されると、それをトリガーとして攻撃元のIPアドレスをブロックします。この動作は、「jail」と呼ばれる設定単位によって柔軟に制御でき、監視対象のサービスごとに異なる条件やアクションを指定することが可能です。

Fail2Banの基本的な仕組み

STEP

ログファイルを監視

指定されたサービス(例:SSH、Postfix、nginxなど)のログファイルを継続的に監視します。

STEP

攻撃パターンを検出

事前に定義された正規表現パターン(フィルタ)に基づき、不正アクセス(例:ログイン失敗の連続)を検出します。

STEP

攻撃元のIPアドレスをブロック

一定回数以上の不正アクセスがあったIPアドレスに対し、iptablesfirewalld などのファイアウォールを介してアクセスを遮断します。

Fail2Banを導入するメリット

メリット解説
自動化された防御手動でブラックリスト管理をする必要がなく、リアルタイムで攻撃をブロックできます。
誤検知が少ないフィルタルールは柔軟にカスタマイズ可能で、実運用に適した誤検知率の低い構成が可能です。
幅広いサービスに対応SSHだけでなく、Apache、Dovecot、ProFTPDなど多数のサービスに対応しています。
軽量でシンプルPythonベースで動作し、システムへの負荷も小さいため、低スペックなサーバでも導入可能です。
オープンソース・無料低コストで導入することができます。

ブルートフォース攻撃の対策に有効

Fail2Banは、特にSSHやFTP、Webアプリケーションなどを対象としたブルートフォース攻撃に対して、極めて効果的な対策ツールです。

ブルートフォース攻撃とは、攻撃者が無数のパスワードを自動的に試行し、認証を突破しようとする手法です。脆弱な認証機構を狙われると短時間で侵入を許すリスクがあります。

たとえば、5分間に5回のログイン失敗が発生した際、そのIPアドレスを一時的にブロックすることで、攻撃者は数千回、数万回と試行を繰り返すことができず、侵入のリスクを大幅に低減できます。

Fail2Banで使用する用語

Fail2Banでは、多くの専門用語が用いられています。ここでは、Fail2Banを理解するために必要な主要用語を簡単に説明します。

用語説明
Jail攻撃を検知・対処するための監視単位。どのログを監視し、どのアクションを取るかを定義。
Filterログファイルから不正アクセスを検出するための正規表現ルールを定義。
Action不正アクセスを検出した際に実行する処理を定義。(例:IPアドレスのブロック、通知メールの送信など)
Ban不正な動作を検出したIPアドレスに対してアクセス制限を行う。
Unban一定時間経過後または管理者の判断でアクセス制限を解除する。
Backendログの監視方法を指定。(例:systemd、polling など)
Findtime不正アクセスの試行回数をカウントする時間。(Maxretry回の失敗が許容される時間)
MaxretryBanの対象となるまでに許容される失敗回数。(例:ログイン失敗など)
BantimeIPアドレスをBanする時間。

Jail(ジェイル)は、Fail2Banにおける最も重要な構成要素の一つであり、監視対象のサービス(例:SSH、Apache、Postfixなど)ごとの監視ルールを定義します。

インストール環境・前提条件

Fail2BanはPythonで開発されており、多くのLinuxディストリビューションに対応しています。本記事ではDebian系のUbuntu Server、およびRHEL系のAlmaLinux、Rocky Linuxを対象に解説しています。
なお、CentOSは公式サポートが終了しているため、対象外としております。

OSバージョン
Ubuntu Server24.04.2 LTS
AlmaLinux9.5
Rocky Linux9.5

Fail2Banは「ログファイルへのアクセス」「ファイアウォール設定」といった一般ユーザーには許可されていない操作を行うため、rootユーザーまたはそれに相当するsudo権限が必要です。本記事では、Ubuntuはsudo権限、AlmaLinuxとRocky Linuxは、rootユーザーを使用します。

Ubuntu Server

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.2 LTS"

AlmaLinux

# cat /etc/redhat-release
AlmaLinux release 9.5 (Teal Serval)

Rocky Linux

# cat /etc/redhat-release
Rocky Linux release 9.5 (Blue Onyx)

次のセクションでは、実際のインストール手順について解説します。

Fail2Banをインストール

Fail2Banのインストールは非常にシンプルですが、対象となるLinuxディストリビューションによって手順が異なります。ここでは、Debian系のUbuntu Server、およびRHEL系のAlmaLinux、Rocky Linuxへのインストール方法を解説します。

  • Debian系
    • Ubuntu Server
  • RHEL系
    • AlmaLinux
    • Rocky Linux

Fail2Banのパッケージは比較的軽量で、依存関係も少ないため、インストールは1分程度で完了します。

ディストリビューションのパッケージリポジトリでは、最新バージョンではなく安定バージョンが提供されているケースがあります。最新機能やバグ修正が必要な場合は、GitHubから最新バージョンのソースを取得し、ビルドする方法もありますが、動作検証や依存関係の管理が必要になります。

Ubuntu Serverにインストール

Ubuntuの場合、Fail2Banは標準リポジトリに含まれているため、APTパッケージマネージャを使って簡単にインストールできます。

STEP

システムの最新化

古いパッケージとの互換性問題や依存関係のエラーを避けるため、システムを最新の状態にします。

$ sudo apt update
$ sudo apt upgrade
STEP

Fail2Banをインストール

Fail2BanはUbuntuの標準リポジトリに含まれているため、aptコマンドを用いて、インストールします。

$ sudo apt install fail2ban
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  python3-pyasyncore python3-pyinotify whois
Suggested packages:
  mailx monit sqlite3 python-pyinotify-doc
The following NEW packages will be installed:
  fail2ban python3-pyasyncore python3-pyinotify whois
0 upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
Need to get 496 kB of archives.
After this operation, 2,572 kB of additional disk space will be used.
Do you want to continue? [Y/n]

パッケージ情報を読み込んで、依存関係をチェックし、Fail2Banを動かすために必要なパッケージも自動インストールしてくれます。

STEP

インストール後の状態確認

インストール後、Fail2Banのサービスが立ち上がり、自動起動設定も有効になります。

$ sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
     Active: active (running) since Tue 2025-04-15 06:31:51 UTC; 2h 14min ago
〜 省略 〜

$ sudo systemctl is-enabled fail2ban
enabled
STEP

バージョンを確認

Ubuntu Server 24.04.2 LTSでは、Fail2Banのバージョン1.0.2がインストールされます。(2025年4月15日時点)

$ fail2ban-client -V
1.0.2
STEP

Fail2Banの稼働状況を確認

稼働中のjailの一覧など、全体の稼働状況を確認します。

$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

上記の通り、Ubuntu ServerにFail2Banをインストールすると、デフォルトでsshdのjailが稼働しています。

AlmaLinux、Rocky Linuxにインストール

AlmaLinux、およびRocky LinuxなどのRHEL系ディストリビューションでは、dnfコマンドを使用します。ただし、Fail2Banは標準リポジトリに含まれていないため、EPEL(Extra Packages for Enterprise Linux)リポジトリを使う必要があります。

STEP

システムの最新化

まず、依存関係のトラブルを防ぐため、既存パッケージを更新します。

# dnf check-update
# dnf upgrade
STEP

EPELリポジトリの有効化

Fail2BanはEPEL(Extra Packages for Enterprise Linux)リポジトリに含まれているため、EPELリポジトリがシステムに登録されていて、有効になっているか確認します。

# dnf repolist all | grep epel

AlmaLinux、Rocky Linuxいずれも、初期状態ではEPELリポジトリが導入されていないため、EPELリポジトリをインストールします。

# dnf install epel-release
STEP

Fail2Banをインストール

Fail2Banをインストールします。依存関係のあるパッケージも同時にインストールされます。

# dnf install fail2ban

EPELリポジトリを導入していない状態でFail2Banをインストールすると、エラーになります。

# dnf install fail2ban
引数に一致する結果がありません: fail2ban
エラー: 一致するものが見つかりません: fail2ban
STEP

インストール後の状態確認

Ubuntu Serverとは異なり、AlmaLinux、Rocky Linuxの場合、インストール直後の状態ではFail2Banは起動しておらず、自動起動設定もされていません。

# systemctl status fail2ban
○ fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; preset: disabled)
     Active: inactive (dead)
       Docs: man:fail2ban(1)

# systemctl is-enabled fail2ban
disabled
STEP

サービスの起動と自動起動設定

手動でFail2Banを起動し、OS起動時に自動的にサービスが立ち上がるよう設定します。

Fail2Banを起動
# systemctl start fail2ban

自動起動を設定
# systemctl enable fail2ban

--nowオプションを使うと、サービスの自動起動設定と即時起動が一度に行えます。

# systemctl enable --now fail2ban
STEP

サービス起動後の状態確認

# systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: disabled)
     Active: active (running) since Tue 2025-04-15 17:28:54 JST; 45s ago
〜 省略 〜

# systemctl is-enabled fail2ban
enabled

active (running)のステータスが表示され、正常に起動していることが確認できます。また、自動起動も有効になっています。

STEP

バージョンを確認

2025年4月15日現在、AlmaLinux、Rocky Linuxいずれも「1.1.0」がインストールされます。

# fail2ban-client -V
1.1.0
STEP

Fail2Banの稼働状況を確認

インストール後のFail2Banの稼働状況を確認します。

# fail2ban-client status
Status
|- Number of jail:      0
`- Jail list:

Ubuntu Serverとは異なり、インストール後の初期状態では何も設定されていないことが確認できます。

Fail2Banの主な構成

設定ファイル

Fail2Banの設定ファイルは、/etc/fail2banディレクトリに格納されており、特に重要なのがfail2ban.confjail.conf、およびカスタム設定用のjail.localです。

Fail2Banの主な設定ファイル

ファイル役割
fail2ban.confFail2Banの基本的な動作設定を定義
例:ログレベルやログファイル出力先など
jail.confjailのデフォルト設定(どのサービスを監視し、どんな条件で対処するか)
jail.d/*.confjail単位のカスタム設定
filter.d/*.conf不正アクセスをログから検出するためのルールを定義
action.d/*.conf不正アクセスを検知した際に実行するアクションを定義

fail2ban.confはログ出力先やログレベルなど、全体的な動作に関わる設定を含んでいます。一方、jail.confは各種サービス(SSH、Postfix、Apacheなど)に対する監視設定を記述しています。

jail.localとは

Fail2Banにはjail.confという設定ファイルは存在しますが、直接編集することは推奨されていません。理由としては、パッケージアップデート時にこのファイルが上書きされる可能性があるためです。そのため、jail.localを作成し、こちらにカスタム設定を行います。

  • jail.conf:デフォルト設定(※編集は非推奨)
  • jail.local:カスタム設定を記述し、jail.confを上書きする

コマンド

Fail2Banのコマンドは、/usr/binディレクトリに格納されています。

Fail2Banの各種コマンド

コマンド用途
fail2ban-clientFail2Banの制御・管理を行う主要なインターフェース
fail2ban-serverログ監視やBan処理を行うバックグラウンドプロセス
fail2ban-regexフィルター設定(正規表現)が意図した通りに機能するかを検証するためのコマンド
fail2ban-pythonFail2Banが内部で使うPythonインタプリタ
fail2ban-testcasesユニットテスト用

Fail2Banの運用において、日常的に使用するコマンドはfail2ban-clientです。このクライアントツールはfail2ban-serverと通信を行い、各種設定や制御を行います。

ログファイル

Fail2Banのログは通常、/var/log/fail2ban.logに出力されます。このファイルには、どのIPアドレスが、どのjailで、どのような理由でBanされたのかが記録されています。

Fail2Banの動作テスト

Fail2Banの挙動を検証するためには、意図的に失敗したログインを試行する方法が最も確実です。例えば、sshでわざと誤ったパスワードで数回ログインを試みることで、Fail2Banがログを検知し、設定した閾値に達した時点でアクセス元IPが遮断されるかどうかを観察します。

検証環境

ssh実行マシンFail2Ban実行マシン
OSKali Linux 2025.1Ubuntu Server 24.04.1 LTS
IPアドレス192.168.10.11192.168.10.102

$ ssh -l root 192.168.10.102
ssh: connect to host 192.168.10.102 port 22: Connection refused

パスワードを5回間違えたため、接続が拒否されました。

Fail2Ban実行マシン(Ubuntu Server)

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     5
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     1
   `- Banned IP list:

$ more /var/log/fail2ban.log
〜 省略 〜
2025-04-16 13:48:31,070 fail2ban.server         [768]: INFO    Starting Fail2ban v1.0.2
2025-04-16 13:48:31,070 fail2ban.observer       [768]: INFO    Observer start...
2025-04-16 13:48:31,919 fail2ban.database       [768]: INFO    Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2025-04-16 13:48:31,920 fail2ban.jail           [768]: INFO    Creating new jail 'sshd'
2025-04-16 13:48:38,954 fail2ban.jail           [768]: INFO    Jail 'sshd' uses systemd {}
2025-04-16 13:48:38,955 fail2ban.jail           [768]: INFO    Initiated 'systemd' backend
2025-04-16 13:48:38,957 fail2ban.filter         [768]: INFO      maxLines: 1
2025-04-16 13:48:38,983 fail2ban.filtersystemd  [768]: INFO    [sshd] Added journal match for: '_SYSTEMD_UNIT=sshd.service + _COMM=sshd'
2025-04-16 13:48:38,983 fail2ban.filter         [768]: INFO      maxRetry: 5
2025-04-16 13:48:38,983 fail2ban.filter         [768]: INFO      findtime: 600
2025-04-16 13:48:38,983 fail2ban.actions        [768]: INFO      banTime: 600
2025-04-16 13:48:38,983 fail2ban.filter         [768]: INFO      encoding: UTF-8
2025-04-16 13:48:39,166 fail2ban.jail           [768]: INFO    Jail 'sshd' started
2025-04-16 13:48:50,051 fail2ban.filtersystemd  [768]: INFO    [sshd] Jail is in operation now (process new journal entries)
2025-04-16 20:04:15,582 fail2ban.filter         [768]: INFO    [sshd] Found 192.168.10.11 - 2025-04-16 20:04:15
2025-04-16 20:05:53,118 fail2ban.filter         [768]: INFO    [sshd] Found 192.168.10.11 - 2025-04-16 20:05:52
2025-04-16 20:05:58,867 fail2ban.filter         [768]: INFO    [sshd] Found 192.168.10.11 - 2025-04-16 20:05:58
2025-04-16 20:06:03,118 fail2ban.filter         [768]: INFO    [sshd] Found 192.168.10.11 - 2025-04-16 20:06:02
2025-04-16 20:06:14,368 fail2ban.filter         [768]: INFO    [sshd] Found 192.168.10.11 - 2025-04-16 20:06:13
2025-04-16 20:06:14,536 fail2ban.actions        [768]: NOTICE  [sshd] Ban 192.168.10.11

2025年4月16日 20時6分、192.168.10.11からのsshログインに5回失敗したため、Fail2Ban によってブロックされたことが確認できます。

デフォラボ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
目次