この記事の最終更新日: 2026年5月27日

Linuxサーバーのファイアウォール設定を調べていると、よく出てくるのが iptables と nftables です。
どちらも通信を制御するための仕組みですが、
「iptablesとnftablesは何が違うの?」
「iptablesはもう使わない方がいいの?」
「nftablesに移行しないといけないの?」
と迷う人も多いと思います。
結論から言うと、iptablesは従来から使われてきたLinuxのファイアウォール操作ツールで、nftablesはその後継にあたる新しい仕組みです。Netfilter公式でも、nftablesは {ip,ip6,arp,eb}tables を置き換えるものとして説明されています。(Netfilter)
この記事では、Linux初心者向けに nftablesとiptablesの違いをわかりやすく解説します。
iptablesとは?
iptables は、Linuxでパケットフィルタリング、つまり通信の許可・拒否・転送などを設定するために使われてきたコマンドです。
たとえば、以下のような制御ができます。
- SSHの22番ポートだけ許可する
- 特定のIPアドレスからのアクセスを拒否する
- Webサーバー用に80番・443番ポートを開ける
- NATやポートフォワーディングを設定する
iptablesとip6tablesは、Linuxカーネル内のIPv4・IPv6パケットフィルタルールを設定・管理・確認するためのツールとして説明されています。(man7.org)
簡単に言うと、iptablesは 「Linuxサーバーの通信ルールを設定するための昔からある定番ツール」 です。
nftablesとは?
nftables は、iptablesの後継として登場した新しいパケットフィルタリングの仕組みです。
nftablesでは、主に nft コマンドを使ってルールを設定します。公式マニュアルでも、nft はnftablesフレームワークでパケットフィルタリングや分類ルールを設定・管理・確認するためのコマンドと説明されています。(Netfilter)
iptablesでは、IPv4用の iptables、IPv6用の ip6tables、ARP用の arptables、ブリッジ用の ebtables など、用途ごとにツールが分かれていました。
一方、nftablesではこれらをより統一的に扱えるようになっています。
つまりnftablesは、ざっくり言えば 「iptablesより新しく、より整理されたLinuxファイアウォールの仕組み」 です。
nftablesとiptablesの主な違い
nftablesとiptablesの違いをまとめると、以下のようになります。
| 比較項目 | iptables | nftables |
|---|---|---|
| 登場時期 | 以前から使われている従来方式 | iptablesの後継として登場 |
| 主なコマンド | iptables, ip6tables | nft |
| IPv4 / IPv6 | コマンドが分かれる | 統一的に扱いやすい |
| ルールの書き方 | 比較的固定的 | 柔軟に書ける |
| 管理しやすさ | ルールが増えると複雑になりやすい | ルールを整理しやすい |
| 現在の位置づけ | 互換性のために残っていることが多い | 今後の標準的な方向性 |
初心者向けに一言で言うなら、iptablesは旧方式、nftablesは新方式です。
ただし、iptablesがすぐに完全に使えなくなるという意味ではありません。既存のサーバーや古い手順書では、今でもiptablesの設定例が多く見つかります。
違い1:使うコマンドが違う
iptablesでは、次のように書きます。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
これは、TCPの22番ポート、つまりSSH接続を許可する例です。
一方、nftablesでは次のような書き方になります。
nft add rule inet filter input tcp dport 22 accept
同じようにSSHを許可するルールでも、コマンドの書き方が変わります。
iptablesでは iptables コマンドを使い、nftablesでは nft コマンドを使う、と覚えるとわかりやすいです。
違い2:iptablesはツールが分かれていた
iptables系では、対象によってコマンドが分かれていました。
たとえば、
iptables
ip6tables
arptables
ebtables
のように、IPv4、IPv6、ARP、ブリッジなどで別々のツールを使うことがありました。
nftablesでは、これらをより統一的に扱えるように設計されています。Netfilter公式でも、nftablesは従来の {ip,ip6,arp,eb}tables を置き換えるものとして説明されています。(Netfilter)
この点が、nftablesが「iptablesの後継」と言われる大きな理由です。
違い3:nftablesはルールを整理しやすい
iptablesでは、ルールが増えてくると管理が難しくなりがちです。
たとえば、特定の複数IPを許可したい場合、iptablesでは似たようなルールを何行も書くことがあります。
iptables -A INPUT -s 192.168.1.10 -j ACCEPT
iptables -A INPUT -s 192.168.1.11 -j ACCEPT
iptables -A INPUT -s 192.168.1.12 -j ACCEPT
nftablesでは、setという仕組みを使って、複数の値をまとめて扱いやすくなっています。
nft add set inet filter allowed_ips { type ipv4_addr\; }
nft add element inet filter allowed_ips { 192.168.1.10, 192.168.1.11, 192.168.1.12 }
このように、ルールを構造化しやすいのがnftablesの特徴です。
初心者のうちは少し難しく見えますが、実務ではルールが増えたときにnftablesの方が整理しやすくなります。
違い4:nftablesにはtable・chain・ruleがある
nftablesを理解するうえで重要なのが、以下の3つです。
- table
- chain
- rule
nftables公式のクイックリファレンスでは、tableはchainを入れるコンテナ、chainはruleを入れるコンテナ、ruleはchain内に設定されるアクションとして説明されています。(wiki.nftables.org)
かなり簡単に言うと、次のようなイメージです。
table
└── chain
└── rule
たとえば、nftablesでは次のような構造で設定します。
table inet filter {
chain input {
type filter hook input priority 0;
policy drop;
tcp dport 22 accept
tcp dport 80 accept
tcp dport 443 accept
}
}
この例では、
table inet filterがルール全体の入れ物chain inputが受信パケットを処理する場所tcp dport 22 acceptなどが具体的なルール
です。
iptablesにもtableやchainの考え方はありますが、nftablesではより明示的に構造化して書く感覚があります。
違い5:iptablesコマンドでも中身がnftablesの場合がある
ここが少しややこしいポイントです。
最近のLinux環境では、iptables コマンドを使っていても、内部的にはnftablesの仕組みを使っている場合があります。
これは iptables-nft という互換レイヤーによるものです。xtables-nft のマニュアルでは、iptables-nftはnftables APIを使うiptablesのバージョンであり、iptables系からnftablesへ移行するためのツール群として説明されています。(man7.org)
つまり、見た目はiptablesコマンドでも、裏側ではnftablesを使っていることがあります。
確認するには、次のコマンドを使います。
iptables --version
表示例として、次のように出ることがあります。
iptables v1.8.x (nf_tables)
この場合、iptablesコマンドを使っていますが、バックエンドはnftablesです。
一方で、次のように表示されることもあります。
iptables v1.8.x (legacy)
この場合は、従来のiptablesバックエンドを使っています。
初心者はiptablesとnftablesのどちらを覚えるべき?
これから新しくLinuxのファイアウォールを学ぶなら、基本的には nftablesを優先して覚えるのがおすすめです。
理由は、nftablesがiptablesの後継として位置づけられているからです。
ただし、iptablesを完全に無視してよいわけではありません。
実務では、まだiptablesの設定例や古いサーバーが残っていることがあります。そのため、最低限はiptablesの読み方も知っておくと役に立ちます。
おすすめの学習順は次の通りです。
1. まずファイアウォールの基本を理解する
2. iptablesの基本概念を軽く知る
3. 新しく設定する場合はnftablesを学ぶ
4. 既存環境では、そのサーバーがiptablesなのかnftablesなのか確認する
特に業務でLinuxサーバーを触る場合は、いきなり設定を変更するのではなく、まず現在の状態を確認することが重要です。
よく使う確認コマンド
iptablesのルールを確認するには、次のコマンドを使います。
iptables -L -n -v
nftablesのルールを確認するには、次のコマンドを使います。
nft list ruleset
現在の環境がiptables-nftかiptables-legacyかを確認するには、次のコマンドを使います。
iptables --version
表示に nf_tables と出れば、nftablesバックエンドを使っています。
iptables v1.8.x (nf_tables)
表示に legacy と出れば、従来のiptablesバックエンドです。
iptables v1.8.x (legacy)
iptablesからnftablesへ移行するときの注意点
iptablesからnftablesへ移行するときは、単純にコマンドを書き換えるだけでは済まない場合があります。
特に注意したいのは、以下の点です。
1. 既存ルールを必ず確認する
まずは現在のiptablesルールを確認します。
iptables-save
nftables側は次のコマンドで確認します。
nft list ruleset
既存のルールを把握せずに変更すると、SSH接続が切れたり、Webサーバーにアクセスできなくなったりする可能性があります。
2. iptablesとnftablesを混在させない
iptables-legacy、iptables-nft、nftablesが混在すると、どのルールが実際に効いているのか分かりにくくなります。
特に初心者は、1つのサーバー内でiptablesとnftablesを中途半端に混ぜない方が安全です。
3. リモートサーバーでは慎重に作業する
VPSやクラウドサーバーでファイアウォール設定を変更するときは、SSHの許可設定を間違えるとログインできなくなることがあります。
最低限、SSHポートを許可してから設定を反映しましょう。
nft add rule inet filter input tcp dport 22 accept
また、クラウド側のセキュリティグループやファイアウォール機能がある場合は、Linux内のnftablesだけでなく、クラウド側の設定も確認する必要があります。
nftablesとiptablesの関係をたとえるなら
初心者向けにたとえるなら、iptablesとnftablesの関係は、古い設定ツールと新しい設定ツールの関係です。
たとえば、次のようなイメージです。
iptables = 古くから使われている設定方法
nftables = 新しく整理された設定方法
どちらもLinuxの通信制御に関係していますが、nftablesの方が新しい設計で、より柔軟にルールを管理できます。
ただし、古い記事・古いサーバー・既存システムではiptablesが出てくることも多いです。
そのため、
新しく覚えるなら nftables
既存環境を読むなら iptables も必要
と考えるとわかりやすいです。
まとめ
nftablesとiptablesの違いをまとめると、以下の通りです。
- iptablesは、従来から使われてきたLinuxのファイアウォール設定ツール
- nftablesは、iptablesの後継として登場した新しい仕組み
- iptablesでは、IPv4・IPv6などでコマンドが分かれていた
- nftablesでは、
nftコマンドでより統一的に管理できる - 最近の環境では、iptablesコマンドを使っていても内部的にはnftablesの場合がある
- 新しく学ぶならnftablesを優先するのがおすすめ
- 既存サーバーを扱うならiptablesの基本も知っておくべき
初心者がまず押さえるべきポイントは、iptablesは旧方式、nftablesは新方式という理解です。
ただし、実務ではiptablesの知識がまだ役に立つ場面も多いため、nftablesだけを覚えるのではなく、iptablesとの関係もセットで理解しておくと安心です。
Linuxサーバーのファイアウォール設定を安全に扱うためには、まず現在の環境がiptablesなのか、nftablesなのか、あるいはiptables-nftなのかを確認するところから始めましょう。

大阪のエンジニアが書いているブログ。



コメント