Veröffentlichung des Paketfilters nftables 1.0.3.

Die Veröffentlichung der Paketfilterversion nftables 1.0.3 wurde bekannt gegeben. Diese Version vereinheitlicht die Schnittstellen zur Paketfilterung für IPv4, IPv6, ARP und Netzwerkschnittstellen (zielt darauf ab, iptables, ip6tables, arptables und ebtables zu ersetzen). Die für den Betrieb von nftables 1.0.3 erforderlichen Änderungen sind im Linux-Kernel 5.18 enthalten.

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.

Hauptneuheiten:

  • In den set-Listen wurde die Unterstützung für die Namenszuordnung von Netzwerkschnittstellen anhand von Masken hinzugefügt, beispielsweise durch Verwendung des „*“-Symbols: table inet testifsets { set simple_wild { type ifname flags interval elements = { «abcdef*», «othername», «ppp0» } } chain v4icmp { type filter hook input priority 0; policy accept; iifname @simple_wild counter packets 0 bytes 0 iifname { «abcdef*», «eth0» } counter packets 0 bytes 0 } }
  • Die automatische Zusammenführung überlappender Elemente im Set-Listenbetrieb wurde implementiert. Zuvor fand die Zusammenführung bei Aktivierung der Option „auto-merge“ nur während der Regeldefinition statt, nun wird sie auch beim inkrementellen Hinzufügen neuer Elemente während des Betriebs ausgelöst. Zum Beispiel wird bei der Definition die Liste set y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8, 3.3.3.4, 3.3.3.5 } } in elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } umgewandelt. Wenn dann neue Elemente hinzugefügt werden, wie # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 }, sieht es so aus: elements = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Beim Entfernen einzelner Elemente aus der Liste, die innerhalb bestehender Elemente mit Bereich liegen, wird der Bereich verkürzt oder geteilt.

  • Im Regeloptimierer, der mit der Option „-o/—optimize“ aufgerufen wird, wurde die Unterstützung für die Kombination mehrerer Adressübersetzungsregeln (NAT) in eine Map-Liste hinzugefügt. Zum Beispiel für die Menge # 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 } }

    Die Ausführung von „nft -o -c -f ruleset.nft“ führt zur Umwandlung einzelner Regeln „ip saddr“ in eine Map-Liste: 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 }

    Ebenso können auch Raw-Ausdrücke in Map-Listen umgewandelt werden: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th,160,128 0x0e31393032383939353831343037320e goto nat_dns_this_5301 udp length 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp length 62-78 @th,160,128 0x0e32393535373539353636383732310e goto nat_dns_saturn_5302 udp length 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_dns_saturn_5303 drop } }

    Nach der Optimierung erhalten wir eine map-Liste: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }

  • Die Verwendung von raw-Ausdrücken in Verknüpfungsoperationen ist erlaubt. Zum Beispiel: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } oder table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
  • Die Unterstützung für die Angabe ganzzahliger Felder in Headern bei Verknüpfungsoperationen wurde hinzugefügt: table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : accept, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; policy drop; udp length . @ih,32,32 vmap @m1 } }
  • Unterstützung für das Zurücksetzen von TCP-Optionen hinzugefügt (funktioniert nur mit Linux-Kernel 5.18+): tcp flags syn reset tcp option sack-perm
  • Die Ausführung von Befehlsausgaben für Ketten („nft list chain x y“) wurde beschleunigt.

Quelle: opennet.ru

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