42.2.2. nftables フレームワークの概念
nftables フレームワークは、iptables に代わる、最新かつ効率的で柔軟な代替手段です。ルール管理を簡素化され、パフォーマンスを向上させるため、複雑で高い性能が求められるネットワーク環境に最適な選択肢となります。
- テーブルと名前空間
-
nftablesでは、テーブルは関連するファイアウォールチェーン、セット、フローテーブル、およびその他のオブジェクトをグループ化する組織単位または名前空間を表します。nftablesでは、テーブルにより、ファイアウォールルールと関連コンポーネントをより柔軟に構造化できます。一方、iptablesでは、テーブルは特定の目的に合わせてより厳密に定義されていました。 - テーブルファミリー
-
nftables内の各テーブルは、特定のファミリー (ip、ip6、inet、arp、bridge、またはnetdev) に関連付けられています。この関連付けによって、テーブルが処理できるパケットが決まります。たとえば、ipファミリーのテーブルは IPv4 パケットのみを処理します。しかし、inetはテーブルファミリーの特殊なケースである。これは IPv4 パケットと IPv6 パケットの両方を処理できるため、複数のプロトコルに対応した統一的なアプローチを実現します。特殊なテーブルファミリーのもう 1 つの例はnetdevです。これは、ネットワークデバイスに直接適用されるルールに使用され、デバイスレベルでのフィルタリングを可能にするためです。 - ベースチェーン
nftablesのベースチェーンは、パケット処理パイプライン内の高度に設定可能な項目です。これを使用すると、以下を指定できます。- チェーンのタイプ (例: "filter")
- パケット処理パスのフックポイント (例: "input"、"output"、"forward")
- チェーンの優先順位
この柔軟性により、パケットがネットワークスタックを通過するときにルールが適用されるタイミングと方法を正確に制御できます。チェーンの特殊なケースは
routeチェーンです。これは、パケットヘッダーに基づいてカーネルによって行われるルーティングの決定に影響を与えるために使用されます。- ルール処理用の仮想マシン
nftablesフレームワークは、ルールを処理するために内部仮想マシンを使用します。この仮想マシンは、アセンブリ言語の操作 (レジスターへのデータのロード、比較の実行など) に似た命令を実行します。このようなメカニズムにより、非常に柔軟かつ効率的なルール処理が可能になります。nftablesの機能拡張を、この仮想マシンの新しい命令として導入できます。これを行うには、通常、新しいカーネルモジュールと、libnftnlライブラリーおよびnftコマンドラインユーティリティーの更新が必要です。または、カーネルを変更することなく、既存の命令を新しい方法で組み合わせることで、新しい機能を導入することもできます。
nftablesルールの構文は、基盤となる仮想マシンの柔軟性を反映しています。たとえば、meta mark set tcp dport map { 22: 1, 80: 2 }というルールは、TCP 宛先ポートが 22 の場合にパケットのファイアウォールマークを 1 に設定し、ポートが 80 の場合に 2 に設定します。このように複雑なロジックを簡潔に表現できます。- 複雑なフィルタリングと決定マップ
nftablesフレームワークは、ipsetユーティリティーの機能を統合および拡張します。このユーティリティーは、iptablesにおいて IP アドレス、ポート、その他のデータタイプ、そして何よりもその組み合わせの一括マッチングに使用されるものです。この統合により、大規模で動的なデータセットをnftables内で直接管理することが容易になります。また、nftablesは、任意のデータ型の複数の値または範囲に基づいてパケットをマッチングすることをネイティブにサポートしています。これにより、複雑なフィルタリング要件を処理する機能が強化されています。nftablesを使用すると、パケット内の任意のフィールドを操作できます。nftablesでは、セットは名前付きまたは匿名のいずれかです。名前付きセットは複数のルールによって参照され、動的に変更できます。匿名セットはルール内でインラインで定義され、不変です。セットには、IP アドレスとポート番号のペアなど、異なるタイプの組み合わせである要素を含めることができます。この機能により、複雑な条件のマッチングにおける柔軟性が向上します。セットを管理するために、カーネルは特定の要件 (パフォーマンス、メモリー効率など) に基づいて最適なデータ構造を選択できます。セットは、キーと値のペアを持つマップとしても機能できます。値の部分は、データポイント (パケットヘッダーに書き込む値) として、またはジャンプ先の決定やチェーンとして使用できます。これにより、"決定マップ" と呼ばれる複雑で動的なルール動作が可能になります。- 柔軟なルール形式
nftablesルールの構造はシンプルです。条件とアクションが左から右に順に適用されます。この直感的な形式により、ルールの作成とトラブルシューティングが簡素化されます。ルール内の条件は、論理的に (AND 演算子を使用して) 結合されます。そのため、ルールがマッチするには、すべての条件が "true" と評価される必要があります。いずれかの条件が失敗した場合、評価が次のルールに進みます。
nftables内のアクションは、dropやacceptなど、パケットのそれ以上のルール処理を停止する最終的なアクションにすることができます。counter log meta mark set 0x3などの非終端アクションは、特定のタスク (パケットのカウント、ロギング、マークの設定など) を実行しますが、後続のルールの評価を許可します。