lansarea filtrului de pachete nftables 0.9.9

A fost publicată lansarea filtrului de pachete nftables 0.9.9, care unifică interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și punți de rețea (care vizează înlocuirea iptables, ip6table, arptables și ebtables). În același timp, a fost publicată lansarea bibliotecii însoțitoare libnftnl 1.2.0, oferind un API de nivel scăzut pentru interacțiunea cu subsistemul nf_tables. Modificările necesare pentru ca versiunea nftables 0.9.9 să funcționeze sunt incluse în nucleul Linux 5.13-rc1.

Pachetul nftables include componente de filtru de pachete care rulează în spațiul utilizatorului, în timp ce munca la nivel de kernel este asigurată de subsistemul nf_tables, care a făcut parte din nucleul Linux încă de la lansarea 3.13. Nivelul nucleului oferă doar o interfață generică independentă de protocol, care oferă funcții de bază pentru extragerea datelor din pachete, efectuarea operațiunilor de date și controlul fluxului.

Regulile de filtrare în sine și handlerele specifice protocolului sunt compilate în bytecode din spațiul utilizatorului, după care acest bytecode este încărcat în nucleu folosind interfața Netlink și executat în kernel într-o mașină virtuală specială asemănătoare BPF (Berkeley Packet Filters). Această abordare face posibilă reducerea semnificativă a dimensiunii codului de filtrare care rulează la nivel de kernel și mutarea tuturor funcțiilor de parsare a regulilor și a logicii de lucru cu protocoale în spațiul utilizatorului.

Principalele inovații:

  • A fost implementată capacitatea de a muta procesarea flowtable în partea adaptorului de rețea, activată folosind indicatorul „descărcare”. Flowtable este un mecanism de optimizare a căii de redirecționare a pachetelor, în care trecerea completă a tuturor lanțurilor de procesare a regulilor este aplicată numai primului pachet, iar toate celelalte pachete din flux sunt redirecționate direct. table ip global { flowtable f { filtru de prioritate de intrare cârlig + 1 dispozitive = { lan3, lan0, wan } flags offload } chain forward { tip filtru hook forward filtru de prioritate; acceptarea politicii; protocol ip { tcp, udp } flow add @f } chain post { tip nat hook postrouting priority filter; acceptarea politicii; oifname "wan" mascarada } }
  • S-a adăugat suport pentru atașarea unui steag de proprietar la un tabel pentru a asigura utilizarea exclusivă a tabelului de către un proces. Când un proces se încheie, tabelul asociat cu acesta este șters automat. Informațiile despre proces sunt afișate în dump-ul regulilor sub forma unui comentariu: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; acceptarea politicii; contor pachete 1 octet 309 } }
  • S-a adăugat suport pentru specificația IEEE 802.1ad (stivuire VLAN sau QinQ), care definește un mijloc de înlocuire a mai multor etichete VLAN într-un singur cadru Ethernet. De exemplu, pentru a verifica tipul de cadru Ethernet extern 8021ad și vlan id=342, puteți utiliza construcția ... ether type 802.1ad vlan id 342 pentru a verifica tipul extern de cadru Ethernet 8021ad/vlan id=1, imbricat 802.1 q/vlan id=2 și încapsulare suplimentară a pachetelor IP: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • S-a adăugat suport pentru gestionarea resurselor folosind ierarhia unificată cgroups v2. Diferența cheie dintre cgroups v2 și v1 este utilizarea unei ierarhii comune cgroups pentru toate tipurile de resurse, în loc de ierarhii separate pentru alocarea resurselor CPU, pentru reglarea consumului de memorie și pentru I/O. De exemplu, pentru a verifica dacă strămoșul unui socket la primul nivel cgroupv2 se potrivește cu masca „system.slice”, puteți folosi construcția: ... socket cgroupv2 level 1 „system.slice”
  • S-a adăugat capacitatea de a verifica componentele pachetelor SCTP (funcționalitatea necesară pentru aceasta va apărea în nucleul Linux 5.14). De exemplu, pentru a verifica dacă un pachet conține o bucată cu tipul „date” și câmpul „tip”: ... sctp chunk data există ... sctp chunk data tip 0
  • Execuția operațiunii de încărcare a regulilor a fost accelerată de aproximativ două ori folosind indicatorul „-f”. Ieșirea listei de reguli a fost, de asemenea, accelerată.
  • Este furnizat un formular compact pentru a verifica dacă biții de semnalizare sunt setați. De exemplu, pentru a verifica dacă biții de stare snat și dnat nu sunt setați, puteți specifica: ... ct status ! snat,dnat pentru a verifica dacă bitul syn este setat în masca de biți syn,ack: ... tcp flags syn / syn,ack pentru a verifica dacă biții fin și primii nu sunt setați în masca de bit syn,ack,fin,rst: ... steaguri tcp = fin,rst / syn,ack,fin,st
  • Permiteți cuvântul cheie „verdict” în definițiile tip set/map: add map xm { typeof iifname . protocolul ip al-lea port: verdict ;}

Sursa: opennet.ru

Adauga un comentariu