Veröffentlichung des Paketfilters , das sich als Ersatz für iptables, ip6tables, arptables und ebtables entwickelt, indem es die Schnittstellen für die Paketfilterung für IPv4, IPv6, ARP und Netzwerkbrücken vereinheitlicht. Das nftables-Paket enthält Komponenten des Paketfilters, die im Benutzermodus arbeiten, während auf Kernel-Ebene das nf_tables-Subsystem, das Teil des Linux-Kernels ist, seit Version 3.13 arbeitet. Die für die Funktion von nftables 0.9.3 erforderlichen Änderungen sind in die zukünftige Version des Linux-Kernels 5.5 aufgenommen.
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:
- Unterstützung für die zeitliche Paketübereinstimmung. Es ist möglich, Zeit- und Datumsbereiche zu definieren, in denen die Regel aktiv ist, sowie die Aktivierung an bestimmten Wochentagen zu konfigurieren. Es wurde auch eine neue Option „-T“ hinzugefügt, um die epochale Zeit in Sekunden auszugeben.
meta time "2019-12-24 16:00" — "2020-01-02 7:00"
meta hour "17:00" — "19:00"
meta day "Fri" - Unterstützung für die Wiederherstellung und Speicherung von SELinux-Tags (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - Unterstützung für map-Listen von synproxy, die es ermöglichen, mehr als eine Regel für den Backend zu definieren.
table ip foo {
synproxy https-synproxy {
mss 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
mss 1460
wscale 5
}chain pre {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain bar {
type filter hook forward priority filter; policy accept;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "other-synproxy" }
}
} - Dynamisches Entfernen von Elementen aus Mengen in den Paketverarbeitungsregeln.
nft add rule … delete @set5 { ip6 saddr . ip6 daddr }
- Unterstützung für die Zuordnung von VLANs anhand der im Metadaten des Netzwerkbrückeninterfaces definierten ID und Protokoll.
meta ibrpvid 100
meta ibrvproto vlan - Die Option „-t“ („—terse“) zum Ausschließen von Set-Elementen bei der Anzeige von Regeln. Bei der Ausführung von „nft -t list ruleset“ wird ausgegeben:
table ip x {
set y {
type ipv4_addr
}
}Wenn Sie „nft list ruleset“ verwenden,
table ip x {
set y {
type ipv4_addr
elements = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - Die Möglichkeit, mehrere Geräte in netdev-Ketten anzugeben (funktioniert nur mit Kernel 5.5) zur Kombination von Standardfilterregeln.
add table netdev x
add chain netdev x y { \
type filter hook ingress devices = { eth0, eth1 } priority 0;
} - Die Möglichkeit, Beschreibungen von Datentypen hinzuzufügen.
# nft describe ipv4_addr
datatype ipv4_addr (IPv4-Adresse) (basetype integer), 32 bits - Die Möglichkeit, ein CLI-Interface mit der Bibliothek linenoise anstelle von libreadline zu erstellen.
./configure —with-cli=linenoise
Quelle: opennet.ru
