8.2. iptables から nftables への移行
ファイアウォール設定が依然として iptables
ルールを使用している場合は、iptables
ルールを nftables
に移行できます。
8.2.1. firewalld、nftables、または iptables を使用する場合
以下は、次のユーティリティーのいずれかを使用する必要があるシナリオの概要です。
-
firewalld
: 簡単な firewall のユースケースには、firewalld
ユーティリティーを使用します。このユーティリティーは、使いやすく、このようなシナリオの一般的な使用例に対応しています。 -
nftables
:nftables
ユーティリティーを使用して、ネットワーク全体など、複雑なパフォーマンスに関する重要なファイアウォールを設定します。 -
iptables
: Red Hat Enterprise Linux のiptables
ユーティリティーは、legacy
バックエンドの代わりにnf_tables
カーネル API を使用します。nf_tables
API は、iptables
コマンドを使用するスクリプトが、Red Hat Enterprise Linux で引き続き動作するように、後方互換性を提供します。新しいファイアウォールスクリプトの場合には、Red Hat はnftables
を使用することを推奨します。
さまざまなファイアウォール関連サービス (firewalld
、nftables
、または iptables
) が相互に影響を与えないようにするには、RHEL ホストでそのうち 1 つだけを実行し、他のサービスを無効にします。
8.2.2. nftables フレームワークの概念
iptables
フレームワークと比較すると、nftables は
より最新で効率的かつ柔軟な代替手段を提供します。iptables
よりも高度な機能と改善を提供する概念と機能がいくつかあります。これらの機能強化により、ルール管理が簡素化され、パフォーマンスが向上し、nftables は
複雑で高性能なネットワーク環境に対する最新の代替手段となります。
nftables
フレームワークには次のコンポーネントが含まれています。
- テーブルと名前空間
-
nftables
では、テーブルは関連するファイアウォールチェーン、セット、フローテーブル、およびその他のオブジェクトをグループ化する組織単位または名前空間を表します。nftables
では、テーブルによってファイアウォールルールと関連コンポーネントをより柔軟に構造化できます。一方、iptables
では、テーブルは特定の目的に合わせてより厳密に定義されていました。 - テーブルファミリー
-
nftables
内の各テーブルは、特定のファミリー (ip
、ip6
、inet
、arp
、bridge
、またはnetdev
) に関連付けられています。この関連付けによって、テーブルが処理できるパケットが決まります。たとえば、ip
ファミリーのテーブルは IPv4 パケットのみを処理します。一方、inet
はテーブルファミリーの特殊なケースです。IPv4 パケットと IPv6 パケットの両方を処理できるため、プロトコル全体で統一されたアプローチを提供します。特殊なテーブルファミリーのもう 1 つの例はnetdev
です。これは、ネットワークデバイスに直接適用されるルールに使用され、デバイスレベルでのフィルタリングを可能にするためです。 - ベースチェーン
nftables
のベースチェーンは、パケット処理パイプライン内の高度に設定可能なエントリーポイントであり、ユーザーは次の内容を指定できます。- チェーンのタイプ (例: フィルター)
- パケット処理パスのフックポイント (例: 入力、出力、転送)
- チェーンの優先順位
この柔軟性により、パケットがネットワークスタックを通過するときにルールが適用されるタイミングと方法を正確に制御できます。チェーンの特殊なケースは
ルート
チェーンであり、パケットヘッダーに基づいてカーネルによって行われるルーティングの決定に影響を与えるために使用されます。- ルール処理用の仮想マシン
-
nftables
フレームワークは、ルールを処理するために内部仮想マシンを使用します。この仮想マシンは、アセンブリ言語の操作 (レジスターへのデータのロード、比較の実行など) に似た命令を実行します。このようなメカニズムにより、非常に柔軟かつ効率的なルール処理が可能になります。
nftables
の機能強化は、その仮想マシンの新しい命令として導入できます。これには通常、新しいカーネルモジュールと、libnftnl
ライブラリーおよび nft
コマンドラインユーティリティーの更新が必要です。
または、カーネルを変更することなく、既存の命令を革新的な方法で組み合わせることで、新しい機能を導入することもできます。nftables
ルールの構文は、基盤となる仮想マシンの柔軟性を反映しています。たとえば、ルール meta mark set tcp dport map { 22: 1、80: 2 } は
、TCP 宛先ポートが 22 の場合はパケットのファイアウォールマークを 1 に設定し、ポートが 80 の場合は 2 に設定します。これは、複雑なロジックを簡潔に表現できることを示しています。
- 学んだ教訓と改善点
-
nftables
フレームワークは、iptables
で IP アドレス、ポート、その他のデータタイプ、そして最も重要なそれらの組み合わせの一括マッチングに使用されるipset
ユーティリティーの機能を統合および拡張します。この統合により、大規模で動的なデータセットをnftables
内で直接管理することが容易になります。次に、nftables は、
任意のデータタイプに対して複数の値または範囲に基づいてパケットを照合することをネイティブにサポートしているため、複雑なフィルタリング要件を処理する機能が強化されます。nftables を
使用すると、パケット内の任意のフィールドを操作できます。
nftables
では、セットは名前付きまたは匿名のいずれかになります。名前付きセットは複数のルールによって参照され、動的に変更することができます。匿名セットはルール内でインラインで定義され、不変です。セットには、IP アドレスとポート番号のペアなど、さまざまなタイプの組み合わせである要素を含めることができます。この機能により、複雑な条件の一致における柔軟性が向上します。セットを管理するために、カーネルは特定の要件 (パフォーマンス、メモリー効率など) に基づいて最も適切なバックエンドを選択できます。セットは、キーと値のペアを持つマップとしても機能できます。値の部分は、データポイント (パケットヘッダーに書き込む値) として、または判定やジャンプ先のチェーンとして使用できます。これにより、判定マップと呼ばれる複雑で動的なルール動作が可能になります。
- 柔軟なルール形式
-
nftables
ルールの構造は簡単です。条件とアクションは左から右に順に適用されます。この直感的な形式により、ルールの作成とトラブルシューティングが簡素化されます。
ルール内の条件は論理的に結合されます (ANDOperator を使用)。つまり、ルールが一致するには、すべての条件が true と評価される必要があります。いずれかの条件が失敗した場合、評価は次のルールに進みます。
nftables
内のアクションは、drop
や accept
など、パケットに対するそれ以上のルール処理を停止する最終的なものになることがあります。counter log meta mark set 0x3
などの非ターミナルアクションは、特定のタスク (パケットのカウント、ログ記録、マークの設定など) を実行しますが、後続のルールを評価できます。
8.2.3. 廃止された iptables フレームワークの概念
積極的にメンテナンスされている nftables
フレームワークと同様に、非推奨の iptables
フレームワークを使用すると、さまざまなパケットフィルタリングタスク、ログ記録と監査、NAT 関連の設定タスクなどを実行できます。
iptables
フレームワークは複数のテーブルに構造化されており、各テーブルは特定の目的のために設計されています。
filter
- デフォルトのテーブルは、一般的なパケットフィルタリングを保証します
nat
- ネットワークアドレス変換 (NAT) の場合、パケットの送信元アドレスと宛先アドレスの変更が含まれます。
mangle
- 特定のパケット変更では、高度なルーティング決定のためにパケットヘッダーの変更を行うことができます。
raw
- 接続追跡の前に必要な設定
これらのテーブルは個別のカーネルモジュールとして実装されており、各テーブルは INPUT
、OUTPUT
、FORWARD
などの固定された組み込みチェーンのセットを提供します。チェーンは、パケットが評価される一連のルールです。これらのチェーンは、カーネル内のパケット処理フローの特定のポイントにフックします。チェーンは異なるテーブル間で同じ名前を持ちますが、実行順序はそれぞれのフックの優先順位によって決まります。ルールが正しい順序で適用されるように、優先順位はカーネルによって内部的に管理されます。
もともと、iptables は
IPv4 トラフィックを処理するために設計されました。しかし、IPv6 プロトコルの開始に伴い、iptables
と同等の機能を提供し、ユーザーが IPv6 パケットのファイアウォールルールを作成および管理できるようにするために、ip6tables
ユーティリティーを導入する必要がありました。同じロジックで、Address Resolution Protocol (ARP) を処理するために arptables
ユーティリティーが作成され、イーサネットブリッジフレームを処理するために ebtables
ユーティリティーが開発されました。これらのツールを使用すると、さまざまなネットワークプロトコルにわたって iptables
のパケットフィルタリング機能を適用し、包括的なネットワークカバレッジを提供できるようになります。
iptables
の機能を強化するために、拡張機能の開発が開始されました。機能拡張は通常、ユーザー空間の動的共有オブジェクト (DSO) とペアになったカーネルモジュールとして実装されます。拡張機能により、ファイアウォールルールで使用してより高度な操作を実行できる一致とターゲットが導入されます。拡張機能により、複雑な一致とターゲットが可能になります。たとえば、特定のレイヤー 4 プロトコルヘッダー値を一致させたり操作したり、レート制限を実行したり、クォータを適用したりすることができます。一部の拡張機能は、デフォルトの iptables
構文の制限に対処するように設計されています (例: マルチポート一致拡張機能)。この拡張機能により、単一のルールを複数の非連続ポートに一致させることができるため、ルール定義が簡素化され、必要な個別のルールの数を減らすことができます。
ipset は
、iptables
に対する特別な種類の機能拡張です。これはカーネルレベルのデータ構造であり、iptables
と一緒に使用して、パケットと照合できる IP アドレス、ポート番号、その他のネットワーク関連要素のコレクションを作成します。これらのセットにより、ファイアウォールルールの作成と管理のプロセスが大幅に合理化、最適化、高速化されます。
関連情報
-
iptables (8)
man ページ
8.2.4. iptables および ip6tables ルールセットの nftables への変換
iptables-restore-translate
ユーティリティーおよび ip6tables-restore-translate
ユーティリティーを使用して、iptables
および ip6tables
ルールセットを nftables
に変換します。
前提条件
-
nftables
パッケージおよびiptables
パッケージがインストールされている。 -
システムに
iptables
ルールおよびip6tables
ルールが設定されている。
手順
iptables
ルールおよびip6tables
ルールをファイルに書き込みます。# iptables-save >/root/iptables.dump # ip6tables-save >/root/ip6tables.dump
ダンプファイルを
nftables
命令に変換します。# iptables-restore-translate -f /root/iptables.dump > /etc/nftables/ruleset-migrated-from-iptables.nft # ip6tables-restore-translate -f /root/ip6tables.dump > /etc/nftables/ruleset-migrated-from-ip6tables.nft
-
必要に応じて、生成された
nftables
ルールを手動で更新して、確認します。 nftables
サービスが生成されたファイルをロードできるようにするには、以下を/etc/sysconfig/nftables.conf
ファイルに追加します。include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
iptables
サービスを停止し、無効にします。# systemctl disable --now iptables
カスタムスクリプトを使用して
iptables
ルールを読み込んだ場合は、スクリプトが自動的に開始されなくなったことを確認し、再起動してすべてのテーブルをフラッシュします。nftables
サービスを有効にして起動します。# systemctl enable --now nftables
検証
nftables
ルールセットを表示します。# nft list ruleset
8.2.5. 単一の iptables および ip6tables ルールセットの nftables への変換
Red Hat Enterprise Linux は、iptables
ルールまたは ip6tables
ルールを、nftables
で同等のルールに変換する iptables-translate
ユーティリティーおよび ip6tables-translate
ユーティリティーを提供します。
前提条件
-
nftables
パッケージがインストールされている。
手順
以下のように、
iptables
またはip6tables
の代わりにiptables-translate
ユーティリティーまたはip6tables-translate
ユーティリティーを使用して、対応するnftables
ルールを表示します。# iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT nft add rule ip filter INPUT ip saddr 192.0.2.0/24 counter accept
拡張機能によっては変換機能がない場合もあります。このような場合には、ユーティリティーは、以下のように、前に
#
記号が付いた未変換ルールを出力します。# iptables-translate -A INPUT -j CHECKSUM --checksum-fill nft # -A INPUT -j CHECKSUM --checksum-fill
関連情報
-
iptables-translate --help
8.2.6. 一般的な iptables コマンドと nftables コマンドの比較
以下は、一般的な iptables
コマンドと nftables
コマンドの比較です。
すべてのルールをリスト表示します。
iptables nftables iptables-save
nft list ruleset
特定のテーブルおよびチェーンをリスト表示します。
iptables nftables iptables -L
nft list table ip filter
iptables -L INPUT
nft list chain ip filter INPUT
iptables -t nat -L PREROUTING
nft list chain ip nat PREROUTING
nft
コマンドは、テーブルおよびチェーンを事前に作成しません。これらは、ユーザーが手動で作成した場合にのみ存在します。firewalld によって生成されたルールの一覧表示:
# nft list table inet firewalld # nft list table ip firewalld # nft list table ip6 firewalld