Freigabe des Paketfilters , das sich als Ersatz für iptables, ip6tables, arptables und ebtables entwickelt, indem die Schnittstellen zur Paketfilterung für IPv4, IPv6, ARP und Brückenvereinheitlicht werden. Das Paket nftables umfasst Komponenten des Paketfilters, die im Benutzerspace arbeiten, während auf der Kernel-Ebene das nf_tables-Subsystem arbeitet, das seit der Version 3.13 des Linux-Kernels enthalten ist. Die für den Betrieb von nftables 0.9.2 erforderlichen Änderungen sind in den Linux-Kernel 5.3 integriert.
Im Kernel 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 Datenoperationen und zur Steuerung des Flusses bereitstellt. Die Logik der Filterung und die spezifischen Protokoll-Handler werden in Bytecode im Benutzerspeicher kompiliert, der dann über die Netlink-Schnittstelle in den Kernel geladen und in einer speziellen virtuellen Maschine ausgeführt wird, die an BPF (Berkeley Packet Filters) erinnert. Dieser Ansatz ermöglicht es, die Größe des im Kernel arbeitenden Filtercodes erheblich zu reduzieren und alle Funktionen zur Regelparser und zur Logik der Protokollverarbeitung in den Benutzerspeicher auszulagern.
Hauptneuheiten:
- Möglichkeit zur Überprüfung der Portnummer aus dem Header des Transportschichtpakets unabhängig vom Protokolltyp der Schicht 4:
add rule x y ip protocol { tcp, udp } th dport 53
- Unterstützung der Wiederherstellung der Lebensdauer von Elementen:
add element ip x y { 1.1.1.1 timeout 30s expires 15s }
- Möglichkeit zur Überprüfung einzelner Optionen (lsrr, rr, ssrr und ra) aus IPv4-Paketen:
add rule x y ip option rr exists drop
Für Routing-Optionen ist eine Überprüfung der Felder Typ, ptr, Länge und addr möglich:
add rule x y ip option rr type 1 drop
- In Ausdrücken ist jetzt die Angabe von Netzwerkpräfixen und Adressbereichen zulässig:
iifname ens3 snat to 10.0.0.0/28
iifname ens3 snat to 10.0.0.1-10.0.0.15 - Unterstützung der 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 Angabe der Priorität einer Kette kann jetzt sowohl numerisch als auch symbolisch erfolgen:
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; } - Die Unterstützung des Moduls synproxy wurde implementiert. Um zum Beispiel den TCP-Port 8888 unter den Schutz von synproxy zu stellen, können Sie die folgende Regel verwenden:
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 drop
}
} - Um in der Tabelle conntrack die mit der aktuellen Verbindung erwarteten zusätzlichen Verbindungen zu definieren, die in Protokollen und Szenarien mit mehreren Verbindungsanforderungen verwendet werden, können jetzt Richtlinien über die Standardregelsets definiert werden. Zum Beispiel können Sie die folgenden Regeln angeben, um die nach der Verbindung zu TCP-Port 8888 erwarteten anschließenden Verbindungen zu Port 5432 zu definieren:
table x {
ct expectation myexpect {
protocol tcp
dport 5432
timeout 1h
size 12
l3proto ip
}chain input {
type filter hook input priority 0;
ct state new tcp dport 8888 ct expectation set myexpect
ct state established,related counter accept
}
}
Quelle: opennet.ru
