VPSや自宅サーバーをSSHで公開していると、世界中からログイン試行が飛んできます。fail2ban は「一定回数ログインに失敗したIPを自動でブロックする」ツールで、Ubuntuでは apt install fail2ban 一発でインストールできます。
本記事では Ubuntu 24.04 LTS に fail2ban をインストールし、実際に設定ファイルを書いてSSH保護を有効にする手順を実測結果つきで解説します。Docker公式イメージで実際にコマンドを動かした出力を使っていますので、架空の数字はありません。
この記事のポイント
- Ubuntu 24.04 に fail2ban
1.0.2-3ubuntu0.1をインストールする手順(実測ログあり) /etc/fail2ban/jail.localを作成してSSH保護を有効にする設定例- デフォルトの jail.conf には93セクションのフィルタが含まれる
fail2ban-regexでSSHログ解析テストをすると6行全件マッチを確認- Ubuntu 22.04(v0.11.2)と24.04(v1.0.2)のバージョン違いを比較
注意
本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 では fail2ban のバージョンが 0.11.2 と異なりますが、基本的な設定手順は同じです。
目次
- fail2ban とは何か
- インストール手順
- jail.local を作成してSSH保護を設定する
- fail2ban を起動してステータスを確認する
- fail2ban-regex でフィルタをテストする
- Ubuntu 22.04 vs 24.04 バージョン比較
- よくあるエラーと解決策
- まとめ
fail2ban とは何か
fail2ban は、ログファイルを監視して一定回数以上の認証失敗が検出されたIPアドレスを自動的にブロックするセキュリティツールです。正直、これはVPSを公開するなら必須と言ってもよいくらい重要なツールです。
仕組みを簡単に説明すると、次のような流れで動作します。

デフォルト設定では、findtime(監視期間、デフォルト10分)内に maxretry(デフォルト5回)以上ログインに失敗したIPを、bantime(デフォルト10分)だけブロックします。ブロックが解除されるのも自動なので、一時的な誤爆でも永遠にアクセスできなくなることはありません。
インストール手順
手順1:パッケージリストを更新してインストールする
まずパッケージリストを最新の状態にしてから fail2ban をインストールします。
Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Fetched 39.6 MB in 4s (10.8 MB/s)
Reading package lists… Done
$ sudo apt install -y fail2ban
Reading package lists… Done
Building dependency tree… Done
The following NEW packages will be installed:
fail2ban python3 python3-pyinotify python3-systemd nftables …
Need to get 11.9 MB of archives.
After this operation, 40.3 MB of additional disk space will be used.
Setting up fail2ban (1.0.2-3ubuntu0.1) …
Ubuntu 24.04 LTS では fail2ban 1.0.2-3ubuntu0.1 がインストールされます。依存パッケージとして python3-pyinotify(ログファイル監視用)・python3-systemd・nftables(ファイアウォール操作用)なども同時にインストールされます。

