nftables pakettfiltri 0.9.9 väljalase

Avaldatud on paketifiltri nftables 0.9.9 väljalase, mis ühendab IPv4, IPv6, ARP ja võrgusildade pakettide filtreerimise liidesed (eesmärk on asendada iptables, ip6table, arptables ja ebtables). Samal ajal avaldati kaasteegi libnftnl 1.2.0 väljalase, mis pakub madala taseme API-t nf_tables alamsüsteemiga suhtlemiseks. Nftables 0.9.9 väljalaske toimimiseks vajalikud muudatused sisalduvad Linuxi kernelis 5.13-rc1.

Pakett nftables sisaldab pakettfiltri komponente, mis töötavad kasutajaruumis, samas kui kerneli tasemel töö tagab alamsüsteem nf_tables, mis on Linuxi kerneli osa olnud alates versioonist 3.13. Kerneli tase pakub ainult üldist protokollist sõltumatut liidest, mis pakub põhifunktsioone pakettidest andmete eraldamiseks, andmetoimingute tegemiseks ja voo juhtimiseks.

Filtreerimisreeglid ja protokollispetsiifilised töötlejad kompileeritakse kasutajaruumis baitkoodiks, misjärel laaditakse see baitkood Netlink liidese abil kernelisse ja käivitatakse kernelis spetsiaalses BPF-i meenutavas virtuaalmasinas (Berkeley Packet Filters). Selline lähenemine võimaldab oluliselt vähendada kerneli tasemel töötava filtreerimiskoodi suurust ning teisaldada kõik sõelumisreeglite ja protokollidega töötamise loogika funktsioonid kasutajaruumi.

Peamised uuendused:

  • Rakendatud on võimalus teisaldada vootabeli töötlemist võrguadapteri poolele, mis on lubatud lipu "väljalaadimine" abil. Flowtable on pakettide ümbersuunamise tee optimeerimise mehhanism, mille puhul rakendatakse kõigi reeglitöötlusahelate täielikku läbimist ainult esimesele paketile ja kõik teised voos olevad paketid edastatakse otse. tabel ip globaalne { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; poliitika aktsepteerima; ip protokoll { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; poliitika aktsepteerima; oifname "wan" maskeraad } }
  • Lisatud tugi omaniku lipu lisamiseks tabelile, et tagada tabeli eksklusiivne kasutamine protsessi poolt. Kui protsess lõpeb, kustutatakse sellega seotud tabel automaatselt. Teave protsessi kohta kuvatakse reeglite dumpis kommentaarina: tabel ip x { # progname nft flags owner chain y { type filter hook input priority filter; poliitika aktsepteerima; loenduri paketid 1 baiti 309 } }
  • Lisatud tugi IEEE 802.1ad spetsifikatsioonile (VLAN virnastamine või QinQ), mis määratleb vahendid mitme VLAN-i sildi asendamiseks ühte Etherneti kaadrisse. Näiteks välise Etherneti raami 8021ad ja vlan id=342 tüübi kontrollimiseks võite kasutada konstruktsiooni ... ether type 802.1ad vlan id 342, et kontrollida Etherneti raami välist tüüpi 8021ad/vlan id=1, pesastatud 802.1 q/vlan id=2 ja edasine IP-paketi kapseldamine: ... eetri tüüp 8021ad vlan id 1 vlan tüüp 8021q vlan id 2 vlan tüüp ip counter
  • Lisatud tugi ressursside haldamiseks, kasutades ühtset hierarhiat cgroups v2. Peamine erinevus cgroups v2 ja v1 vahel on ühise cgroups hierarhia kasutamine igat tüüpi ressursside jaoks, selle asemel, et eraldada CPU ressursse, reguleerida mälutarbimist ja sisend-väljundit. Näiteks selleks, et kontrollida, kas sokli esivanem esimesel tasemel cgroupv2 vastab maskile "system.slice", võite kasutada konstruktsiooni: ... socket cgroupv2 tase 1 "system.slice"
  • Lisatud on võimalus kontrollida SCTP-pakettide komponente (selleks vajalik funktsionaalsus ilmub Linuxi 5.14 tuumas). Näiteks kontrollimaks, kas pakett sisaldab tükki tüübiga 'data' ja väljaga 'tüüp': ... sctp tüki andmed on olemas ... sctp tüki andmetüüp 0
  • Reegli laadimistoimingu täitmist on lipu "-f" abil kiirendatud ligikaudu kaks korda. Samuti on kiirendatud reeglite loendi väljastamist.
  • Pakutakse kompaktset vormi lipubittide seadistamise kontrollimiseks. Näiteks kontrollimaks, et snat- ja dnat-olekubitid pole määratud, saate määrata: ... ct status ! snat,dnat, et kontrollida, kas bitimask on syn,ack: ... tcp lipud syn / syn,ack kontrollimaks, et fin ja esimene bitt ei ole bitmaskis määratud syn,ack,fin,rst: ... tcp lipud ! = fin,rst / syn,ack,fin,rst
  • Luba märksõna "otsus" määratlustes set/map typeof: add map xm { typeof iifname . ip protokoll dport: otsus ;}

Allikas: opennet.ru

Lisa kommentaar