nftablesでチェーン優先順位を使用するタイミングと方法

nftablesでチェーン優先順位を使用するタイミングと方法

nftablesでチェーンを構成するときにpriority値を指定する必要があります。オンラインの例では、ほぼ常にaを0に設定します。場合によっては、一部のフック(、)piorityに100の値が使用されます。outputpostrouting

nftables wiki言わなければならない:

優先順位は、チェーンを注文したり、特定の Netfilter 内部作業の前後に配置したりするために使用できます。たとえば、-300の優先順位を持つ事前ルーティングされたフックのチェーンは、接続追跡操作の前に配置されます。

参考までに、以下はiptablesで使用されるさまざまな優先順位のリストです。

  • NF_IP_PRI_CONNTRACK_DEFRAG (-400): 最適化の優先順位
  • NF_IP_PRI_RAW (-300): 接続追跡操作の前にソース表の既存の優先順位を指定します。
  • NF_IP_PRI_SELINUX_FIRST (-225): SELinux 操作
  • NF_IP_PRI_CONNTRACK(-200): 接続追跡操作
  • NF_IP_PRI_MANGLE(-150): 管理タスク
  • NF_IP_PRI_NAT_DST(-100):ターゲットNAT
  • NF_IP_PRI_FILTER(0) : フィルタ操作、フィルタテーブル
  • NF_IP_PRI_SECURITY(50):セキュリティテーブルの場所(secmarkなど)を設定できます。
  • NF_IP_PRI_NAT_SRC (100): ソース NAT
  • NF_IP_PRI_SELINUX_LAST (225): パケット終了時に SELinux
  • NF_IP_PRI_CONNTRACK_HELPER (300): 終了時の接続追跡

これはpriority内部 Netfilter 操作とコントロールとの相互作用を示していますが、iptables で使用される値のみを例として挙げます。

どのような場合にpriority関連していますか(つまり、値≠0に設定する必要があります)?同じフックを持つ複数のチェーンにのみ適用されますか? nftablesとiptablesを組み合わせるのはどうですか?正しい値を決定するための内部Netfilter操作は何ですかpriority

ベストアンサー1

アップデート:(iptables-nft代わりにiptables-legacy)を使うnftablesカーネルAPIと再利用可能な互換性レイヤ拡張テーブルカーネルモジュール(iptables-extensions)現地人がいないときnftables翻訳可能。それは次のように見なければなりません。nftablesこの問題を除いて、ほとんどの場合、以前のバージョンと同様に優先順位が固定されているためnftables「ここでの優先順位は依然として重要です。


iptables(レガシー)とnftablesどちらも同じnetfilterインフラストラクチャを使用し、異なる場所でフックを使用します。そこに説明があります:Webフィルタフック、またはこれを持ってsystemtap マンページ、いくつかのフック処理を記録します。

PRIORITYは、同じパケットで実行される他のnetfilterフック機能に関してプローブポイントを実行する順序を指定する整数優先順位です。フック機能は、各パケットに対して最小の優先順位番号から最大の優先順位番号の順に実行されます。 [...]

またはnetfilterのブログがあります。Netfilterを使用してネットワークパケットをフィルタリングする方法 - 第1部Netfilter Hooks (ブログが消えた。バックトラッカー代わりにリンクしてください。 )

これらすべては、さまざまなモジュール/機能がそれぞれに実装できることを示しています。5つの可能なフック(IPv4の場合)各フック内では、フックに登録されている優先順位に従って呼び出されます。

このフックは、次の目的にのみ使用されるものではありません。iptablesまたはnftables。上記のsystemtap、さらにはnetfilterの独自のサブモジュールなど、さまざまなユーザーがいます。たとえば、IPv4の場合、iptablesまたはnftablesでNATを使用するnf_conntrack_ipv4場合優先順位の異なる4つのフックに合計6回登録。モジュールはnf_defrag_ipv4レジスタを順次取り出します。NF_INET_PRE_ROUTING/NF_IP_PRI_CONNTRACK_DEFRAG NF_INET_LOCAL_OUT/NF_IP_PRI_CONNTRACK_DEFRAG

はい。優先順位は同じフック内でのみ関連しています。ただし、同じフックには複数のユーザーがあり、すでに事前定義された優先順位があるため(通常は異なるフック間で同じ値を再利用するわけではありません)、これらの周囲で正しく対話するには互換性のある優先順位を使用する必要があります。

たとえば、フラグメント化されていないパケットに対して早期にルールを実行し、後で(通常どおり)デフラグされたパケットに対してルールを実行する必要がある場合は、2つだけ登録します。nftables辞書パスのチェーンの1つは<= -401(例-450:)、もう1つは-399および間-201(例-300:)です。最高iptablesconntrackがフラグメント化されたパケットを見ることができなかったことは最近まで不可能だった-300ので、初期デフラグが使用されました(カーネル4.15以降はオプションに登録されraw_before_defragますが、-450同時に両方を実行することはできませんでしたがiptables-nft、その機能は提供されません)オプション)。


今の間の相互作用についてnftablesそしてiptables:どちらも一緒に使用できます。以前のカーネルのNATを除いて、両方ともnetfilterのnatリソースを置いて競います。 1つだけnatを登録する必要があります。Wikiで説明されているようにカーネル> = 4.18を使用しない限り。これはいnftablesiptablesと同じ優先順位を持つように設定ニュアンスがあります。

両方ともiptablesそしてnftables一緒に使用すると、相互作用と必要な効果の順序のために、他のものよりも先に使用する必要があります。ほんの少し低いか高いだけです。nftables'に従って優先順位が適用されます。iptables' は変更できません。

たとえば、ほとんどの場合iptables設定を使用できます。nftables特定の一致機能があり、次に適用されません。iptablesパケットを表示してから表示を処理します。iptables、特定の目標をサポートするためです(例:クールiptables LEDターゲットLED 点滅) 使用不可nftables。少し低い優先順位の値を登録するだけです。nftablesフックを使用して以前に完了したことを確認してください。たとえば、一般的な入力フィルタリング規則では、この値が-5代わりに使用されます。この値は、そうでない場合は以前に実行される値より0低くしてはいけません。-149iptables' INPUT mangle chain これは私たちが望むものではないかもしれません。これは入力ケースで重要な唯一の他の低い値です。たとえば、NF_IP_PRI_CONNTRACK考慮すべきしきい値はありません。つながるこの優先順位に登録されていないものがありますNF_INET_LOCAL_INSELinuxもこのフックに何かを登録していません。それに関連することが本当に重要であれば、-225ここに特別な意味はありません。

おすすめ記事