Veröffentlichung des Paketfilters nftables 1.1.0

Die Veröffentlichung der Version 1.1.0 des Paketfilters nftables wurde bekanntgegeben, die die Filterinterfaces fĂŒr IPv4, IPv6, ARP und NetzbrĂŒcken vereinheitlicht (zielt darauf ab, iptables, ip6tables, arptables und ebtables zu ersetzen). Die erhebliche VersionsĂ€nderung steht nicht im Zusammenhang mit grundlegenden Änderungen, sondern ist lediglich eine Folge der fortlaufenden Dezimalnummerierung (die vorherige Version war 1.0.9). Gleichzeitig wurde die begleitende Bibliothek libnftnl 1.2.7 veröffentlicht, die eine Low-Level-API fĂŒr die Interaktion mit dem nf_tables-Subsystem 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:

  • In Map-AusdrĂŒcken wurde die UnterstĂŒtzung fĂŒr Variablen hinzugefĂŒgt: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
  • Die UnterstĂŒtzung fĂŒr VLAN wurde hinzugefĂŒgt: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
  • FĂŒr die AusdrĂŒcke „log“ wurde ein neuer String-PrĂ€prozessor mit UnterstĂŒtzung fĂŒr Variablen implementiert: define message=„test“ log prefix „my $message“
  • Bei der Berechnung des Wertes des Ausdrucks „meta hour“ wurde die Verarbeitung von negativen Verschiebungen in der Zeitzone, die ĂŒber die Umgebungsvariable TZ festgelegt wird, implementiert: TZ=UTC-4 nft add rule x y meta hour „22:00“
  • Die Umwandlung der Byte-Reihenfolge bei Verwendung von ct- und meta-AusdrĂŒcken sowie bei der Verwendung von Merge-Operationen und der Angabe von Bereichen in Set-Sammlungen wurde sichergestellt. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 der Bytecode wird erhalten: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
  • Die UnterstĂŒtzung des Befehls „replace rule“ wurde wiederhergestellt. replace rule ip t1 c1 handle 3 ‘jhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }’
  • Die Möglichkeit, NetzwerkgerĂ€te zu bestehenden Flow-Tabellen hinzuzufĂŒgen, wurde wiederhergestellt: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
  • Probleme beim Einsatz des Befehls „create set“ wurden behoben: define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
  • Probleme bei der Verwendung der digitalen Darstellung von TCP-Optionen wurden behoben: tcp option 254
  • Probleme bei der Verwendung von meta- und ct-AusdrĂŒcken mit Map-Sammlungen wurden gelöst: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
  • In den AusdrĂŒcken payload und concat ist die Angabe von Daten grĂ¶ĂŸer als 512 Byte nicht erlaubt.
  • Beim AusfĂŒhren des Befehls „nft describe“ wird die BerĂŒcksichtigung der Werte aus den Dateien group, rt_mark und rt_realms, die in den Verzeichnissen /etc/iproute2/ und /use/share/iproute2/ abgelegt sind, realisiert. # nft describe meta rtclassid meta expression, datatype realm (Routing-Bereich) (Basistyp Ganzzahl), 32 Bits vorab definierte symbolische Konstanten aus /etc/iproute2/rt_realms (in Dezimal): cosmos 0 Verweigern Sie die Anweisung mit Bereich meta mark set 0-100
  • Die Operation zur Ausgabe der Tabellenliste wurde beschleunigt. Die UnterstĂŒtzung der Option -t/—terse wurde fĂŒr die Befehle „list table“ und „list set“ implementiert.
  • Die Umwandlung von meter-AusdrĂŒcken in dynamische set-Sets wurde sichergestellt: add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } wird umgewandelt in set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
  • Im JSON-Format wurde die UnterstĂŒtzung fĂŒr synproxy-Objekte und gemappte Sets mit aggregierten Daten hinzugefĂŒgt.
  • In den als JSON definierten Sets wurde die UnterstĂŒtzung des Flags auto-merge implementiert.
  • Bei Verwendung des JSON-Formats ist die Angabe mehrerer GerĂ€te im Block „chain“ erlaubt.
  • Bei Verwendung der Optionen -f/—filename wird die Verarbeitung von Pfaden relativ zum Verzeichnis der aktuellen Datei sichergestellt.
  • Bei Verwendung der Optionen -I/—include wird die Standard-Pfaddurchsuchung jetzt von hinten zur Liste durchgefĂŒhrt.
  • Die FunktionalitĂ€t der Optionen -o/—optimize mit AusdrĂŒcken, die ZĂ€hlerwerte enthalten, wurde optimiert: # nft -c -o -f ruleset.nft ZusammenfĂŒhren: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft :6:17-59: ct state established,related counter accept in: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } ZusammenfĂŒhren: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept in: tcp dport { 80, 123 } counter accept ZusammenfĂŒhren: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop in: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 1.1.1.2 . 3.3.3.3 counter : drop }
  • Die KompatibilitĂ€t mit SET-Dump-Dateien, die in nftables vor Version 0.9.8 erstellt wurden, wurde wiederhergestellt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4