Bol vydaný balíčkový filter nftables 1.0.2, ktorý unifikuje rozhrania filtrácie paketov pre IPv4, IPv6, ARP a sieťové mosty (cielený na nahradenie iptables, ip6tables, arptables a ebtables). Nevyhnutné zmeny pre fungovanie vydania nftables 1.0.2 sú zahrnuté v jadre Linux 5.17-rc.
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:
- Bol pridaný režim optimalizácie pravidiel, ktorý sa aktivuje pomocou novej možnosti „-o“ („—optimize“), ktorú je možné kombinovať s možnosťou „—check“ na overenie a optimalizáciu zmien v súbore s pravidlami bez jeho skutočného načítania. Optimalizácia umožňuje zlúčiť podobné pravidlá, napríklad pravidlá: 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.5 accept ip saddr 1.1.1.1 ip daddr 2.2.2.2 accept ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop
budú zlúčené do meta iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.5 } accept ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 : accept, 2.2.2.2 . 3.3.3.3 : drop }
Príklad použitia: # nft -c -o -f ruleset.test Merging: ruleset.nft:16:3-37: ip daddr 192.168.0.1 counter accept ruleset.nft:17:3-37: ip daddr 192.168.0.2 counter accept ruleset.nft:18:3-37: ip daddr 192.168.0.3 counter accept do: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } counter packets 0 bytes 0 accept
- V set-zoznamoch bola implementovaná možnosť určiť ip- a tcp-voľby, ako aj chunk-y sctp: set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp chunk init num-inbound-streams elements = { 1, 4 } } chain c5 { ip option ra value @s5 accept } chain c7 { sctp chunk init num-inbound-streams @s7 accept }
- Bola pridaná podpora TCP-voľieb fastopen, md5sig a mptcp.
- Bola pridaná podpora používania v porovnávaniach podtypu mp-tcp: tcp option mptcp subtype 1
- Zlepšený kód filtrácie, ktorý pracuje na strane jadra.
- Pre flowtable bola implementovaná plná podpora formátu JSON.
- Poskytla sa možnosť používať akciu „reject“ v operáciách porovnávania Ethernet rámcov. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 reject
Zdroj: opennet.ru
