nftables(iptables)/iproute2 ティップス

UFW(Uncomplicated Firewall)と iptables-nft / nftables の関係について

UFW は iptables または iptables-nft をバックエンドとして使用します。
最近のLinuxディストリビューション(Ubuntu 22.04+、Debian 12+など)では、デフォルトで iptables-nftiptables コマンド互換レイヤー + nftables カーネルAPI)が採用されています。


1. UFW と nftables の互換性

  • UFW は iptables-nft モードで動作する

    • iptables コマンドを実行しても、実際には nftables のルールが生成されます。
    • nft list ruleset で確認すると、UFW のルールが nftables 形式で表示されます。
  • nftables を直接使うと UFW と競合する可能性あり

    • UFW が有効な状態で nft コマンドでルールを追加すると、UFW の再起動時に上書きされることがあります。

2. UFW を使う場合の推奨設定

:white_check_mark: 推奨: UFW のみを使い、nftables は直接触らない

# UFW のルールを確認
sudo ufw status verbose

# UFW で NAT やポート転送を設定
sudo nano /etc/ufw/before.rules
  • /etc/ufw/before.rulesiptables 形式でルールを追加
    • UFW は起動時にこのファイルを読み込み、iptables-nft を通じて nftables に適用します。

例: 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 を併用する場合の注意点

:warning: 競合を避ける方法

  1. UFW で管理しないルールは nftables の永続化設定に追加

    sudo nano /etc/nftables.conf
    
    • UFW が再起動しても消えないようにする。
  2. UFW の設定後に nftables を適用

    sudo systemctl restart ufw
    sudo nft -f /etc/nftables.conf
    
  3. UFW が nftables ルールを上書きしないようにする

    • UFW の設定ファイル (/etc/ufw/*.rules) で必要なルールをすべて定義。

4. 結論: UFW と nftables のどちらを使うべきか?

ケース 推奨方法
シンプルなファイアウォール設定 UFW のみ (iptables-nft をバックエンドで使用)
複雑なルール(NAT、カスタムチェーン) nftables 直接設定 (UFW は無効化)
UFW と nftables を併用 競合に注意 (UFW の before.rules で設定)

:pushpin: 具体的なアドバイス

  • KVM + NAT を使う場合

    • UFW を有効にしたまま、/etc/ufw/before.rules に NAT ルールを追加するのが安全。
    • nftables を直接使う場合は、UFW を無効化 (sudo ufw disable)。
  • UFW を無効化して nftables に移行する場合

    sudo ufw disable
    sudo systemctl enable nftables
    sudo systemctl start nftables
    

5. トラブルシューティング

:small_blue_diamond: UFW と nftables の競合を確認

sudo nft list ruleset | grep -A 10 "hook forward"
sudo ufw status verbose
  • 同じルールが重複してないか確認。

:small_blue_diamond: ログで問題を調査

sudo dmesg | grep ufw
sudo journalctl -u ufw

:small_blue_diamond: ファイアウォールを一時無効化してテスト

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 にルールを追加する方法がおすすめです! :rocket: