UFW(Uncomplicated Firewall)と iptables-nft / nftables の関係について
UFW は iptables または iptables-nft をバックエンドとして使用します。
最近のLinuxディストリビューション(Ubuntu 22.04+、Debian 12+など)では、デフォルトで iptables-nft(iptables コマンド互換レイヤー + nftables カーネルAPI)が採用されています。
1. UFW と nftables の互換性
-
UFW は
iptables-nftモードで動作するiptablesコマンドを実行しても、実際にはnftablesのルールが生成されます。nft list rulesetで確認すると、UFW のルールがnftables形式で表示されます。
-
nftablesを直接使うと UFW と競合する可能性あり- UFW が有効な状態で
nftコマンドでルールを追加すると、UFW の再起動時に上書きされることがあります。
- UFW が有効な状態で
2. UFW を使う場合の推奨設定
推奨: UFW のみを使い、nftables は直接触らない
# UFW のルールを確認
sudo ufw status verbose
# UFW で NAT やポート転送を設定
sudo nano /etc/ufw/before.rules
/etc/ufw/before.rulesにiptables形式でルールを追加- UFW は起動時にこのファイルを読み込み、
iptables-nftを通じてnftablesに適用します。
- UFW は起動時にこのファイルを読み込み、
例: NAT 設定 (/etc/ufw/before.rules)
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.100.0/24 ! -d 192.168.100.0/24 -j MASQUERADE
COMMIT
3. UFW と nftables を併用する場合の注意点
競合を避ける方法
-
UFW で管理しないルールは
nftablesの永続化設定に追加sudo nano /etc/nftables.conf- UFW が再起動しても消えないようにする。
-
UFW の設定後に
nftablesを適用sudo systemctl restart ufw sudo nft -f /etc/nftables.conf -
UFW が
nftablesルールを上書きしないようにする- UFW の設定ファイル (
/etc/ufw/*.rules) で必要なルールをすべて定義。
- UFW の設定ファイル (
4. 結論: UFW と nftables のどちらを使うべきか?
| ケース | 推奨方法 |
|---|---|
| シンプルなファイアウォール設定 | UFW のみ (iptables-nft をバックエンドで使用) |
| 複雑なルール(NAT、カスタムチェーン) | nftables 直接設定 (UFW は無効化) |
UFW と nftables を併用 |
競合に注意 (UFW の before.rules で設定) |
具体的なアドバイス
-
KVM + NAT を使う場合
- UFW を有効にしたまま、
/etc/ufw/before.rulesに NAT ルールを追加するのが安全。 nftablesを直接使う場合は、UFW を無効化 (sudo ufw disable)。
- UFW を有効にしたまま、
-
UFW を無効化して
nftablesに移行する場合sudo ufw disable sudo systemctl enable nftables sudo systemctl start nftables
5. トラブルシューティング
UFW と nftables の競合を確認
sudo nft list ruleset | grep -A 10 "hook forward"
sudo ufw status verbose
- 同じルールが重複してないか確認。
ログで問題を調査
sudo dmesg | grep ufw
sudo journalctl -u ufw
ファイアウォールを一時無効化してテスト
sudo ufw disable
sudo nft flush ruleset
sudo systemctl stop nftables
- これで接続できるようになれば、ファイアウォール設定が原因。
まとめ
- UFW を使う場合 →
iptables-nftをバックエンドとして利用し、/etc/ufw/before.rulesで設定。 nftablesを直接使う場合 → UFW は無効化し、/etc/nftables.confで管理。- 競合を避ける → どちらか一方をメインに使うのが安全。
KVM の NAT 設定では、UFW の before.rules にルールを追加する方法がおすすめです! ![]()