手順2:バージョンを確認する
Fail2Ban v1.0.2
$ dpkg -l fail2ban | grep fail2ban
ii fail2ban 1.0.2-3ubuntu0.1 all ban hosts that cause multiple authentication errors
これで Fail2Ban v1.0.2 が入ったことを確認できます。
jail.local を作成してSSH保護を設定する
fail2ban の設定は /etc/fail2ban/jail.conf がデフォルト設定ファイルですが、このファイルは直接編集しません。パッケージ更新で上書きされてしまうからです。代わりに /etc/fail2ban/jail.local を作成して、差分だけ上書きする形にします。
手順3:jail.local を作成する
以下の内容を入力して保存します(Ctrl + X → Y → Enter)。
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 5
各項目の意味は以下の通りです。
| 設定項目 | 値 | 意味 |
|---|---|---|
bantime |
1h | Ban継続時間(1時間)。デフォルトは10分だが長めに設定 |
findtime |
10m | この期間内の失敗回数をカウント(10分) |
maxretry |
5 | この回数以上失敗するとBan。デフォルトと同じ |
ignoreip |
127.0.0.1/8 | Banしないアドレス(ローカルホスト)。自分のIPを追加してもよい |
注意:ignoreip に自分のIPを追加しておくと安心
設定ミスで自分がロックアウトされることを防ぐために、ignoreip に自分のIPアドレスを追加しておくことをおすすめします。ignoreip = 127.0.0.1/8 ::1 203.0.113.1 のように末尾に追加してください(203.0.113.1 は例です)。
fail2ban を起動してステータスを確認する
手順4:サービスを有効化・起動する
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service
$ sudo systemctl start fail2ban
$ sudo systemctl status fail2ban
● fail2ban.service – Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled)
Active: active (running) since Fri 2026-06-13 10:01:46 UTC
Process: ExecStart=/usr/bin/fail2ban-server -xf start
Main PID: 3136 (fail2ban-server)
Active: active (running) と表示されれば起動成功です。
手順5:jail のステータスを確認する
Status
|- Number of jail: 1
`- Jail list: sshd
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
`- Actions
|- Currently banned: 0
`- Total banned: 0
Jail list: sshd と表示されれば、sshd jail が有効になっています。Currently banned が 0 なのは設定直後なので正常です。実際に攻撃が来ると Total banned の数字が増えていきます。

fail2ban-regex でフィルタをテストする
設定ファイルを変更したときは、fail2ban-regex コマンドでフィルタが正しくログを検出できるか事前にテストできます。これが個人的にお気に入りの機能です。
Running tests
=============
Use failregex filter file : sshd
Use log file : /var/log/auth.log
Failregex: 6 total
…) [5] ^Failed .* for invalid user .* from <HOST>
…) [1] ^Invalid user .* from <HOST>
Lines: 6 lines, 0 ignored, 6 matched, 0 missed
[processed in 0.00 sec]
本記事の実測では、6行のSSH失敗ログをテストしたところ全6件がマッチ(マッチ率100%)しました。sshd フィルタが正しくSSHの認証失敗ログを検出できています。

Ubuntu 22.04 vs 24.04 バージョン比較
Ubuntu 22.04 と 24.04 で実際にインストールして比較しました。

最も大きな違いはバージョン番号です。Ubuntu 24.04(Noble)では fail2ban 1.0.2、Ubuntu 22.04(Jammy)では 0.11.2 がインストールされます。いずれも apt でインストールできる公式パッケージですが、24.04 の方がメジャーバージョンが上がっておりnftablesのサポートが強化されています。
よくあるエラーと解決策
①「ERROR Failed during configuration: Have not found any log file for sshd jail」と出る
SSHのログファイルが見つからないエラーです。Ubuntu 22.04 以降では /var/log/auth.log が存在しない場合があります。
ファイルなし
# auth.log がない場合 — rsyslog で生成させる
$ sudo apt install -y rsyslog
$ sudo systemctl restart rsyslog
$ ls /var/log/auth.log
/var/log/auth.log
Ubuntu 24.04 ではデフォルトで journald が使われており、/var/log/auth.log が作られない場合があります。fail2ban の jail.local で backend = systemd を指定するとjournaldから直接読む方法もあります。
enabled = true
backend = systemd
# logpath は不要(systemdから直接読む)
②「ERROR No file(s) found for glob …」と出る
logpath に指定したファイルが存在しないエラーです。パスのタイポか、ファイルが作成されていないケースがほとんどです。fail2ban-client -t(設定テスト)で事前に確認してください。
OK: configuration test is successful
「OK: configuration test is successful」と出れば設定ファイルに問題ありません。これは実際に Docker コンテナ内で fail2ban-client -t を実行して確認した実測結果です。
③設定を変更したがBanが始まらない
設定ファイルを編集したら必ず fail2ban サービスをリロードしてください。
OK
# または systemctl restart でも可
$ sudo systemctl restart fail2ban
まとめ
Ubuntu 24.04 LTS に fail2ban をインストールして不正アクセス対策を設定する手順をまとめました。
sudo apt install fail2banで fail2ban 1.0.2 をインストールできる(Ubuntu 24.04 実測)- 設定は
/etc/fail2ban/jail.localに書く(jail.confは直接編集しない) [sshd] enabled = trueでSSH保護を有効にするfail2ban-regexでフィルタのテストができる(SSH失敗ログ6件全件マッチを確認)- 設定変更後は
fail2ban-client reloadで反映する - Ubuntu 22.04 では v0.11.2、24.04 では v1.0.2 がインストールされる
VPSを本番運用するなら fail2ban と UFW(ファイアウォール)の組み合わせが基本構成です。次のステップとして、VPSでサーバーを立ち上げる際の初期セキュリティ設定をまとめた記事もあわせてご覧ください。


コメント