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

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

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

主な変更点:

  • Linux カーネル 6.2 以降を実行しているシステムの場合、vxlan、geneve、gre、および gretap プロトコル マッピングのサポートが追加され、単純な式でカプセル化されたパケットのヘッダーをチェックできるようになりました。 たとえば、VxLAN からのネストされたパケットのヘッダー内の IP アドレスを確認するには、次のルールを使用できるようになります (最初に VxLAN ヘッダーのカプセル化を解除し、フィルターを vxlan0 インターフェイスにバインドする必要はありません)。 ... udp dポート 4789 vxlan ip プロトコル udp ... udp dポート 4789 vxlan ip sawdr 1.2.3.0. 24/4789 ... udp dport 1.2.3.4 vxlan ip sawdr . vxlan ip ddr { 4.3.2.1 . XNUMX }
  • セットリスト要素の部分削除後の残りの自動マージのサポートが実装されました。これにより、既存の範囲から要素または範囲の一部を削除できるようになります (以前は範囲全体を削除することしかできませんでした)。 たとえば、範囲 25 ~ 24 および 30 ~ 40 のセット リストから要素 50 を削除した後、リストは 24、26 ~ 30、および 40 ~ 50 のままになります。 自動マージが機能するために必要な修正は、5.10 以降のカーネルの安定したブランチのメンテナンス リリースで提供されます。 # nft リスト ルールセット テーブル ip x { set y { typeof tcp dport flags 間隔自動マージ要素 = { 24-30, 40-50 } } } # nft 削除要素 ip xy { 25 } # nft リスト ルールセット テーブル ip x { set y { typeof tcp dport flags 間隔自動マージ要素 = { 24, 26-30, 40-50 } } }
  • アドレス変換 (NAT) をマッピングするときに連絡先と範囲を使用できるようにします。 テーブル ip nat { チェーン プレルーティング { タイプ nat フック プレルーティングの優先順位 dstnat; ポリシーを受け入れます。 dnat から IP パパへ。 tcp dport マップ { 10.1.1.136 . 80: 1.1.2.69。 1024、10.1.1.10 ~ 10.1.1.20。 8888-8889: 1.1.2.69。 2048-2049 } 永続的 } }
  • 「last」式のサポートが追加されました。これにより、ルール要素またはセットリストが最後に使用された時刻を調べることができます。 この機能は、Linux カーネル 5.14 以降でサポートされます。 テーブル ip x {set y {typeof ip ddr . tcp dport size 65535 flags Dynamic,timeout last timeout 1h }chain z { type フィルタフック出力優先度フィルタ; ポリシーを受け入れます。 @y { ip パパ . を更新します。 tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip goddr . tcp dport サイズ 65535 フラグ ダイナミック、タイムアウト 最後のタイムアウト 1h 要素 = { 172.217.17.14 。 443 最後に使用された時間 1s591ms タイムアウト 1h 期限切れ 59m58s409ms, 172.67.69.19 。 443 最後に使用された時間 4s636ms タイムアウト 1h 期限切れ 59m55s364ms、 142.250.201.72 。 443 最後に使用された時間 4s748ms タイムアウト 1h 期限切れ 59m55s252ms, 172.67.70.134 。 443 最後に使用された時間 4s688ms タイムアウト 1h 期限切れ 59m55s312ms、 35.241.9.150 。 443 最後に使用された時間 5s204ms タイムアウト 1 時間の期限切れ 59m54s796ms、 138.201.122.174 。 443 最後に使用された時間 4s537ms タイムアウト 1h 期限切れ 59m55s463ms、 34.160.144.191 。 443 最後に使用された 5s205ms タイムアウト 1 時間の期限切れ 59m54s795ms、 130.211.23.194 。 443 最後に使用された時間 4s436ms タイムアウト 1 時間の有効期限が切れます 59m55s564ms } } }
  • セットリストにクォータを定義する機能が追加されました。 たとえば、各ターゲット IP アドレスのトラフィック クォータを決定するには、次のように指定できます。 table netdev x { set y { typeof ip maddr size 65535 quote over 10000 mbytes }chain y { type filter hook egress device "eth0" priority filter; ポリシーを受け入れます。 ip ddr @ydrop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quote over 10000 mbytes elements = { 8.8.8.8. 10000 196 MB を超えるクォータが使用されています 0 バイト } }chain y { type フィルター フック出力デバイス "ethXNUMX" 優先度フィルター。 ポリシーを受け入れます。 ip パパ @y ドロップ } }
  • セットリストでの定数の使用は許可されます。 たとえば、宛先アドレスと VLAN ID をリスト キーとして使用する場合、次のように VLAN 番号 (daddr . 123) を直接指定できます。 VLAN ID サイズ 2048 フラグ ダイナミック、タイムアウト タイムアウト 1m } チェーン c { タイプ フィルター フック イングレス デバイス eth0 優先順位 0; ポリシーを受け入れます。 ether type != 8021q update @s { ether お父さん . 123 } カウンタ } }
  • オブジェクトを無条件に削除するための新しい「destroy」コマンドが追加されました (delete コマンドとは異なり、欠落しているオブジェクトを削除しようとしても ENOENT は生成されません)。 動作するには、少なくとも Linux カーネル 6.3-rc が必要です。 テーブルIPフィルターを破棄する

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

コメントを追加します