Veröffentlichung des Paketfilters nftables 0.9.9

Die Version 0.9.9 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). Gleichzeitig wurde die begleitende Bibliothek libnftnl in der Version 1.2.0 veröffentlicht, die eine Low-Level-API für die Interaktion mit dem nf_tables-Subsystem bereitstellt. Die für den Betrieb von nftables 0.9.9 erforderlichen Änderungen sind im Linux-Kernel 5.13-rc1 enthalten.

Das Paket nftables umfasst Komponenten des Paketfilters, die im Benutzermodus arbeiten, während die Funktion auf Kernel-Ebene von dem seit Version 3.13 im Linux-Kernel integrierten nf_tables-Subsystem bereitgestellt wird. Auf Kernel-Ebene wird lediglich eine allgemeine Schnittstelle bereitgestellt, die unabhängig vom spezifischen Protokoll ist und grundlegende Funktionen zum Extrahieren von Daten aus Paketen, zur Durchführung von Operationen mit Daten und zur Steuerung des Datenflusses bietet.

Die Filterregeln und protokollspezifischen Handler werden im Benutzermodus in Bytecode kompiliert, der anschließend über die Netlink-Schnittstelle in den Kernel geladen und dort in einem speziellen Kontext ausgeführt wird. virtuellen Maschine, die BPF (Berkeley Packet Filter) ähnelt. Dieser Ansatz ermöglicht eine signifikante Reduzierung der Größe des Filtercodes, der auf Kernel-Ebene arbeitet, und verlagert alle Funktionen zur Regelparserung und Logikbearbeitung von Protokollen in den Benutzermodus.

Hauptneuheiten:

  • Die Möglichkeit, die Verarbeitung von Flow-Tabellen auf den Netzwerkadapter auszulagern, wurde implementiert und kann mit dem Flag 'offload' aktiviert werden. Eine Flow-Tabelle ist ein Mechanismus zur Optimierung des Paketumleitungswegs, bei dem die vollständige Durchlauf aller Regelketten nur für das erste Paket angewendet wird, während alle weiteren Pakete im Fluss direkt weitergeleitet werden. 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 } }
  • Unterstützung für das Anheften einer Flagge an eine Tabelle wurde hinzugefügt, um die Bindung an den Eigentümer zu ermöglichen, was eine exklusive Nutzung der Tabelle durch den Prozess gewährleistet. Nach Abschluss des Prozesses wird die zugehörige Tabelle automatisch gelöscht. Informationen über den Prozess werden im Regel-Dump als Kommentar angezeigt: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
  • Unterstützung für die IEEE 802.1ad Spezifikation (VLAN-Stacking oder QinQ) wurde hinzugefügt, die Methoden zur Einfügung mehrerer VLAN-Tags in ein einzelnes Ethernet-Frame definiert. Zum Beispiel kann zur Überprüfung des Typs des externen Ethernet-Frames 8021ad und vlan id=342 die Konstruktion … ether type 802.1ad vlan id 342 verwendet werden, um den externen Typ des Ethernet-Frames 8021ad/vlan id=1, das eingekapselte 802.1q/vlan id=2 und die weitere Einkapselung eines IP-Pakets zu überprüfen: … ether type 802.1ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • Die Unterstützung für das Management von Ressourcen mithilfe einer einheitlichen Hierarchie von cgroups v2 wurde hinzugefügt. Der Hauptunterschied zwischen cgroups v2 und v1 ist die Verwendung einer gemeinsamen Hierarchie von cgroups für alle Arten von Ressourcen, anstelle von separaten Hierarchien zur Verteilung von CPU-Ressourcen, zur Regulierung des Speicherverbrauchs und für Ein-/Ausgaben. Zum Beispiel kann zur Überprüfung, ob der Vorgänger des Sockets auf der ersten Ebene der cgroupv2 der Maske „system.slice“ entspricht, der folgende Ausdruck verwendet werden: … socket cgroupv2 Ebene 1 „system.slice“
  • Die Möglichkeit zur Überprüfung der Komponenten von SCTP-Paketen wurde hinzugefügt (die erforderliche Funktionalität wird in Linux-Kernel 5.14 verfügbar sein). Zum Beispiel kann zur Überprüfung, ob im Paket ein Chunk vom Typ 'data' und mit dem Feld 'type' vorhanden ist, Folgendes verwendet werden: … sctp chunk data existiert … sctp chunk data type 0
  • Die Ausführung der Regel-Ladeoperation wurde mit dem Flag „-f“ ungefähr um das Doppelte beschleunigt. Auch die Ausgabe der Liste der Regeln wurde beschleunigt.
  • Eine kompakte Form zur Überprüfung der gesetzten Bits in Flags wurde bereitgestellt. Zum Beispiel kann zur Überprüfung, dass die Statusbits snat und dnat nicht gesetzt sind, folgende Anweisung verwendet werden: … ct status ! snat,dnat. Um zu überprüfen, dass das syn-Bit im Bitmasken syn,ack gesetzt ist: … tcp flags syn / syn,ack. Um zu überprüfen, dass die Bits fin und rst nicht in der Bitmaske syn,ack,fin,rst gesetzt sind: … tcp flags != fin,rst / syn,ack,fin,rst
  • Die Verwendung des Schlüsselworts „verdict“ in den Definitionen von typeof für set/map ist erlaubt: add map x m { typeof iifname . ip protocol . th dport : verdict; }

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster