Bol vydaný balíkový filter nftables 1.0.5, ktorý unifikoval rozhrania filtrovania paketov pre IPv4, IPv6, ARP a sieťové mosty (cielený na nahradenie iptables, ip6tables, arptables a ebtables). Zároveň bol vydaný aj sprievodný knižnica libnftnl 1.2.3, ktorá poskytuje nízkoúrovňové API pre interakciu so subsystémom nf_tables.
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é zmeny:
- V optimalizátore pravidiel, volanom pri udávaní voľby „-o/—optimize“, boli vyriešené problémy s kombinovaním pravidiel, map- a set-zoznamov. # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } } # nft -o -c -f ruleset.nft Merging: ruleset.nft:4:3-52: ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ruleset.nft:5:3-52: ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 into: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }
- Pri kombinovaní ethernet a vlan prvkov bolo zabezpečené definovanie dynamického set-zoznamu, ktorý sa napĺňa na základe parametrov cesty paketu. add table netdev x add chain netdev x y { type filter hook ingress device enp0s25 priority 0; } add set netdev x macset { typeof ether daddr . vlan id; flags dynamic,timeout; } add rule netdev x y update @macset { ether daddr . vlan id timeout 60s } add rule netdev x y ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 0a:0b:0c:0d:0e:0f . 4095 } counter accept
- Bol zavedený prehľad pravidiel s map-zoznamami, ktoré obsahujú masky v názvoch rozhraní. table inet filter { chain INPUT { iifname vmap { «eth0» : jump input_lan, «wg*» : jump input_vpn } } chain input_lan {} chain input_vpn {} }
- Boli odstránené regresívne zmeny, ktoré viedli k nesprávnej syntaktickej analýze platných pravidiel.
- Riešené problémy so pomalým spracovaním a automatickým spojením veľkých zoznamov s prvkami, ktoré definujú intervaly hodnôt.
- Bola odstránená havária pri pridávaní prvkov do neplatného set-zoznamu.
Zdroj: opennet.ru
