Veröffentlichung des Paketfilters nftables 1.1.6

Die Veröffentlichung des Paketfilters nftables 1.1.6 wurde bekannt gegeben, der die Schnittstellen für die Paketfilterung von IPv4, IPv6, ARP und Netzwerkbrücken vereinheitlicht (zielt darauf ab, iptables, ip6table, arptables und ebtables zu ersetzen). Gleichzeitig wurde auch die Veröffentlichung der zugehörigen Bibliothek libnftnl 1.3.1 bekannt gegeben, die eine Low-Level-API für die Interaktion mit dem nf_tables-System bereitstellt.

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.

Hauptänderungen:

  • Vollständige Unterstützung für Vorlagen leichter Tunnel wie vxlan, geneve und erspan wurde bereitgestellt: table netdev global { tunnel t1 { id 10 ip saddr 192.168.2.10 ip daddr 192.168.2.11 sport 1025 dport 20020 ttl 1 erspan { version 1 index 2 } } tunnel t2 { id 10 ip saddr 192.168.3.10 ip daddr 192.168.3.11 sport 1025 dport 21021 ttl 1 erspan { version 1 index 2 } } chain in { type filter hook ingress device veth0 priority 0; tunnel name ip saddr map { 10.141.10.12 : «t1», 10.141.10.13 : «t2» } fwd to erspan1 } } Vor dem Laden der Regeln muss ein Netzwerkinterface erspan1 erstellt werden: ip link add dev erspan1 type erspan external
  • Unterstützung für Masken in den Namen von Netzwerkinterfaces in den netdev-Handlern wurde hinzugefügt, zum Beispiel, um eine Basiskette in den Filter für eingehenden Datenverkehr für alle vlan-Geräte hinzuzufügen, kann man angeben: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
  • Auf Systemen mit dem Linux-Kernel 6.18+ wurde die Unterstützung des Transports von L2-Frames über Netzwerkbrückeninterfacen zur lokalen Verarbeitung implementiert, zum Beispiel, um alle Ethernet-Frames für die MAC-Adresse de:ad:00:00:be:ef in den IP-Stack zu leiten, kann angeben werden: table bridge global { chain pre { type filter hook prerouting priority 0; policy accept; ether daddr de:ad:00:00:be:ef meta pkttype set host ether daddr set meta ibrhwaddr accept } }
  • Eine neue Infrastruktur für Fuzzing-Tests mit dem Toolset afl++ (american fuzzy lop++) wurde hinzugefügt, das während des Build-Prozesses über „./configure —with-fuzzer“ aktiviert werden kann.

Quelle: opennet.ru

60GB SSD 8Gb DDR4