この記事の最終更新日: 2025年5月22日
はじめに
インターネットに公開したUbuntuサーバーは、不正ログインやブルートフォース攻撃(総当たり攻撃)の標的になりがちです。これらの攻撃は、無作為にIDとパスワードの組み合わせを試すことで不正アクセスを狙うもので、日々膨大な数が実行されています。
こうした脅威からサーバーを守るために使われるのが fail2ban です。fail2banは、ログファイルを監視し、不審なアクセス(例:ログイン失敗を繰り返すIPアドレス)を検出して、該当IPを自動的にファイアウォール経由で一時的にブロックするセキュリティツールです。
この記事では、fail2banの基本的な仕組み、Ubuntuでのインストールと設定方法、よく使うコマンドなどを、初心者でも理解しやすいように丁寧に解説します。

1. fail2banの仕組み(基本構造と役割)
fail2banは以下の3つのコンポーネントによって構成されています。
- Filter(フィルタ)
ログファイル内の特定パターン(例:SSHログイン失敗)を見つけるための条件を定義します。これは正規表現(特定の文字列パターンを見つけるための記述法)で記述されます。 - Action(アクション)
フィルタによって「攻撃」と判断されたIPアドレスに対して、どのように対処するかを定義します。たとえば、iptablesやUFWを用いてそのIPを一定時間ブロック(BAN)するなどの処理です。 - Jail(ジャイル)
フィルタとアクションを組み合わせ、どのサービス(SSH、Apacheなど)をどのログで監視するか、何回失敗したら、どのくらいの時間ブロックするかを設定します。fail2banにおける「ルールセット」のようなものです。
fail2banはPythonで開発されており、設定ファイルは以下のような場所にあります:
/etc/fail2ban/filter.d/
:フィルタ(ログから不正アクセスの兆候を見つけるための定義)/etc/fail2ban/action.d/
:アクション(不審なIPに対して実行する操作)/etc/fail2ban/jail.d/
または/etc/fail2ban/jail.conf
:各サービスに対するfail2banの設定(jail)
2. インストールと基本操作(Ubuntu)
2.1 インストール手順
fail2banはUbuntuの公式パッケージリポジトリに含まれており、以下のコマンドで簡単にインストールできます:
sudo apt update
sudo apt install fail2ban
インストール完了後、自動的にfail2banのサービスが起動します。
sudo systemctl status fail2ban
「Active: active (running)」と表示されていれば正常に稼働中です。
2.2 バージョンの確認
fail2ban-client --version
3. 設定ファイルの構成とカスタマイズ
3.1 各種設定ファイルの場所と役割
ファイルパス | 内容 |
---|---|
/etc/fail2ban/fail2ban.conf | fail2banのメイン設定ファイル(通常は変更不要) |
/etc/fail2ban/jail.conf | 全体のjail設定(編集せず、コピーしてjail.localなどで編集) |
/etc/fail2ban/jail.d/ | jail設定を個別ファイルで管理するディレクトリ(推奨) |
/etc/fail2ban/filter.d/ | ログパターンの検出用フィルタ定義 |
3.2 SSH保護の設定例
以下のように設定することで、SSHに対する不正アクセスを検出・防止できます。
# /etc/fail2ban/jail.d/ssh.conf
[sshd]
enabled = true # 監視を有効にする port = ssh # 対象ポート(通常22) filter = sshd # 使用するフィルタ(sshd.conf) logpath = /var/log/auth.log # 監視対象のログファイル maxretry = 5 # 許容するログイン失敗回数 findtime = 600 # 上記回数を何秒以内に検知するか bantime = 600 # ブロックする時間(秒) action = iptables-multiport[name=SSH, port=”ssh”] # 実行アクション
3.3 設定の再読み込み
設定を変更した後は、fail2banサービスを再起動または再読み込みして反映させます。
sudo systemctl reload fail2ban
# または
sudo systemctl restart fail2ban
4. fail2ban-clientを使った操作方法
fail2banにはコマンドラインツール fail2ban-client
があり、状況確認や手動操作ができます。
4.1 現在動作中のjailの確認
sudo fail2ban-client status
4.2 特定jailの状態を確認する
sudo fail2ban-client status sshd
出力例:
[sshd]
|- Filter
| |- Currently failed: 0
...
|- Action
|- Currently banned: 2
|- Banned IP list: 203.0.113.10, 198.51.100.5
4.3 BANされたIPアドレスを解除する
sudo fail2ban-client set sshd unbanip 198.51.100.5
4.4 フィルタの動作をテストする
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
これは、指定されたログファイルに対して指定したフィルタが適切にマッチしているかを検証するコマンドです。
5. 代表的なjail設定の例
fail2banはSSH以外にも、Webサーバーやメールサーバーのログを監視できます。
サービス | jail設定ファイル例 | 監視ログファイル |
---|---|---|
SSH | /etc/fail2ban/jail.d/ssh.conf | /var/log/auth.log |
Nginx HTTP | /etc/fail2ban/jail.d/nginx-http.conf | /var/log/nginx/access.log |
Postfix | /etc/fail2ban/jail.d/postfix.conf | /var/log/mail.log |
Nginxのアクセス制限設定例:
[nginx-http]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 600
bantime = 3600
6. まとめ
- fail2banは、不正アクセスをログから検出し、自動で攻撃元IPをブロックするツールです。
- Ubuntuでは
apt install
で簡単に導入でき、設定も柔軟です。 - SSHだけでなく、Webサーバーやメールサーバーなど幅広いサービスに対応できます。
- 設定後は
fail2ban-client
を使って、動作状況やBANリストの確認・解除ができます。
FAQ
Q1. UFWやiptablesと併用できますか?
A. はい。fail2banは内部的にiptablesやUFWのコマンドを実行してIPアドレスをブロックするため、併用に問題はありません。
Q2. bantimeを永久にしたいときは?
A. bantime = -1
と設定すれば、ブロックは自動解除されず、手動で解除するまで続きます。
Q3. フィルタをカスタマイズしたいときは?
A. /etc/fail2ban/filter.d/
にある既存の .conf
ファイルをベースに、正規表現などを編集してオリジナルの検出ルールを作成できます。

大阪のエンジニアが書いているブログ。
コメント