Lansarea filtrului de pachete nftables 0.9.9

A fost lansată versiunea 0.9.9 a filtrului de pachete nftables, care unifică interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și punțile de rețea (destinată înlocuirii iptables, ip6tables, arptables și ebtables). Simultan, a fost lansată versiunea 1.2.0 a bibliotecii asociate libnftnl, care oferă un API de nivel scăzut pentru interacțiunea cu subsistemul nf_tables. Modificările necesare pentru funcționarea versiunii nftables 0.9.9 sunt incluse în nucleul Linux 5.13-rc1.

Pachetul nftables include componente ale filtrului de pachete care funcționează în spațiul utilizatorului, în timp ce, la nivel de nucleu, funcționarea este asigurată de subsistemul nf_tables, parte a nucleului Linux începând cu versiunea 3.13. La nivel de nucleu se oferă doar o interfață generală, independentă de protocolul specific, care asigură funcții de bază pentru extragerea datelor din pachete, executarea operațiunilor cu datele și gestionarea fluxului.

Regulile de filtrare și handler-ii specifici pentru protocoale sunt compilate în bytecode în spațiul utilizatorului, după care acest bytecode este încărcat în nucleu prin intermediul interfeței Netlink și executat în nucleu într-un mod special mașina virtuală, similar cu BPF (Berkeley Packet Filters). Această abordare permite reducerea semnificativă a dimensiunii codului de filtrare care funcționează la nivel de nucleu și mutarea tuturor funcțiilor de analiză a regulilor și logica de funcționare cu protocoalele în spațiul utilizatorului.

Noutăți principale:

  • A fost implementată capacitatea de a externaliza procesarea flowtable pe partea adaptorului de rețea, activată prin intermediul flag-ului ‘offload’. Flowtable reprezintă un mecanism de optimizare a rutei de redirecționare a pachetelor, în care procesarea completă a tuturor lanțurilor de reguli este aplicată doar pentru primul pachet, iar toate celelalte pachete din flux sunt transmise direct. 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 } }
  • A fost adăugată suportul pentru atașarea unui flag la tabel pentru a se lega de proprietar, ceea ce permite utilizarea exclusivă a tabelului de către proces. La terminarea procesului, tabelul atașat este automat șters. Informația despre proces apare în dump-ul regulilor sub formă de comentariu: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
  • A fost adăugat suportul pentru specificația IEEE 802.1ad (stivuirea VLAN-urilor sau QinQ), care definește mijloacele de atașare a mai multor etichete VLAN într-un singur cadru Ethernet. De exemplu, pentru a verifica tipul cadrului Ethernet extern 8021ad și vlan id=342, poate fi folosită construcția … ether type 802.1ad vlan id 342 pentru a verifica tipul extern al cadrului Ethernet 8021ad/vlan id=1, înfășurat în 802.1q/vlan id=2 și pentru a continua encapsularea pachetului IP: … ether type 802.1ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • A fost adăugat suportul pentru gestionarea resurselor prin intermediul ierarhiei unificate cgroups v2. Principala diferență dintre cgroups v2 și v1 este utilizarea unei ierarhii comune de cgroups pentru toate tipurile de resurse, în loc de ierahii separate pentru distribuirea resurselor CPU, reglarea consumului de memorie și pentru I/O. De exemplu, pentru a verifica dacă părintele socket-ului de la primul nivel cgroupv2 corespunde măștii „system.slice”, poate fi utilizată construcția: ... socket cgroupv2 nivel 1 „system.slice”
  • A fost adăugată posibilitatea de a verifica componentele pachetelor SCTP (funcționalitatea necesară va apărea în nucleul Linux 5.14). De exemplu, pentru a verifica prezența unui chunk de tip ‘data’ în pachet și câmpul ‘type’: ... sctp chunk data exists ... sctp chunk data type 0
  • Execuția operației de încărcare a regulilor a fost accelerată de aproximativ două ori prin utilizarea flag-ului „-f”. De asemenea, a fost accelerat lista de reglementări.
  • A fost disponibilă o formă compactă pentru verificarea setării bitilor în flag-uri. De exemplu, pentru a verifica că bitii de stare snat și dnat nu sunt setati, se poate specifica: ... ct status ! snat,dnat pentru a verifica că bitul syn este setat în masca de biți syn,ack: ... tcp flags syn / syn,ack pentru a verifica că bitii fin și rst nu sunt setati în masca de biți syn,ack,fin,rst: ... tcp flags != fin,rst / syn,ack,fin,rst
  • A fost permisă utilizarea cuvântului cheie „verdict” în definițiile typeof pentru set/map: add map x m { typeof iifname . ip protocol . th dport : verdict ;}

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster