Veröffentlichung des Paketfilters nftables 1.0.1

Die Version 1.0.1 des Paketfilters nftables wurde veröffentlicht, die die Schnittstellen zur Paketfilterung für IPv4, IPv6, ARP und Netzwerkbrücken vereinheitlicht (zielt darauf ab, iptables, ip6tables, arptables und ebtables zu ersetzen). Die erforderlichen Änderungen für die Funktionalität von nftables 1.0.1 sind im Linux-Kernel 5.16-rc1 enthalten.

Das Paket nftables umfasst Komponenten des Paketfilters, die im Benutzermodus arbeiten, während auf Kernel-Ebene das Subsystem nf_tables, das seit Version 3.13 Teil des Linux-Kernels ist, die Arbeit bereitstellt. Auf Kernel-Ebene wird nur eine allgemeine Schnittstelle bereitgestellt, die unabhängig vom spezifischen Protokoll ist und grundlegende Funktionen zum Extrahieren von Daten aus Paketen, Ausführen von Datenoperationen und Steuern des Flusses bietet.

Die eigentlichen Filterregeln und protokollspezifischen Handler werden im Benutzermodus in Bytecode kompiliert, danach wird dieser Bytecode über die Netlink-Schnittstelle in den Kernel geladen und dort in einem speziellen virtuellen Maschine, der an BPF (Berkeley Packet Filters) erinnert, ausgeführt. Dieser Ansatz ermöglicht es, die Größe des im Kernel arbeitenden Filtercodes erheblich zu reduzieren und alle Funktionen zur Regel-Parsing und zur Logik der Protokollverarbeitung in den Benutzermodus auszulagern.

Hauptneuheiten:

  • Der Speicherbedarf beim Laden großer Set- und Map-Listen wurde reduziert.
  • Die Neuladung von Set- und Map-Listen wurde beschleunigt.
  • Die Ausgabe ausgewählter Tabellen und Chains in großen Regelsets wurde beschleunigt. Beispielsweise beträgt die Ausführungszeit des Befehls „nft list ruleset“, um ein Regelset mit 100.000 Zeilen auszugeben, 3,049 Sekunden, und bei der Ausgabe nur der nat- und filter-Tabellen („nft list table nat“, „nft list table filter“) verkürzt sich dies auf 1,969 und 0,697 Sekunden.
  • Die Ausführung von Anfragen mit der Option „—terse“ bei der Verarbeitung von Regeln mit großen Set- und Map-Listen wurde beschleunigt.
  • Es wurde die Möglichkeit geschaffen, den Datenverkehr aus der „egress“-Chain zu filtern, die auf derselben Ebene verarbeitet wird wie der Egress-Handler in der Netdev-Chain (Hook Egress), d.h. in der Phase, in der der Treiber das Paket vom Netzwerkstapel des Kernels erhält. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
  • Es wurde die Zuordnung und Änderung von Bytes im Header und Inhalt des Pakets an einer bestimmten Verschiebung erlaubt. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter

Quelle: opennet.ru

60GB SSD 8Gb DDR4