Filtrul de pachete nftables 0.9.9 a fost lansat. Acesta unifică interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și punți de rețea (concepută ca înlocuitor pentru iptables, ip6table, arptables și ebtables). Biblioteca libnftnl 1.2.0 însoțitoare, care oferă o API de nivel scăzut pentru interacțiunea cu subsistemul nf_tables, a fost lansată simultan. Modificările necesare pentru nftables 0.9.9 au fost încorporate în kernel. Linux 5.13-rc1.
Pachetul nftables conține componentele de filtrare a pachetelor care operează în spațiul utilizatorului, în timp ce munca la nivel de kernel este asigurată de subsistemul nf_tables, care face parte din kernel. Linux Începând cu versiunea 3.13, la nivel de kernel este furnizată doar o interfață generică independentă de protocol, care oferă funcționalități de bază pentru extragerea datelor din pachete, efectuarea operațiunilor cu datele și controlul fluxului.
Regulile de filtrare în sine și handlerele specifice protocolului sunt compilate în bytecode în spațiul utilizatorului, după care acest bytecode este încărcat în kernel folosind interfața Netlink și executat în kernel într-un mod special. mașină virtuală, amintind de BPF (Berkeley Packet Filters). Această abordare permite o reducere semnificativă a dimensiunii codului de filtrare care rulează la nivel de kernel și mută toată analiza regulilor și logica protocolului î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”
- Adăugată posibilitatea de a verifica componentele pachetelor SCTP (funcționalitatea necesară pentru operare va apărea în kernel) Linux 5.14). De exemplu, pentru a verifica dacă un pachet conține un chunk cu tipul „data” și câmpul „type”: … sctp chunk data exists … sctp chunk data type 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
