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 に戻ってください。ほとんどのタスクはそちらで対応できます。