Veröffentlichung des Paketfilters nftables 1.0.2

Die Veröffentlichung des Paketfilters nftables 1.0.2 wurde veröffentlicht, welcher die Filterungsinterfaces für IPv4, IPv6, ARP und Netzwerkbrücken vereinheitlicht (zielt darauf ab, iptables, ip6tables, arptables und ebtables zu ersetzen). Die notwendigen Änderungen für die Funktionsfähigkeit von nftables 1.0.2 sind in den Linux-Kernel 5.17-rc eingeflossen.

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:

  • Ein Regeloptimierungsmodus wurde hinzugefügt, der durch eine neue Option „-o“ („--optimize“) aktiviert werden kann, die mit der Option „--check“ kombiniert werden kann, um Änderungen in der Datei mit dem Regelset zu überprüfen und zu optimieren, ohne sie tatsächlich zu laden. Die Optimierung kann ähnliche Regeln zusammenfassen, zum Beispiel die Regeln: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.5 accept ip saddr 1.1.1.1 ip daddr 2.2.2.2 accept ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop

    werden in meta iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.5 } accept ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 : accept, 2.2.2.2 . 3.3.3.3 : drop }

    Beispiel für die Verwendung: # nft -c -o -f ruleset.test Zusammenführen: ruleset.nft:16:3-37: ip daddr 192.168.0.1 counter accept ruleset.nft:17:3-37: ip daddr 192.168.0.2 counter accept ruleset.nft:18:3-37: ip daddr 192.168.0.3 counter accept in: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } counter packets 0 bytes 0 accept

  • In den Set-Listen wurde die Möglichkeit zur Angabe von IP- und TCP-Optionen sowie von SCTP-Chunks implementiert: set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp chunk init num-inbound-streams elements = { 1, 4 } } chain c5 { ip option ra value @s5 accept } chain c7 { sctp chunk init num-inbound-streams @s7 accept }
  • Unterstützung für die TCP-Optionen fastopen, md5sig und mptcp hinzugefügt.
  • Unterstützung für die Verwendung des Subtyps mp-tcp in Zuordnungen hinzugefügt: tcp option mptcp subtype 1
  • Der Filtercode, der auf der Kernel-Seite arbeitet, wurde verbessert.
  • Für die Flowtable wurde vollständige Unterstützung für das JSON-Format implementiert.
  • Die Möglichkeit zur Verwendung der Aktion „reject“ in Ethernet-Frame-Zuordnungen wurde bereitgestellt. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 reject

Quelle: opennet.ru

60GB SSD 8Gb DDR4