Vydanie paketového filtra nftables 0.9.9

Bolo zverejnené vydanie paketového filtra nftables 0.9.9, ktoré zjednocuje rozhrania na filtrovanie paketov pre IPv4, IPv6, ARP a sieťové mosty (zamerané na nahradenie iptables, ip6table, arptables a ebtables). V rovnakom čase bolo zverejnené vydanie sprievodnej knižnice libnftnl 1.2.0, ktorá poskytuje nízkoúrovňové API na interakciu so subsystémom nf_tables. Zmeny potrebné na fungovanie vydania nftables 0.9.9 sú zahrnuté v jadre Linuxu 5.13-rc1.

Balík nftables obsahuje komponenty paketového filtra, ktoré bežia v užívateľskom priestore, zatiaľ čo prácu na úrovni jadra zabezpečuje subsystém nf_tables, ktorý je súčasťou linuxového jadra od vydania 3.13. Úroveň jadra poskytuje iba všeobecné rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrahovanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.

Samotné filtrovacie pravidlá a obslužné programy špecifické pre daný protokol sú skompilované do bajtkódu používateľského priestoru, po ktorom sa tento bajtkód načíta do jadra pomocou rozhrania Netlink a spustí sa v jadre v špeciálnom virtuálnom stroji pripomínajúcom BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne zmenšiť veľkosť filtrovacieho kódu spusteného na úrovni jadra a presunúť všetky funkcie pravidiel parsovania a logiku práce s protokolmi do uží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 paketov SCTP (funkcia potrebná na to sa objaví v jadre Linuxu 5.14). Ak chcete napríklad skontrolovať, či paket obsahuje chunk s typom 'data' a poľom 'type': ... sctp chunk data existujú ... 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

Pridať komentár