
fail2ban を設定するとき、「ban されているかどうかをどうやって確認するか」という問題があります。
Ubuntu 24.04 では fail2ban のデフォルト動作が nftables への直接書き込みになっているため、 sudo ufw status で ban 状況を確認することができません。
この記事では、 UFW と nftables がそれぞれ何者なのかを整理したうえで、「確認したいジェイルだけ banaction = ufw に変更する」という使い分けを紹介します。
UFW と nftables は役割がまったく違う
Linux でファイアウォールの話をするとき、 UFW と nftables という言葉が同時に出てくることがあります。 似たようなものに聞こえますが、役割は根本的に異なります。
nftables は「本体」
nftables は、 Linux カーネル( OS の中核部分)に組み込まれたパケットフィルタリングの仕組みです。
パケットとは、ネットワークを流れるデータのかたまりのことです。 外部からサーバーに届くすべての通信は、このパケットという単位でやり取りされています。
nftables は、このパケットを「通す」「遮断する」をカーネルレベルで直接判断します。 外部から届いたパケットがアプリケーションに渡される前の、 OS の最も深いところで処理が行われるため、処理が速く、セキュリティ上も確実です。
Ubuntu では以前 iptables という仕組みが使われていましたが、 Ubuntu 20.10 以降では nftables がデフォルトになっています。
UFW は「操作画面」
UFW(Uncomplicated Firewall)は、この nftables を人間が扱いやすい形で操作するためのツールです。
nftables を直接操作しようとすると、コマンドの書き方が複雑で難しいです。 UFW が「簡単なコマンドで nftables のルールを設定できる」橋渡し役を担っています。
bashsudo ufw deny 3000
このコマンドを打つと、裏側では nftables に「ポート3000番への通信を遮断せよ」というルールが書き込まれます。
あなたのコマンド(sudo ufw deny 3000)
↓
UFW(コマンドを解釈して nftables に伝える)
↓
nftables(カーネルに直接ルールを書き込む)
↓
Linux カーネル(実際に通信を遮断する)
UFW は「画面」、nftables は「実際に動いている本体」という関係です。
fail2ban のデフォルトは nftables 直接書き込み
fail2ban が IP アドレスを ban するとき、「どの手段でブロックするか」を banaction という設定で指定します。
Ubuntu 24.04 では、 fail2ban のデフォルト banaction は nftables です。
つまり、 banaction を明示しないジェイルは、すべて nftables に直接ルールが書き込まれます。
UFW を経由しない分、処理がシンプルで確実です。 中間層が少ないほど、予期しない動作が起きにくくなります。
ただし、 nftables に直接書き込まれたルールは sudo ufw status のリストには表示されません。
fail2ban が管理するルールと、 UFW が管理するルールは、同じ nftables の中でも別々の領域に書き込まれるためです。
ban 状況を確認したい場合は、 fail2ban 専用のコマンドを使います。
bashsudo fail2ban-client status sshd
bashsudo nft list ruleset
ban 状況を可視化したいジェイルは banaction = ufw にする
fail2ban と UFW はそれぞれ独立した管理になっているため、「一つの場所で ban 状況をまとめて確認したい」という場合には、 banaction = ufw を明示的に設定します。
こうすることで、 fail2ban が ban した IP が UFW のリストにも追加されます。
bashsudo ufw status numbered
このコマンドで、手動でブロックした IP と fail2ban が自動ブロックした IP を、同じリストで確認できるようになります。
私の環境では、既知の悪性 IP を UFW で手動管理しています。
そのため、長期ブロックの対象になる [recidive] ジェイルに banaction = ufw を設定し、同じリストで一元管理できるようにしました。
ini[recidive] enabled = true logpath = /var/log/fail2ban.log bantime = 1w findtime = 3d maxretry = 2 banaction = ufw
[recidive] は3日間に2回 ban された IP を1週間ブロックする、特に悪質な IP を対象とするジェイルです。
このような長期・重大なブロックは、手動ブロックと同じ場所で把握できると管理がしやすくなります。
ジェイルごとの使い分けまとめ
| banaction | 確認方法 | 使いどころ |
|---|---|---|
| デフォルト(nftables) | fail2ban-client status | 短期 ban・大量発生するボット |
| ufw | ufw status numbered | 長期 ban・手動ブロックと一元管理したい IP |
セキュリティの強さはどちらも同じです。
「 ufw status で一覧管理したいかどうか」で使い分けるのが合理的です。
私の環境では、 Nginx 監視用に追加した nginx-limit-req と nginx-botsearch は banaction を明示していません(デフォルトの nftables)。
これらは24時間で解除される短期 ban が主なため、手動管理リストに加えるほどではないと判断したためです。
メインブログの関連記事
fail2ban の具体的な設定手順はメインブログの第18回補足で解説しています。





