Veröffentlichung des Paketfilters nftables 1.1.0

Die Ausgabe des nftables-Paketfilters 1.1.0 wurde veröffentlicht, die die Filterinterfaces für IPv4, IPv6, ARP und Netzwerkbrücken vereinheitlicht (zielt darauf ab, iptables, ip6tables, arptables und ebtables zu ersetzen). Die signifikante Versionsänderung steht nicht im Zusammenhang mit grundlegenden Änderungen, sondern ist lediglich eine Folge der fortlaufenden numerischen Zählung im Dezimalsystem (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 die Funktion auf Kernel-Ebene von dem seit Version 3.13 im Linux-Kernel integrierten nf_tables-Subsystem bereitgestellt wird. Auf Kernel-Ebene wird lediglich eine allgemeine Schnittstelle bereitgestellt, die unabhängig vom spezifischen Protokoll ist und grundlegende Funktionen zum Extrahieren von Daten aus Paketen, zur Durchführung von Operationen mit Daten und zur Steuerung des Datenflusses bietet.

Die Filterregeln und protokollspezifischen Handler werden im Benutzermodus in Bytecode kompiliert, der anschließend über die Netlink-Schnittstelle in den Kernel geladen und dort in einem speziellen Kontext ausgeführt wird. virtuellen Maschine, die BPF (Berkeley Packet Filter) ähnelt. Dieser Ansatz ermöglicht eine signifikante Reduzierung der Größe des Filtercodes, der auf Kernel-Ebene arbeitet, und verlagert alle Funktionen zur Regelparserung und Logikbearbeitung von Protokollen in den Benutzermodus.

Wesentliche Ä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 } }
  • VLAN-Unterstützung 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 Ausdrücke „log“ wurde ein neuer String-Preprozessor mit Unterstützung für Variablen aktiviert: define message=„test“ log prefix „my $message“
  • Bei der Berechnung des Wertes des Ausdrucks „meta hour“ wurde die Verarbeitung negativer Verschiebungen in der Zeitzone, die über die Umgebungsvariable TZ festgelegt ist, implementiert: TZ=UTC-4 nft add rule x y meta hour „22:00“
  • Die Umwandlung der Byte-Reihenfolge bei der Verwendung von ct- und meta-Ausdrücken sowie bei den Fusionierungsoperationen und der Angabe von Bereichen in Set-Sammlungen wurde sichergestellt. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 wird folgender Bytecode erzeugt: [ 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, Netzgeräte zu bestehenden Flowtables hinzuzufügen, wurde wiederhergestellt: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
  • Probleme bei der Verwendung 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-Ausdrücken und ct mit Map-Sets wurden behoben: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
  • In den Ausdrücken payload und concat ist die Angabe von Daten, die größer als 512 Bytes sind, nicht erlaubt.
  • Bei der Ausführung des Befehls „nft describe“ wird die Berücksichtigung der Werte aus den Dateien group, rt_mark und rt_realms, die sich in den Verzeichnissen /etc/iproute2/ und /usr/share/iproute2/ befinden, umgesetzt. # nft describe meta rtclassid meta expression, datatype realm (routing realm) (basetype integer), 32 bits vorab definierte symbolische Konstanten aus /etc/iproute2/rt_realms (in Dezimal): cosmos 0 Ablehnungsanweisung mit Bereich meta mark set 0-100
  • Die Ausgabeoperation für die Liste der Tabellen wurde beschleunigt. Die Unterstützung für die Option -t/—terse zur Beschleunigung der Befehle „list table“ und „list set“ wurde umgesetzt.
  • Die Umwandlung von Meter-Ausdrücken in dynamische Set-Sets wurde ermöglicht: 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 Map-Sets mit kombinierten Daten hinzugefügt.
  • In den in JSON festgelegten Set-Sets wurde die Unterstützung für das auto-merge-Flag umgesetzt.
  • Bei der Verwendung des JSON-Formats ist es erlaubt, mehrere Geräte im Block „chain“ anzugeben.
  • Bei der Verwendung der Optionen -f/—filename wird die Verarbeitung von Pfaden relativ zum Verzeichnis der aktuellen Datei sichergestellt.
  • Bei der Verwendung der Optionen -I/—include erfolgt die Aufzählung der Standard-Pfade nun von Ende der Liste.
  • Die Funktion der Optionen -o/—optimize wurde mit Ausdrücken, die Zählervariablen enthalten, überarbeitet: # 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 Dumps des Typs set, die vor nftables Version 0.9.8 erstellt wurden, wurde wiederhergestellt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster