Bol uvoľnený balík filtrov nftables 1.0.6, ktorý unifikuje rozhrania pre filtrovanie paketov pre IPv4, IPv6, ARP a sieťové mosty (s cieľom nahradiť iptables, ip6tables, arptables a ebtables). Balík nftables obsahuje komponenty filtrovacieho systému, ktoré fungujú v užívateľskom priestore, zatiaľ čo na úrovni jadra zabezpečuje prácu subsystém nf_tables, ktorý je súčasťou jadra Linux od verzie 3.13. Na úrovni jadra sa poskytuje len všeobecné rozhranie, ktoré nezávisí od konkrétneho protokolu a poskytuje základné funkcie na extrahovanie ú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, ktorý je vyvolaný pri zadávaní voľby „-o/—optimize“, je zavedené automatické balenie pravidiel prostredníctvom ich zlúčenia a transformácie na mapy a zoznamy. Napríklad pravidlá # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } po vykonaní „nft -o -c -f ruleset.nft“ budú transformované nasledovne: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept do: iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
- Optimalizátor môže tiež premeniť pravidlá, v ktorých už sú použité jednoduché set-zoznamy, na kompaktnú formu, napríklad pravidlá: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname "lo" accept ct state established,related accept comment "V prichádzajúcej prevádzke dôverujeme" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } po vykonaní "nft -o -c -f ruleset.nft" budú zabalené nasledujúcim spôsobom: ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22-143: iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept do: iifname . ip saddr . ip daddr . udp sport . udp dport { enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 32768-65535 } accept
- Riešený problém s generovaním bajtkódu na zlúčenie intervalov, v ktorých sa používajú typy s rôznym poradením bajtov, napríklad IPv4 (sieťové poradie bajtov) a meta mark (systémové poradie bajtov). table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
- Zavedené porovnávanie zriedkavých protokolov pri použití raw-výrazov, napríklad: meta l4proto 91 @th,400,16 0x0 accept
- Riešené problémy so zapínaním pravidiel s intervalmi: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
- Zlepšené API JSON, ktoré pridalo podporu pre výrazy v set- a map-zoznamoch.
- V rozšíreniach knižnice python nftables umožnené načítanie súborov pravidiel na spracovanie v režime kontroly ("-c") a pridaná podpora vonkajšieho definovania premenných.
- V prvkoch set-zoznamov povolené pridávanie komentárov.
- V byte ratelimit povolené uvedenie nulovej hodnoty.
Zdroj: opennet.ru
