nftables-Paketfilter 0.9.9-Version

Die Veröffentlichung des Paketfilters nftables 0.9.9 wurde veröffentlicht und vereinheitlicht Paketfilterungsschnittstellen für IPv4, IPv6, ARP und Netzwerkbrücken (mit dem Ziel, iptables, ip6table, arptables und ebtables zu ersetzen). Gleichzeitig wurde die Veröffentlichung der Begleitbibliothek libnftnl 1.2.0 veröffentlicht, die eine Low-Level-API für die Interaktion mit dem nf_tables-Subsystem bereitstellt. Die Änderungen, die erforderlich sind, damit die Version nftables 0.9.9 funktioniert, sind im Linux-Kernel 5.13-rc1 enthalten.

Das nftables-Paket enthält Paketfilterkomponenten, die im Benutzerbereich ausgeführt werden, während die Arbeit auf Kernelebene vom Subsystem nf_tables bereitgestellt wird, das seit Version 3.13 Teil des Linux-Kernels ist. Die Kernel-Ebene stellt nur eine generische protokollunabhängige Schnittstelle bereit, die grundlegende Funktionen zum Extrahieren von Daten aus Paketen, zum Durchführen von Datenoperationen und zur Flusskontrolle bereitstellt.

Die Filterregeln selbst und protokollspezifische Handler werden in User-Space-Bytecode kompiliert. Anschließend wird dieser Bytecode über die Netlink-Schnittstelle in den Kernel geladen und im Kernel in einer speziellen virtuellen Maschine ausgeführt, die BPF (Berkeley Packet Filters) ähnelt. Dieser Ansatz ermöglicht es, die Größe des auf Kernelebene ausgeführten Filtercodes erheblich zu reduzieren und alle Funktionen der Parsing-Regeln und die Logik der Arbeit mit Protokollen in den Benutzerbereich zu verlagern.

Wichtigste Neuerungen:

  • Die Möglichkeit, die Flowtable-Verarbeitung auf die Seite des Netzwerkadapters zu verlagern, wurde implementiert und mithilfe des Flags „Offload“ aktiviert. Flowtable ist ein Mechanismus zur Optimierung des Pfads der Paketumleitung, bei dem der vollständige Durchgang aller Regelverarbeitungsketten nur auf das erste Paket angewendet wird und alle anderen Pakete im Fluss direkt weitergeleitet werden. table ip global { flowtable f { Hook-Ingress-Prioritätsfilter + 1 Geräte = { lan3, lan0, wan } Flags Offload } Chain Forward { Type Filter Hook Forward Priority Filter; Politik akzeptieren; IP-Protokoll { TCP, UDP } Flow Add @f } Chain Post { Typ Nat Hook Postrouting Priority Filter; Politik akzeptieren; oifname „wan“ Maskerade } }
  • Unterstützung für das Anhängen eines Besitzerflags an eine Tabelle hinzugefügt, um die ausschließliche Nutzung der Tabelle durch einen Prozess sicherzustellen. Wenn ein Prozess beendet wird, wird die damit verbundene Tabelle automatisch gelöscht. Informationen zum Prozess werden im Regel-Dump in Form eines Kommentars angezeigt: table ip x { # progname nft flagsowner chain y { type filterhook input priority filter; Politik akzeptieren; Zählerpakete 1 Byte 309 } }
  • Unterstützung für die IEEE 802.1ad-Spezifikation (VLAN-Stacking oder QinQ) hinzugefügt, die ein Mittel zum Ersetzen mehrerer VLAN-Tags in einem einzigen Ethernet-Frame definiert. Um beispielsweise den Typ des externen Ethernet-Frames 8021ad und die VLAN-ID=342 zu überprüfen, können Sie die Konstruktion verwenden ... Ether-Typ 802.1ad VLAN-ID 342, um den externen Typ des Ethernet-Frames 8021ad/VLAN-ID=1, verschachtelt 802.1, zu überprüfen q/vlan id=2 und weitere IP-Paket-Kapselung: ... Ether Typ 8021ad VLAN-ID 1 VLAN-Typ 8021q VLAN-ID 2 VLAN-Typ IP-Zähler
  • Unterstützung für die Verwaltung von Ressourcen mithilfe der einheitlichen Hierarchie cgroups v2 hinzugefügt. Der Hauptunterschied zwischen cgroups v2 und v1 besteht in der Verwendung einer gemeinsamen cgroups-Hierarchie für alle Arten von Ressourcen anstelle separater Hierarchien zur Zuweisung von CPU-Ressourcen, zur Regulierung des Speicherverbrauchs und für E/A. Um beispielsweise zu überprüfen, ob der Vorfahre eines Sockets auf der ersten Ebene cgroupv2 mit der Maske „system.slice“ übereinstimmt, können Sie die Konstruktion verwenden: ... socket cgroupv2 level 1 „system.slice“
  • Es wurde die Möglichkeit hinzugefügt, Komponenten von SCTP-Paketen zu überprüfen (die hierfür erforderliche Funktionalität wird im Linux-Kernel 5.14 verfügbar sein). Um beispielsweise zu prüfen, ob ein Paket einen Block mit dem Typ „Daten“ und dem Feld „Typ“ enthält: ... sctp-Chunk-Daten vorhanden ... sctp-Chunk-Datentyp 0
  • Die Ausführung des Regelladevorgangs wurde mithilfe des Flags „-f“ um etwa das Zweifache beschleunigt. Auch die Ausgabe der Regelliste wurde beschleunigt.
  • Es wird eine kompakte Form zur Überprüfung, ob Flag-Bits gesetzt sind, bereitgestellt. Um beispielsweise zu überprüfen, ob die Statusbits snat und dnat nicht gesetzt sind, können Sie Folgendes angeben: ... ct status ! snat,dnat, um zu prüfen, ob das Syn-Bit in der Bitmaske gesetzt ist syn,ack: ... TCP-Flags syn / syn,ack, um zu prüfen, ob die fin- und rst-Bits in der Bitmaske nicht gesetzt sind syn,ack,fin,rst: ... TCP-Flags ! = fin,rst / syn,ack,fin,rst
  • Erlauben Sie das Schlüsselwort „verdict“ in set/map typeof-Definitionen: add map xm { typeof iifname . IP-Protokoll Bericht: Urteil ;}

Source: opennet.ru

Kommentar hinzufügen