Nftables 0.9.9 paketti filter

Avaldasime nftables 0.9.9 pakettide filtreerimise versiooni, mis unifitseerib pakettide filtreerimise liidesed IPv4, IPv6, ARP ja võrgu sillad (sihtides iptables, ip6tables, arptables ja ebtables asendamist). Samuti avaldasime koos sellega raamatukogu libnftnl 1.2.0, mis pakub madalama taseme API-d nf_tables süsteemiga suhtlemiseks. Nftables 0.9.9 versiooni jaoks vajalikud muudatused on sisaldatud Linuxi tuuma versioonis 5.13-rc1.

Nftables'i paketis on kasutusruumi paketifiltreerimise komponendid, samas kui tuuma tasemel tagab töö nf_tables alamsüsteem, mis on Linuxi tuumas saadaval alates versioonist 3.13. Tuuma tasemel on olemas vaid üldine liides, mis ei sõltu konkreetsetest protokollidest ja pakub põhiülesandeid paketidest andmete ekstraheerimiseks, andmete töötlemiseks ja voogude haldamiseks.

Filtreerimisreeglid ja protokollispetsiifilised töötlejad kompileeritakse kasutusruumis byte-koodiks, seejärel laaditakse see byte-kood tuuma Netlinki liidese abil ja käivitatakse tuumas eraldi virtuaalmasinas, mis tahes BPF (Berkeley Packet Filters). Sarnane lähenemine võimaldab oluliselt vähendada filterkoodi suurust, mis töötab tuuma tasemel, ning viia kõik reeglite parsing'u funktsioonid ja protokollide töötlemise loogika kasutajaruumi.

Põhilised uuendused:

  • Rakendatud on võimeflowtable'i töötlemise viimiseks võrguadapteri külge, mille aktiveerimine toimub 'offload' lipu abil. Flowtable on pakettide edastamistee optimeerimise mehhanism, kus kõiki reeglite töötlemise kettaid kohaldatakse täielikult ainult esimesele pakettile, samas kui kõik ülejäänud pakettide voos suunatakse otse. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname «wan» masquerade } }
  • Lisatud tugi lipu kinnitamiseks tabelile, mis seondub omanikuga, mis võimaldab protsessil tagada tabeli eksklusiivse kasutamise. Protsessi lõpetamisel kustutatakse sellega seotud tabel automaatselt. Protsessi kohta teave kuvatakse reeglite väljavõttes kommentaarina: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
  • Lisatud tugi IEEE 802.1ad (VLAN virnastamine või QinQ) spetsifikatsiooni, mis määratleb mehhanismid mitme VLAN-i sildi asendamiseks ühes Etherneti raamistikus. Näiteks saab välise Etherneti raami 8021ad ja vlan id=342 tüüpide kontrollimiseks kasutada konstruktsiooni … ether type 802.1ad vlan id 342 välise Etherneti raami 8021ad/vlan id=1, sisemised 802.1q/vlan id=2 ja edasise IP-paketi kapseldamiseks: … ether type 802.1ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • Lisatud on ressursside haldamise tugi ühtse cgroups v2 hierarhia abil. cgroups v2 põhierinevus v1-st seisneb selles, et kõikide ressursside, sealhulgas CPU, mälu ja sisendi/väljundi jaotamiseks kasutatakse ühtset cgroups hierarhiat, mitte eraldiseisvaid hierarhiasid. Näiteks, et kontrollida, kas socket'i eelkäija esimeses tasemes cgroupv2 vastab maskile «system.slice», saab kasutada konstruktsiooni: … socket cgroupv2 level 1 «system.slice»
  • Lisatud on võimalus kontrollida SCTP paketide komponente (vajalik funktsionaalsus tuleb Linuxi 5.14 kärjesse). Näiteks, et kontrollida, kas paketis on chunk tüübiga ‘data’ ja väljadega ‘type’: … sctp chunk data exists … sctp chunk data type 0
  • Reeglite laadimise operatsiooni täitmine on kiiruselt umbes kahekordistunud lipu «-f» kasutamisel. Samuti on kiirenenud reeglite nimekirja väljastamine.
  • Esitatud on kompaktne vormi kontrollimise bitite lipu seadistamiseks. Näiteks, et kontrollida, kas snat ja dnat olekubitid pole seadistatud, võib kasutada: … ct status ! snat,dnat. Et kontrollida, kas syn-bit on seadistatud syn,ack bitimaskis: … tcp flags syn / syn,ack. Et kontrollida, kas fin ja rst bitid pole seadistatud bitimaskis syn,ack,fin,rst: … tcp flags != fin,rst / syn,ack,fin,rst.
  • Sõna 'verdict' kasutamine on lubatud typeof määratlustes set/map jaoks: add map x m { typeof iifname . ip protocol . th dport : verdict; }

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster