Bol vydaný paketový filter nftables verzie 0.9.9. Zjednocuje rozhrania filtrovania paketov pre IPv4, IPv6, ARP a sieťové mosty (určené ako náhrada za iptables, ip6table, arptables a ebtables). Súčasne bola vydaná aj sprievodná knižnica libnftnl 1.2.0, ktorá poskytuje nízkoúrovňové API pre interakciu so subsystémom nf_tables. Zmeny potrebné pre nftables verziu 0.9.9 boli začlenené do jadra. Linux 5.13-rc1.
Balík nftables obsahuje komponenty filtrovania paketov, ktoré fungujú v používateľskom priestore, zatiaľ čo prácu na úrovni jadra zabezpečuje podsystém nf_tables, ktorý je súčasťou jadra. Linux Od verzie 3.13 je na úrovni jadra k dispozícii iba generické rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrakciu údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.
Samotné pravidlá filtrovania a obslužné programy špecifické pre protokol sú v používateľskom priestore skompilované do bajtkódu, po ktorom je tento bajtkód načítaný do jadra pomocou rozhrania Netlink a vykonaný v jadre v špeciálnom virtuálny prístroj, pripomínajúce BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazné zníženie veľkosti filtrovacieho kódu bežiaceho na úrovni jadra a presúva všetku analýzu pravidiel a logiku protokolu do používateľského priestoru.
Hlavné inovácie:
- Bola implementovaná možnosť presunúť spracovanie toku na stranu sieťového adaptéra, ktorá bola povolená pomocou príznaku 'offload'. Flowtable je mechanizmus na optimalizáciu cesty presmerovania paketov, v ktorom sa úplný prechod všetkých reťazcov spracovania pravidiel aplikuje iba na prvý paket a všetky ostatné pakety v toku sa preposielajú priamo. tabuľka ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward prioritný filter; prijať politiku; ip protokol { tcp, udp } tok add @f } reťazový príspevok { typ nat hook postrouting prioritný filter; prijať politiku; oifname "wan" maškaráda } }
- Pridaná podpora pre pripojenie príznaku vlastníka k tabuľke, aby sa zabezpečilo výhradné použitie tabuľky procesom. Keď sa proces ukončí, tabuľka s ním spojená sa automaticky vymaže. Informácie o procese sú zobrazené vo výpise pravidiel vo forme komentára: tabuľka ip x { # progname nft flags owner chain y { type filter hook input priority filter; prijať politiku; počítadlo paketov 1 bajtov 309 } }
- Pridaná podpora pre špecifikáciu IEEE 802.1ad (VLAN stacking alebo QinQ), ktorá definuje prostriedky na nahradenie viacerých VLAN tagov do jedného ethernetového rámca. Napríklad na kontrolu typu externého ethernetového rámca 8021ad a vlan id=342 môžete použiť konštrukciu ... ether type 802.1ad vlan id 342 na kontrolu externého typu ethernetového rámca 8021ad/vlan id=1, vnorené 802.1 q/vlan id=2 a ďalej zapuzdrenie IP paketov: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
- Pridaná podpora pre správu zdrojov pomocou zjednotenej hierarchie cgroups v2. Kľúčovým rozdielom medzi cgroups v2 a v1 je použitie spoločnej hierarchie cgroups pre všetky typy zdrojov namiesto samostatných hierarchií na prideľovanie zdrojov CPU, na reguláciu spotreby pamäte a na I/O. Ak chcete napríklad skontrolovať, či sa predchodca zásuvky na prvej úrovni cgroupv2 zhoduje s maskou „system.slice“, môžete použiť konštrukciu: ... socket cgroupv2 úroveň 1 „system.slice“
- Pridaná možnosť kontroly komponentov SCTP paketov (funkcionalita potrebná pre prevádzku sa zobrazí v jadre) Linux 5.14). Napríklad, ak chcete skontrolovať, či paket obsahuje chunk s typom „data“ a poľom „type“: … sctp chunk data existuje … sctp chunk data type 0
- Vykonávanie operácie načítania pravidla sa zrýchlilo približne dvakrát pomocou príznaku „-f“. Zrýchlil sa aj výstup zoznamu pravidiel.
- K dispozícii je kompaktný formulár na kontrolu, či sú nastavené indikátorové bity. Ak chcete napríklad skontrolovať, či stavové bity snat a dnat nie sú nastavené, môžete zadať: ... stav ct ! snat,dnat na kontrolu, či je bit syn nastavený v bitovej maske syn,ack: ... príznaky tcp syn / syn,ack na kontrolu, či bity fin a rst nie sú nastavené v bitovej maske syn,ack,fin,rst: ... príznaky tcp ! = fin,rst / syn,ack,fin,rst
- Povoľte kľúčové slovo "verdikt" v definíciách typu set/map: add map xm { typeof iifname . ip protokol th dport : verdikt ;}
Zdroj: opennet.ru
