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

nftables 0.9.9 パケットフィルタがリリースされました。これは、IPv4、IPv6、ARP、およびネットワークブリッジのパケットフィルタリングインターフェイスを統合したものです(iptables、ip6table、a​​rptables、およびebtablesの代替として開発されました)。同時に、nf_tablesサブシステムとのやり取りのための低レベルAPIを提供するライブラリlibnftnl 1.2.0もリリースされました。nftables 0.9.9に必要な変更はカーネルに組み込まれています。 Linux 5.13-rc1.

nftablesパッケージには、ユーザー空間で動作するパケットフィルタコンポーネントが含まれており、カーネルレベルの処理は、カーネルの一部であるnf_tablesサブシステムによって提供されます。 Linux バージョン3.13以降、カーネルレベルでは汎用的なプロトコル非依存のインターフェースのみが提供され、パケットからのデータ抽出、データ操作の実行、およびフロー制御のための基本的な機能が提供される。

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

主な革新:

  • フローテーブル処理をネットワークアダプタ側へ移動する機能を実装しました。この機能は「offload」フラグを使用して有効化できます。フローテーブルはパケット転送パスを最適化するメカニズムで、最初のパケットのみにすべてのルール処理チェーンのフルパスを適用し、フロー内の他のすべてのパケットは直接転送されます。table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname "wan" masquerade } }
  • テーブルにフラグを付加して所有者にバインドする機能のサポートを追加しました。これにより、プロセスによるテーブルの排他使用が可能になります。プロセスが終了すると、そのプロセスにバインドされていたテーブルは自動的に削除されます。プロセスに関する情報は、ルールダンプにコメントとして表示されます。table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packet 1 bytes 309 } }
  • IEEE 802.1ad(VLANスタッキングまたはQinQ)仕様のサポートが追加されました。この仕様は、複数のVLANタグを単一のイーサネットフレームに置き換える手段を定義しています。例えば、外側のイーサネットフレームタイプ8021adとVLAN ID=342を確認するには、「... ether type 802.1ad vlan id 342」という構文を使用します。外側のイーサネットフレームタイプ8021ad/VLAN ID=1、ネストされた802.1q/VLAN ID=2、そしてIPパケットのさらなるカプセル化を確認するには、「... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter」という構文を使用します。
  • cgroups v2 の統合階層を使用したリソース管理のサポートを追加しました。cgroups v2 と v1 の主な違いは、CPU リソース割り当て、メモリ消費量調整、I/O 用にそれぞれ個別の階層を使用するのではなく、すべての種類のリソースに対して共通の cgroup 階層を使用することです。例えば、cgroupv2 の最初のレベルにあるソケットの祖先がマスク「system.slice」に一致するかどうかを確認するには、次の構文を使用します。... socket cgroupv2 level 1 "system.slice"
  • Добавлена возможность проверки составных частей пакетов SCTP (необходимая для работы функциональность появится в ядре Linux 5.14). Например, для проверки наличия в пакете chunk-а с типом ‘data’ и полем ‘type’: … sctp chunk data exists … sctp chunk data type 0
  • 「-f」フラグを使用したルール読み込み処理の実行が約2倍高速化されました。ルールリストの出力も高速化されました。
  • flags に設定されているビットをテストするための簡潔な形式が提供されています。例えば、snat および dnat ステータスビットが設定されていないことをテストするには、次のように指定します。… ct status ! snat,dnat は、syn,ack ビットマスクの syn ビットが設定されていることをテストします。… tcp flags syn / syn,ack は、syn,ack,fin,rst ビットマスクの fin および rst ビットが設定されていないことをテストします。… tcp flags != fin,rst / syn,ack,fin,rst
  • 「verdict」キーワードは、set/map の typeof 定義で使用できます: add map xm { typeof iifname . ip protocol . th dport : verdict ;}

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

DDoS 保護機能を備えた信頼性の高いサイト用ホスティング、VPS VDS サーバーを購入する 🔥 DDoS攻撃対策付きの信頼性の高いウェブサイトホスティング、VPS/VDSサーバーを購入しましょう | ProHoster