Veröffentlichung des Paketfilters nftables 1.0.5

Die Veröffentlichung der Paketfilter nftables 1.0.5 wurde bekannt gegeben, die die Schnittstellen zur Paketfilterung für IPv4, IPv6, ARP und Netzwerkbrücken vereinheitlicht (zielt darauf ab, iptables, ip6table, arptables und ebtables zu ersetzen). Gleichzeitig wurde die Veröffentlichung der begleitenden Bibliothek libnftnl 1.2.3 veröffentlicht, die eine niedrigstufige API zur Interaktion mit dem nf_tables-Subsystem bietet.

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:

  • Im Regeloptimierer, der beim Angeben der Option „-o/—optimize“ aufgerufen wird, wurden Probleme bei der Zusammenführung von Regeln, Map- und Set-Listen behoben. # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } } # nft -o -c -f ruleset.nft Merging: ruleset.nft:4:3-52: ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ruleset.nft:5:3-52: ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 into: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }
  • Bei der Zusammenführung von Ethernet- und VLAN-Elementen wurde die Definition einer dynamischen Set-Liste ermöglicht, die auf den Paketpfadparametern basiert. add table netdev x add chain netdev x y { type filter hook ingress device enp0s25 priority 0; } add set netdev x macset { typeof ether daddr . vlan id; flags dynamic,timeout; } add rule netdev x y update @macset { ether daddr . vlan id timeout 60s } add rule netdev x y ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 0a:0b:0c:0d:0e:0f . 4095 } counter accept
  • Die Anzeige von Regeln mit Map-Listen, die Masken in Schnittstellennamen enthalten, wurde eingerichtet. table inet filter { chain INPUT { iifname vmap { „eth0“ : jump input_lan, „wg*“ : jump input_vpn } } chain input_lan {} chain input_vpn {} }
  • Regressive Änderungen, die zu einer falschen lexikalischen Analyse gültiger Regeln führten, wurden behoben.
  • Probleme mit der langsamen Verarbeitung und dem automatischen Merging von großen Listen mit Elementen, die Wertebereiche definieren, wurden behoben.
  • Ein Absturz beim Hinzufügen von Elementen zu einer ungültigen Set-Liste wurde behoben.

Quelle: opennet.ru

60GB SSD 8Gb DDR4