Veröffentlichung des Paketfilters , das sich als Ersatz für iptables, ip6tables, arptables und ebtables entwickelt, indem es die Schnittstellen zur Paketfilterung für IPv4, IPv6, ARP und Netzwerkbrücken einheitlich gestaltet. Das nftables-Paket umfasst Komponenten des Paketfilters, die im Benutzermodus arbeiten, während auf Kernel-Ebene das nf_tables-Subsystem, das seit der Version 3.13 Teil des Linux-Kernels ist, die Funktionalität bereitstellt. Die für das nftables 0.9.2 erforderlichen Änderungen sind in den Kernel 5.3 integriert.
Auf Kernel-Ebene steht nur eine allgemeine Schnittstelle zur Verfügung, die unabhängig vom spezifischen Protokoll grundlegende Funktionen zum Extrahieren von Daten aus Paketen, zur Datenverarbeitung und zur Flusssteuerung bietet. Die Filterlogik und die protokollspezifischen Handler werden in Bytecode im Benutzerspeicher kompiliert, welcher dann über die Netlink-Schnittstelle in den Kernel geladen wird und in einer speziellen virtuellen Maschine, die an BPF (Berkeley Packet Filters) erinnert, ausgeführt wird. Dieser Ansatz ermöglicht eine signifikante Reduzierung der Filtercodegröße, die auf Kernel-Ebene arbeitet, und verlagert alle Funktionen zur Regelanalyse und Logikverarbeitung von Protokollen in den Benutzerspeicher.
Hauptneuheiten:
- Die Möglichkeit, die Portnummer aus dem Header eines Transportebene-Pakets unabhängig vom Typ des Protokolls der Schicht 4 zu überprüfen:
add rule x y ip protocol { tcp, udp } th dport 53
- Unterstützung zur Wiederherstellung der Lebensdauer eines Elementes:
add element ip x y { 1.1.1.1 timeout 30s expires 15s }
- Die Möglichkeit, einzelne Optionen (lsrr, rr, ssrr und ra) aus IPv4-Paketen zu überprüfen:
add rule x y ip option rr exists drop
Für Routing-Optionen kann die Überprüfung der Felder type, ptr, length und addr erfolgen:
Regel x y ip Option rr Typ 1 fallen lassen
- In Ausdrücken ist jetzt die Angabe von Netzwerkpräfixen und Adressbereichen erlaubt:
iifname ens3 snat to 10.0.0.0/28
iifname ens3 snat to 10.0.0.1-10.0.0.15 - Unterstützung für die Verwendung von Variablen in der Definition von Ketten:
define default_policy = accept
add chain ip foo bar { type filter hook input priority filter; policy $default_policy } - Die Priorität der Kette kann jetzt sowohl numerisch als auch symbolisch angegeben werden:
define prio = filter
define prionum = 10
define prioffset = «filter — 150»add table ip foo
add chain ip foo bar { type filter hook input priority $prio; }
add chain ip foo ber { type filter hook input priority $prionum; }
add chain ip foo bor { type filter hook input priority $prioffset; } - Unterstützung des Moduls synproxy implementiert. Zum Beispiel können für den Schutz des TCP-Ports 8888 mit synproxy folgende Regeln verwendet werden:
table ip x {
chain y {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain z {
type filter hook forward priority filter; policy accept;
tcp dport 8888 ct state invalid,untracked synproxy mss 1460 \
wscale 7 timestamp sack-perm ct state invalid fallen lassen
}
} - Um in der conntrack-Tabelle die mit der aktuellen Verbindung erwarteten zusätzlichen Verbindungen zu bestimmen, die in Protokollen und Szenarien verwendet werden, die mehrere Verbindungen erfordern, können jetzt Richtlinien über standardmäßige Regelsets definiert werden. Zum Beispiel können die folgenden Regeln angegeben werden, um die erwarteten Anschlussverbindungen zum TCP-Port 8888 wahlweise zu dem Port 5432 zu bestimmen:
Tabelle x {
ct erwartung meineerwartung {
Protokoll tcp
Zielport 5432
Timeout 1h
Größe 12
l3proto ip
}Kette Eingabe {
Typ Filter-Hook Eingabe Priorität 0;
ct state neu tcp Zielport 8888 ct erwartung setzen meineerwartung
ct state etabliert,verwandt Zähler akzeptieren
}
}
Quelle: opennet.ru
