nftables パケット フィルター 1.0.6 リリース

パケット フィルタ nftables 1.0.6 のリリースが公開され、IPv4、IPv6、ARP、およびネットワーク ブリッジのパケット フィルタリング インターフェイスが統合されました (iptables、ip6table、a​​rptables、ebtables の置き換えを目的としています)。 nftables パッケージには、ユーザー空間で実行されるパケット フィルター コンポーネントが含まれていますが、カーネル レベルの作業は、リリース 3.13 以降 Linux カーネルの一部となっている nf_tables サブシステムによって提供されます。 カーネル レベルは、パケットからのデータの抽出、データ操作の実行、およびフロー制御の基本機能を提供する、プロトコルに依存しない汎用インターフェイスのみを提供します。

フィルタリング ルールとプロトコル固有のハンドラはユーザー空間でバイトコードにコンパイルされ、その後、このバイトコードは Netlink インターフェイスを使用してカーネルにロードされ、BPF (Berkeley Packet Filters) を思わせる特別な仮想マシンのカーネルで実行されます。 このアプローチにより、カーネル レベルで実行されるフィルタリング コードのサイズを大幅に削減し、プロトコルを操作するための解析ルールとロジックのすべての機能をユーザー空間に移動できます。

主な変更点:

  • 「-o/—optimize」オプションが指定されている場合に呼び出されるルール オプティマイザーは、ルールを結合してマップとセット リストに変換することにより、ルールを自動的にパッケージ化します。 たとえば、 rules # cat ruleset.nft table ip x {chain y { type filterhook input priority filter; のようになります。 政策の中止。 メタ iifname eth1 ip sawdr 1.1.1.1 ip maddr 2.2.2.3 メタ iifname eth1 ip sawdr 1.1.1.2 ip maddr 2.2.2.4 を受け入れる meta iifname eth1 ip sawdr 1.1.1.2 ip maddr 2.2.3.0/24 メタ​​ iifname eth1 ip sawdr 1.1.1.2 を受け入れる.2.2.4.0 ip maddr 2.2.4.10-2 accept meta iifname eth1.1.1.3 ip maddr 2.2.2.5 ip maddr 4 accept } } 「nft -o -c -f ruleset.nft」を実行すると、次のように変換されます。 .nft:17:74-1: メタ iifname eth1.1.1.1 ip sawdr 2.2.2.3 ip maddr 5 accept ruleset.nft:17:74-1: meta iifname eth1.1.1.2 ip sawdr 2.2.2.4 ip goddr 6 accept ruleset.nft : 17:77-1: メタ iifname eth1.1.1.2 ip sawdr 2.2.3.0 ip maddr 24/7 accept ruleset.nft:17:83-1: メタ iifname eth1.1.1.2 ip sawdr 2.2.4.0 ip goddr 2.2.4.10-8 accept ruleset.nft:17:74-2: meta iifname eth1.1.1.3 ip sawdr 2.2.2.5 ip maddr 1 accept into: iifname 。 イプ・サドル。 ip パパ { eth1.1.1.1 . 2.2.2.3. 1、 eth1.1.1.2 。 2.2.2.4. 1、 eth1.1.1.2 。 2.2.3.0. 24/1、eth1.1.1.2 。 2.2.4.0. 2.2.4.10 ~ 2、eth1.1.1.3。 2.2.2.5. XNUMX } 受け入れる
  • オプティマイザーは、すでに単純なセット リストを使用しているルールを、たとえば次のようなよりコンパクトな形式に変換することもできます。 政策の中止。 iifname "lo" accept ct 状態が確立され、関連する accept コメント「私たちが発信したトラフィックでは、私たちは信頼します」 iifname "enp0s31f6" ip maddr { 209.115.181.102, 216.197.228.230 } ip goddr 10.0.0.149 udp sports 123 udp dport 32768-65535 accept iifname "enp0s31f6" ip sawdr { 64.59.144.17, 64.59.150.133 } ip goddr 10.0.0.149 udp sports 53 udp dport 32768-65535 accept } } 「nft -o -c -f ruleset.nft」を実行すると、次のようにパッケージ化されます。 : ruleset.nft:6:22-149: iifname "enp0s31f6" ip sawdr { 209.115.181.102, 216.197.228.230 } ip goddr 10.0.0.149 udp sports 123 udp dport 32768-65535 accept ruleset.nft:7:22- 143: iifname "enp0s31f6" ip sawdr { 64.59.144.17, 64.59.150.133 } ip maddr 10.0.0.149 udp sports 53 udp dport 32768-65535 accept into: iifname 。 イプ・サドル。 ipパパ。 UDPスポーツ。 udp dポート { enp0s31f6 . 209.115.181.102。 10.0.0.149。 123. 32768-65535、enp0s31f6。 216.197.228.230。 10.0.0.149。 123. 32768-65535、enp0s31f6。 64.59.144.17。 10.0.0.149。 53. 32768-65535、enp0s31f6。 64.59.150.133。 10.0.0.149。 53. 32768-65535 } 受け入れる
  • IPv4 (ネットワーク バイト オーダー) やメタ マーク (システム バイト オーダー) など、異なるバイト順序を持つタイプを使用するマージ間隔のバイトコード生成に関する問題が解決されました。 テーブル ip x {マップ w {typeof ip saddr . メタ マーク: 判定フラグ間隔カウンタ要素 = { 127.0.0.1-127.0.0.4 。 0x123434-0xb00122 : 受け入れます、 192.168.0.10-192.168.1.20 。 0x0000aa00-0x0000aaff : accept, } }chain k { type フィルターフック入力優先度フィルター; 政策の中止。 イプ・サドル。 メタ マーク vmap @w } }
  • 生の式を使用する場合のまれなプロトコルの比較が改善されました。例: metal l4proto 91 @th,400,16 0x0 accept
  • 間隔を置いてルールを有効にする場合の問題は解決されました: insert rules xy tcp sports { 3478-3497, 16384-16387 } counter accept
  • JSON API が改善され、セット リストとマップ リストの式のサポートが追加されました。
  • nftables Python ライブラリの拡張により、検証モード (「-c」) で処理するためのルール セットのロードが可能になり、変数の外部定義のサポートが追加されます。
  • セットリスト要素ではコメントの追加が許可されます。
  • バイト レート制限では、ゼロ値を指定できます。

出所: オープンネット.ru

コメントを追加します