Bol uvoľnený balík nfilter nftables 1.0.1, ktorý zjednocuje rozhrania pre filtrovanie paketov pre IPv4, IPv6, ARP a sieťové mosty (cielený na nahradenie iptables, ip6tables, arptables a ebtables). Potrebné zmeny pre fungovanie verzie nftables 1.0.1 sú zahrnuté v jadre Linux 5.16-rc1.
Balík nftables zahŕňa komponenty balíkového filtra pracujúce v užívateľskom priestore, zatiaľ čo na úrovni jadra zabezpečuje činnosť subsystém nf_tables, ktorý je súčasťou jadra Linux od verzie 3.13. Na úrovni jadra je poskytované iba všeobecné rozhranie, nezávislé od konkrétneho protokolu a poskytujúce základné funkcie na získavanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.
Pravidlá filtrácie a špecifické spracovateľské moduly pre protokoly sú kompilované do bajtkódu v užívateľskom priestore, po čom je tento bajtkód načítaný do jadra pomocou rozhrania Netlink a vykonáva sa v jadre na špeciálnom virtuálnom stroji, pripomínajúcom BPF (Berkeley Packet Filters). Takýto prístup umožňuje významne znížiť veľkosť kódu filtrácie, ktorý funguje na úrovni jadra a preniesť všetky funkcie parsovania pravidiel a logiky práce s protokolmi do užívateľského priestoru.
Hlavné novinky:
- Znížená pamäťová náročnosť pri načítaní veľkých zoznamov set a map.
- Zrýchlené opätovné načítanie zoznamov set a map.
- Zrýchlený výstup vybraných tabuliek a reťazcov vo veľkých súboroch pravidiel. Napríklad čas vykonania príkazu „nft list ruleset“ na zobrazenie súboru pravidiel s 100 tisíc riadkami trvá 3.049 sekundy, pričom pre zobrazenie len tabuliek nat a filter („nft list table nat“, „nft list table filter“) sa čas znižuje na 1.969 a 0.697 sekundy.
- Zrýchlené vykonávanie dotazov s možnosťou „—terse“ pri spracovaní pravidiel s veľkými zoznamami set a map.
- Poskytla sa možnosť filtrovať prenos z reťazca „egress“, spracovávaného na rovnakej úrovni ako egress spracovávajúci reťazec v netdev (hook egress), t.j. v štádiu, kedy ovládač prijíma paket zo sieťového zásobníka jadra. 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 } } }
- Povolené mapovanie a zmena bajtov v hlavičke a obsahu paketu na zadanom posune. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter
Zdroj: opennet.ru
