Bylo publikováno vydání balíkového filtru nftables 1.0.1, které sjednocuje rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty (zaměřené na náhradu iptables, ip6table, arptables a ebtables). Potřebné změny pro fungování vydání nftables 1.0.1 jsou součástí jádra Linux 5.16-rc1.
Balíček nftables obsahuje prvky filtrování paketů pracující v uživatelském prostoru, zatímco na úrovni jádra zajišťuje provoz subsystém nf_tables, který je součástí jádra Linux od verze 3.13. Na úrovni jádra je poskytováno pouze obecné rozhraní, které nezávisí na konkrétním protokolu a poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku.
Samotná pravidla filtrování a specifické zpracovatele protokolů se kompilují do bytecode v uživatelském prostoru, poté je tento bytecode načten do jádra pomocí rozhraní Netlink a vykonává se v jádře v specializované virtuálním strojipodobě jako BPF (Berkeley Packet Filters). Tento přístup výrazně snižuje velikost kódu filtrování, který funguje na úrovni jádra a přesouvá všechny funkce analýzy pravidel a logiky práce s protokoly do uživatelského prostoru.
Hlavní novinky:
- Snížena spotřeba paměti při načítání velkých seznamů set a map.
- Zrychleno opětovné načítání seznamů set a map.
- Zrychleno zobrazování vybraných tabulek a řetězců ve velkých souborech pravidel. Například doba vykonání příkazu „nft list ruleset“ pro zobrazení souboru pravidel s 100 tisíci řádky činí 3.049 sekundy, a při zobrazování pouze tabulek nat a filter („nft list table nat“, „nft list table filter“) se zkracuje na 1.969 a 0.697 sekund.
- Zrychleno vykonávání dotazů s volbou „—terse“ při zpracování pravidel s velkými seznamy set a map.
- Byla poskytována možnost filtrování provozu z řetězce „egress“, zpracovávaného na stejné úrovni jako egress zpracovatel v řetězci netdev (hook egress), tj. ve fázi, kdy ovladač přijímá paket z síťového zásobníku jádra. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- Povoleno mapování a úprava bytů v hlavičce a obsahu paketu na zadaném posunutí. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter
Zdroj: opennet.ru
