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

Linuxサーバーのファイアウォール設定を調べていると、今でもよく出てくるのが iptables です。
一方で、最近のLinux環境では nftables という名前を見る機会も増えています。
そこで気になるのが、次のような疑問です。
「iptablesはもう古いの?」
「これからはnftablesだけ覚えればいいの?」
「既存サーバーをnftablesに移行した方がいいの?」
結論から言うと、iptablesは古い仕組みではありますが、今すぐ完全に不要になるわけではありません。
ただし、新しくLinuxのファイアウォールを学ぶなら、基本的には nftablesを優先して理解するのがおすすめです。
nftablesは、従来の iptables、ip6tables、arptables、ebtables を置き換えるものとしてNetfilter公式でも説明されています。つまり、nftablesはiptables系ツールの後継にあたる位置づけです。(Netfilter)
この記事では、iptablesとnftablesの違い、iptablesが「古い」と言われる理由、そして移行前に確認すべきポイントを初心者向けに解説します。
- iptablesとは?
- nftablesとは?
- iptablesはもう古いのか?
- iptablesとnftablesの違い
- 違い1:コマンド体系が違う
- 違い2:nftablesはtable・chain・ruleで整理する
- 違い3:nftablesはルールをまとめやすい
- 違い4:iptablesコマンドでも中身がnftablesの場合がある
- 移行前に確認すべきこと
- 1. 現在のiptablesバックエンドを確認する
- 2. 現在のiptablesルールを保存する
- 3. nftables側の現在のルールを確認する
- 4. SSHの許可ルールを最優先で確認する
- 5. クラウド側のファイアウォールも確認する
- iptablesからnftablesへの移行イメージ
- 初心者はどちらを覚えるべきか?
- よく使う確認コマンドまとめ
- まとめ
iptablesとは?
iptables は、Linuxで通信の許可・拒否・転送などを設定するために使われてきたファイアウォール管理ツールです。
たとえば、以下のような設定に使われます。
- SSHの22番ポートを許可する
- HTTPの80番ポートを許可する
- HTTPSの443番ポートを許可する
- 特定のIPアドレスからのアクセスを拒否する
- NATやポートフォワーディングを設定する
iptablesとip6tablesは、Linuxカーネル内のIPv4・IPv6パケットフィルタルールを設定・管理・確認するためのツールとして説明されています。(man7.org)
簡単に言えば、iptablesは Linuxサーバーの通信ルールを設定するための昔からある定番ツール です。
たとえば、SSHを許可するiptablesのルールは次のように書きます。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
このようなコマンドを使って、Linuxサーバーに入ってくる通信や外に出ていく通信を制御します。
nftablesとは?
nftables は、iptablesの後継として登場した新しいパケットフィルタリングの仕組みです。
nftablesでは、主に nft コマンドを使ってルールを設定・確認します。Netfilter公式のマニュアルでは、nft はnftablesフレームワークでLinuxカーネル内のパケットフィルタリングや分類ルールを設定・管理・確認するコマンドと説明されています。(Netfilter)
nftablesの特徴は、iptablesよりもルールを整理しやすく、IPv4・IPv6・ARP・ブリッジなどをより統一的に扱いやすい点です。
たとえば、nftablesでSSHを許可するルールは次のように書けます。
nft add rule inet filter input tcp dport 22 accept
iptablesとは書き方が違いますが、目的は同じです。
つまり、どちらもLinuxの通信制御に使うものですが、iptablesが従来方式、nftablesが新方式と考えると理解しやすいです。
iptablesはもう古いのか?
iptablesは、設計としては古い部類に入ります。
nftablesがiptables系ツールを置き換えるものとして登場しているため、今後新しく学ぶならnftablesを優先するのが自然です。Netfilter公式も、nftablesを {ip,ip6,arp,eb}tables の置き換えとして位置づけています。(Netfilter)
ただし、iptablesが今すぐ使えなくなるという意味ではありません。
実務では、今でもiptablesが出てくる場面があります。
たとえば、
- 古いサーバーの設定
- 既存システムの保守
- 古い手順書
- DockerやKubernetes周辺のネットワーク調査
- クラウド環境のトラブルシュート
- レガシーなVPSや社内サーバー
などでは、iptablesの知識が必要になることがあります。
そのため、正確には次のように考えるのがよいです。
iptablesは古いが、まだ知識としては必要
nftablesは新しく、今後優先して学ぶべき仕組み
「iptablesは完全に不要」と考えるのではなく、新規学習はnftables、既存環境の理解にはiptablesも必要という位置づけです。
iptablesとnftablesの違い
iptablesとnftablesの違いを整理すると、以下のようになります。
| 比較項目 | iptables | nftables |
|---|---|---|
| 位置づけ | 従来のファイアウォール管理ツール | iptables系の後継 |
| 主なコマンド | iptables, ip6tables | nft |
| IPv4 / IPv6 | iptables と ip6tables で分かれる | inet familyで統一的に扱いやすい |
| ルール管理 | ルールが増えると複雑になりやすい | setやmapなどで整理しやすい |
| 設定の見通し | コマンド単位で積み上げる印象が強い | table / chain / ruleで構造化しやすい |
| 今後の方向性 | 互換性のために残る場面が多い | 新しい標準的な方向性 |
初心者向けに一言で表すなら、iptablesは昔からの書き方、nftablesは新しく整理された書き方です。
違い1:コマンド体系が違う
iptablesでは、IPv4とIPv6でコマンドが分かれます。
iptables
ip6tables
IPv4のルールは iptables、IPv6のルールは ip6tables で管理します。
一方、nftablesでは主に nft コマンドを使います。
nft
nftablesでは、inet familyを使うことで、IPv4とIPv6をまとめて扱いやすくなります。
例として、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
}
}
このように、nftablesではルール全体を構造として管理しやすくなっています。
違い2:nftablesはtable・chain・ruleで整理する
nftablesでは、主に以下の3つの単位でルールを整理します。
- table
- chain
- rule
nftables公式Wikiでは、tableはchainを入れるコンテナ、chainはruleを入れるコンテナ、ruleはchain内に設定されるアクションとして説明されています。(wiki.nftables.org)
イメージとしては、次のような階層です。
table
└── chain
└── rule
たとえば、
filterテーブルの中に
inputチェインがあり
その中にSSHを許可するルールがある
という考え方です。
iptablesにもtableやchainの概念はありますが、nftablesではより明示的に構造化して設定を書く感覚があります。
違い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:iptablesコマンドでも中身がnftablesの場合がある
ここは初心者が特につまずきやすいポイントです。
最近のLinux環境では、iptables コマンドを使っていても、内部的にはnftablesの仕組みを使っている場合があります。
これは iptables-nft と呼ばれる互換レイヤーです。xtables-nft のマニュアルでは、iptables-nftはnftablesのカーネルAPIを使うiptablesであり、iptables系からnftablesへ移行するための仕組みとして説明されています。(ManKier)
確認するには、次のコマンドを使います。
iptables --version
次のように表示される場合があります。
iptables v1.8.x (nf_tables)
この場合、コマンド名は iptables ですが、バックエンドはnftablesです。
一方、次のように表示される場合もあります。
iptables v1.8.x (legacy)
この場合は、従来のiptablesバックエンドです。
つまり、単に iptables コマンドが存在するからといって、必ずしも旧iptablesだけで動いているとは限りません。
移行前に確認すべきこと
iptablesからnftablesへ移行する前に、いきなり設定を書き換えるのは危険です。
特にリモートサーバーでは、ファイアウォール設定を間違えるとSSHでログインできなくなる可能性があります。
移行前には、最低限以下を確認しましょう。
1. 現在のiptablesバックエンドを確認する
まずは、現在のiptablesがlegacyなのか、nf_tablesなのかを確認します。
iptables --version
nf_tables と表示される場合は、iptablesコマンドを使っていてもnftablesバックエンドです。
iptables v1.8.x (nf_tables)
legacy と表示される場合は、従来のiptablesです。
iptables v1.8.x (legacy)
この確認をせずに移行作業を始めると、現在どの仕組みでルールが動いているのか分からなくなります。
2. 現在のiptablesルールを保存する
移行前には、現在のルールを必ずバックアップしておきます。
iptables-save > iptables-backup.txt
ip6tables-save > ip6tables-backup.txt
NAT設定も含めて確認したい場合は、iptables-save の内容を見ておくことが重要です。
cat iptables-backup.txt
既存のファイアウォール設定を失うと、通信が止まったり、逆に不要なポートを開けてしまったりする可能性があります。
3. nftables側の現在のルールを確認する
nftablesの現在のルールは、次のコマンドで確認できます。
nft list ruleset
すでにnftables側にルールが存在している場合、iptablesから移行するときに競合や重複が起きる可能性があります。
特に、iptables-legacyとnftablesを並行して使うと、どのルールが効いているのか分かりにくくなります。Red Hatの解説でも、legacy iptablesとnftablesのルールセットを並行運用することは診断しにくい問題につながる可能性があり、推奨しにくいものとして説明されています。(Red Hat)
初心者は、iptablesとnftablesを中途半端に混ぜないことを意識した方が安全です。
4. SSHの許可ルールを最優先で確認する
VPSやクラウドサーバーをリモート操作している場合、最も怖いのがSSHで入れなくなることです。
SSHのポートが22番なら、nftablesでは次のように許可します。
nft add rule inet filter input tcp dport 22 accept
ただし、実際には既存のtableやchain構成に合わせて設定する必要があります。
また、SSHポートを変更している場合は、22番ではなく実際に使っているポート番号を許可する必要があります。
たとえば、SSHを2222番で使っているなら次のようになります。
nft add rule inet filter input tcp dport 2222 accept
移行作業では、SSHの許可を確認してから不要な通信を遮断するのが安全です。
5. クラウド側のファイアウォールも確認する
AWS、GCP、Azure、さくらのVPSなどを使っている場合、Linux内部のiptablesやnftables以外にも、クラウド側のファイアウォール設定が存在することがあります。
たとえば、
- AWSのセキュリティグループ
- GCPのVPCファイアウォール
- AzureのNSG
- VPS管理画面のパケットフィルタ
- サーバー前段のロードバランサー設定
などです。
Linux上でnftablesを正しく設定しても、クラウド側で通信がブロックされていればアクセスできません。
逆に、Linux上で閉じたつもりでも、別の経路や設定が残っていると意図しない通信が通る可能性もあります。
移行時は、OS内のファイアウォールとクラウド側のファイアウォールを分けて確認しましょう。
iptablesからnftablesへの移行イメージ
iptablesからnftablesへ移行するときの大まかな流れは次の通りです。
1. 現在のiptablesルールを確認する
2. iptables-saveでバックアップする
3. nft list rulesetでnftables側の状態を確認する
4. 既存ルールをnftables形式に変換・再設計する
5. 検証環境で動作確認する
6. 本番環境ではSSH切断リスクに注意して反映する
7. 不要なiptables legacyルールとの混在を避ける
nftables公式Wikiにも、iptables/xtablesの古い世界からnftablesへ移行するためのページが用意されており、移行を支援するツールや仕組みが案内されています。(wiki.nftables.org)
ただし、自動変換ツールを使えば完全に安全というわけではありません。
iptablesのルールをnftablesに変換できたとしても、実際の通信要件に合っているかは別問題です。
特に以下のような設定がある場合は注意が必要です。
- NAT
- ポートフォワーディング
- Dockerのネットワーク
- VPN
- ロードバランサー配下のサーバー
- Kubernetesノード
- 複雑な社内ネットワーク
- 複数NICを持つサーバー
このような環境では、単純なコマンド変換ではなく、通信経路全体を見直す必要があります。
初心者はどちらを覚えるべきか?
これからLinuxのファイアウォールを学ぶなら、基本的には nftablesを優先 するのがおすすめです。
理由はシンプルで、nftablesがiptables系の後継として位置づけられているからです。(Netfilter)
ただし、iptablesも最低限は読めるようにしておくべきです。
現場では、古い記事・古い手順書・既存サーバーの設定にiptablesが残っていることがあります。
おすすめの学習順は次の通りです。
1. まずLinuxの通信制御の基本を理解する
2. INPUT / OUTPUT / FORWARD の考え方を知る
3. iptablesの基本的な読み方を知る
4. nftablesのtable / chain / ruleを学ぶ
5. 新規設定ではnftablesを使う
6. 既存環境ではiptablesとの関係を確認する
特に初心者の場合、最初から細かい構文を丸暗記するよりも、まずは以下の考え方を押さえる方が重要です。
どの通信を
どの方向で
どの条件に一致したら
許可するのか、拒否するのか
iptablesでもnftablesでも、この基本は変わりません。
よく使う確認コマンドまとめ
最後に、iptablesとnftablesを扱うときによく使う確認コマンドをまとめます。
iptablesのバージョン確認
iptables --version
iptablesルールの確認
iptables -L -n -v
iptablesルールの保存
iptables-save
IPv6側のiptablesルール保存
ip6tables-save
nftablesルールの確認
nft list ruleset
nftablesでSSHを許可する例
nft add rule inet filter input tcp dport 22 accept
nftablesでHTTP/HTTPSを許可する例
nft add rule inet filter input tcp dport 80 accept
nft add rule inet filter input tcp dport 443 accept
まとめ
iptablesは、Linuxのファイアウォール管理で長く使われてきた定番ツールです。
一方で、nftablesはiptables系ツールの後継として登場した新しい仕組みです。Netfilter公式でも、nftablesは従来の ip、ip6、arp、ebtables を置き換えるものとして説明されています。(Netfilter)
この記事のポイントをまとめると、次の通りです。
- iptablesは従来から使われてきたファイアウォール管理ツール
- nftablesはiptables系の後継にあたる新しい仕組み
- iptablesは古いが、既存環境ではまだ出番がある
- 新しく学ぶならnftablesを優先するのがおすすめ
iptables --versionでnf_tablesかlegacyかを確認できる- 移行前には
iptables-saveとnft list rulesetで現状確認する - iptables-legacyとnftablesの混在は避けた方が安全
- リモートサーバーではSSHを遮断しないように注意する
結論として、iptablesは「もう古い」と言ってよい部分はありますが、「もう知らなくていい」とは言えません。
これから新しくLinuxのファイアウォールを学ぶならnftablesを中心に学びつつ、既存環境を読むためにiptablesの基本も押さえておく。
このバランスが、実務では一番現実的です。

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



コメント