nftables-Paketfilter 1.0.7-Version

Die Paketfilterversion nftables 1.0.7 wurde veröffentlicht und vereinheitlicht Paketfilterschnittstellen für IPv4, IPv6, ARP und Netzwerkbrücken (mit dem Ziel, iptables, ip6table, arptables und ebtables zu ersetzen). Das nftables-Paket enthält Paketfilterkomponenten, die im Userspace laufen, während die Kernel-Ebene vom nf_tables-Subsystem bereitgestellt wird, das seit Release 3.13 Teil des Linux-Kernels ist. Auf Kernel-Ebene wird nur eine generische protokollunabhängige Schnittstelle bereitgestellt, die grundlegende Funktionen zum Extrahieren von Daten aus Paketen, zum Durchführen von Operationen an Daten und zum Steuern des Flusses bereitstellt.

Die Filterregeln selbst und protokollspezifische Handler werden in User-Space-Bytecode kompiliert. Anschließend wird dieser Bytecode über die Netlink-Schnittstelle in den Kernel geladen und im Kernel in einer speziellen virtuellen Maschine ausgeführt, die BPF (Berkeley Packet Filters) ähnelt. Dieser Ansatz ermöglicht es, die Größe des auf Kernelebene ausgeführten Filtercodes erheblich zu reduzieren und alle Funktionen der Parsing-Regeln und die Logik der Arbeit mit Protokollen in den Benutzerbereich zu verlagern.

Wichtigste Änderungen:

  • Für Linux 6.2+-Systeme wurde Unterstützung für den Vxlan-, Geneve-, Gre- und Gretap-Protokollabgleich hinzugefügt, sodass einfache Ausdrücke die Header in gekapselten Paketen überprüfen können. Um beispielsweise die IP-Adresse im Header eines verschachtelten Pakets von VxLAN zu überprüfen, können Sie jetzt die Regeln verwenden (ohne zuerst den VxLAN-Header entkapseln und den Filter an die vxlan0-Schnittstelle binden zu müssen): ... udp dport 4789 VXLAN-IP-Protokoll udp ... udp dport 4789 vxlan ip saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1}
  • Unterstützung für das automatische Zusammenführen von Residuen nach dem teilweisen Löschen eines Set-List-Elements implementiert, was das Löschen eines Elements oder eines Teils eines Bereichs aus einem vorhandenen Bereich ermöglicht (zuvor konnte ein Bereich nur vollständig gelöscht werden). Nach dem Entfernen von Element 25 aus einer Set-Liste mit den Bereichen 24–30 und 40–50 bleiben beispielsweise 24, 26–30 und 40–50 in der Liste. Die für das Funktionieren der automatischen Zusammenführung erforderlichen Korrekturen werden in Korrekturversionen der stabilen Zweige des Kernels ab Version 5.10 angeboten. # NFT List Ruleset Table IP x { Set Y { Typeof TCP Dport Flags Interval Auto-Merge Elements = { 24-30, 40-50 } } } y { typeof tcp dport flags interrupt auto-merge elements = { 25, 24-26, 30-40 } } }
  • Erlauben Sie die Verwendung von Kontakten und Bereichen bei der Adressübersetzungszuordnung (NAT). Tabelle ip nat { Chain Prerouting { Typ Nat Hook Prerouting Priority dstnat; Politik akzeptieren; dnat zu ip daddr . TCP-Port-Karte { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } persistent } }
  • Unterstützung für den Ausdruck „last“ hinzugefügt, mit dem Sie den Zeitpunkt der letzten Verwendung eines Regelelements oder einer Satzliste ermitteln können. Diese Funktion wird seit Linux-Kernel 5.14 unterstützt. table ip x { set y { typeof ip daddr . TCP-Portgröße 65535 Flags dynamisch, Timeout letztes Timeout 1h } chain z { Typ Filter Hook Ausgabeprioritätsfilter; Politik akzeptieren; update @y { ip daddr . tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip daddr . TCP-Portgröße 65535 Flags dynamisch, Timeout letztes Timeout 1h Elemente = { 172.217.17.14 . 443 zuletzt verwendet 1s591ms Timeout 1h läuft ab 59m58s409ms, 172.67.69.19 . 443 zuletzt verwendet 4s636ms Timeout 1h läuft ab 59m55s364ms, 142.250.201.72 . 443 zuletzt verwendet 4s748ms Timeout 1h läuft ab 59m55s252ms, 172.67.70.134 . 443 zuletzt verwendet 4s688ms Timeout 1h läuft ab 59m55s312ms, 35.241.9.150 . 443 zuletzt verwendet 5s204ms Timeout 1h läuft ab 59m54s796ms, 138.201.122.174 . 443 zuletzt verwendet 4s537ms Timeout 1h läuft ab 59m55s463ms, 34.160.144.191 . 443 zuletzt verwendet 5s205ms Timeout 1h läuft ab 59m54s795ms, 130.211.23.194 . 443 zuletzt verwendet 4s436ms Timeout 1h läuft ab 59m55s564ms } } }
  • Es wurde die Möglichkeit hinzugefügt, Quoten in Set-Listen zu definieren. Um beispielsweise ein Datenverkehrskontingent für jede Ziel-IP-Adresse zu definieren, können Sie Folgendes angeben: table netdev x { set y { typeof ip daddr size 65535 quote over 10000 MBytes } chain y { type filterhook egress device „eth0“ priority filter; Politik akzeptieren; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list Ruleset table netdev x { set y { type ipv4_addr size 65535 quote over 10000 mbytes elements = { 8.8.8.8. 10000 Kontingent über 196 MByte verwendet 0 Bytes } } Kette y { Typ Filter Hook Egress Device „ethXNUMX“ Prioritätsfilter; Politik akzeptieren; ip daddr @y drop } }
  • Die Verwendung von Konstanten in Set-Listen ist erlaubt. Wenn Sie beispielsweise eine Liste mit Zieladresse und VLAN-ID als Schlüssel verwenden, können Sie die VLAN-Nummer direkt angeben (daddr . 123): table netdev t { set s { typeof ether saddr . VLAN-ID-Größe 2048 Flags dynamisch, Timeout-Timeout 1 m } Kette c { Typ Filter Hook Ingress Gerät eth0 Priorität 0; Politik akzeptieren; Ether-Typ != 8021q Update @s { Ether Daddr . 123 } Zähler } }
  • Es wurde ein neuer Befehl „destroy“ hinzugefügt, um Objekte bedingungslos zu löschen (im Gegensatz zum Befehl delete wird kein ENOENT generiert, wenn versucht wird, ein fehlendes Objekt zu löschen). Erfordert mindestens den Linux 6.3-rc-Kernel, um zu funktionieren. Tabelle IP-Filter zerstören

Source: opennet.ru

Kommentar hinzufügen