Skip to content
VDS · ネットワーク、IPアドレス、ドメイン

nftables:より複雑なルール

ufwでは不十分な場合に向けて、nftablesのテーブルとチェーンの構造、すぐに使える実用的な設定、アドレスセット、レート制限、ポートフォワーディングを説明します。

更新日 2026年8月23日

nftables は ufw がその上で動作しているカーネル機構そのものです。名前付きアドレスセット、レート制限、インターフェースごとに異なるポリシー、ポート転送などが必要な場合、つまりルールが「ポートを許可する」という枠に収まらなくなったときは、これを直接使うべきです。

両方のツールを同時に使う必要はありません。切り替える前に ufw disable で ufw を無効にしてください。そうしないとルールが重複し、デバッグ中に混乱します。

構造

ルールはテーブルにあり、テーブルはチェーンを含み、チェーンはルールを含みます。チェーンはパケット処理段階(input、forward、output)に紐付けられ、デフォルトポリシーを持ちます。

apt install -y nftables
systemctl enable --now nftables
nft list ruleset

実用的な設定

ファイル /etc/nftables.conf:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    set admins {
        type ipv4_addr
        elements = { 203.0.113.5, 198.51.100.7 }
    }

    chain input {
        type filter hook input priority 0; policy drop;

        iif lo accept
        ct state established,related accept
        ct state invalid drop

        ip protocol icmp icmp type echo-request limit rate 5/second accept

        tcp dport 22 ip saddr @admins accept
        tcp dport 22 ct state new limit rate 6/minute accept
        tcp dport { 80, 443 } accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

適用して保存:

nft -c -f /etc/nftables.conf
nft -f /etc/nftables.conf
systemctl restart nftables

-c フラグはルールを適用せずに構文だけをチェックします。常に使用してください。タイプミスのある drop ポリシーはアクセスを遮断してしまい、/hosting/vds/m/<id> パネルのコンソールから復旧しなければならなくなります。

アドレスセットとレート制限

名前付きセットはルールを再読み込みせずにオンザフライで編集できます:

nft add element inet filter admins { 192.0.2.10 }
nft delete element inet filter admins { 198.51.100.7 }
nft list set inet filter admins

タイムアウト付きの動的セットはカスタムブロックに便利です:

set blocked {
    type ipv4_addr
    flags timeout
    timeout 1h
}

転送とアドレス置換

コンテナやトンネルを内部で実行している場合に必要です:

table ip nat {
    chain prerouting {
        type nat hook prerouting priority -100;
        tcp dport 8443 dnat to 10.10.0.2:443
    }
    chain postrouting {
        type nat hook postrouting priority 100;
        oifname "eth0" masquerade
    }
}

よくある間違い

間違い結果解決策
ct state established ルールがない発信リクエストへの応答が遮断される最初のルールとして追加する
iif lo accept を忘れたローカルサービスとデータベースが壊れるループバックインターフェースを許可する
ルールを適用したが保存していない再起動後にすべてが開放される/etc/nftables.conf に書き込む
ufw と nftables の併用予測不能な結果ツールを1つだけにする

新しいルールセットは、作業中のセッションを閉じずに別のセッションでテストしてください。簡単な安全策として、バックグラウンドで sleep 300 && nft flush ruleset を実行します。ロックアウトしても、アクセスは自動的に戻ります。

これらの詳細が不要な場合は、ufw に戻ってください。ほとんどのタスクはそちらで対応できます。