versió 0.9.9 del filtre de paquets nftables

S'ha publicat el llançament del filtre de paquets nftables 0.9.9, que unifica les interfícies de filtratge de paquets per a IPv4, IPv6, ARP i ponts de xarxa (amb l'objectiu de substituir iptables, ip6table, arptables i ebtables). Al mateix temps, es va publicar el llançament de la biblioteca complementària libnftnl 1.2.0, que proporciona una API de baix nivell per interactuar amb el subsistema nf_tables. Els canvis necessaris perquè funcioni la versió nftables 0.9.9 s'inclouen al nucli Linux 5.13-rc1.

El paquet nftables inclou components de filtre de paquets que s'executen a l'espai d'usuari, mentre que el nivell del nucli el proporciona el subsistema nf_tables, que forma part del nucli de Linux des del llançament 3.13. A nivell del nucli, només es proporciona una interfície genèrica independent del protocol que proporciona funcions bàsiques per extreure dades dels paquets, realitzar operacions sobre dades i controlar el flux.

Les regles de filtratge i els controladors específics del protocol es compilen en bytecode de l'espai d'usuari, després del qual aquest bytecode es carrega al nucli mitjançant la interfície Netlink i s'executa al nucli en una màquina virtual especial semblant a BPF (Berkeley Packet Filters). Aquest enfocament permet reduir significativament la mida del codi de filtratge que s'executa al nivell del nucli i moure totes les funcions de les regles d'anàlisi i la lògica de treballar amb protocols a l'espai d'usuari.

Principals innovacions:

  • S'ha implementat la capacitat de moure el processament de la taula de flux al costat de l'adaptador de xarxa, habilitada mitjançant la marca "descàrrega". Flowtable és un mecanisme per optimitzar el camí de la redirecció de paquets, en el qual el pas complet de totes les cadenes de processament de regles s'aplica només al primer paquet i tots els altres paquets del flux s'envien directament. table ip global { flowtable f { filtre de prioritat d'entrada de ganxo + 1 dispositius = { lan3, lan0, wan } descàrrega de banderes } cadena cap endavant { tipus de filtre hook forward filtre de prioritat; acceptar la política; protocol ip { tcp, udp } flow add @f } chain post { tipus filtre de prioritat de postrouting de tipus nat hook; acceptar la política; oifname "wan" mascarada } }
  • S'ha afegit suport per adjuntar un indicador de propietari a una taula per garantir l'ús exclusiu de la taula per part d'un procés. Quan un procés finalitza, la taula associada a ell s'elimina automàticament. La informació sobre el procés es mostra a l'abocador de regles en forma de comentari: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; acceptar la política; comptador de paquets 1 bytes 309 } }
  • S'ha afegit suport per a l'especificació IEEE 802.1ad (apilament de VLAN o QinQ), que defineix un mitjà per substituir diverses etiquetes de VLAN en una única trama Ethernet. Per exemple, per comprovar el tipus de trama Ethernet externa 8021ad i vlan id=342, podeu utilitzar la construcció ... ether type 802.1ad vlan id 342 per comprovar el tipus extern de trama Ethernet 8021ad/vlan id=1, 802.1 imbricat q/vlan id=2 i més encapsulació de paquets IP: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type comptador ip
  • S'ha afegit suport per gestionar recursos mitjançant la jerarquia unificada cgroups v2. La diferència clau entre cgroups v2 i v1 és l'ús d'una jerarquia comuna de cgroups per a tot tipus de recursos, en lloc de jerarquies separades per assignar recursos de CPU, per regular el consum de memòria i per a E/S. Per exemple, per comprovar si l'ancestre d'un sòcol al primer nivell cgroupv2 coincideix amb la màscara "system.slice", podeu utilitzar la construcció: ... socket cgroupv2 nivell 1 "system.slice"
  • S'ha afegit la possibilitat de comprovar components dels paquets SCTP (la funcionalitat necessària per a això apareixerà al nucli Linux 5.14). Per exemple, per comprovar si un paquet conté un fragment amb el tipus "data" i el camp "tipus": ... sctp chunk data exists ... sctp chunk tipus de dades 0
  • L'execució de l'operació de càrrega de regles s'ha accelerat aproximadament dues vegades utilitzant el senyalador "-f". La sortida de la llista de regles també s'ha accelerat.
  • Es proporciona un formulari compacte per comprovar si s'han establert els bits de senyalització. Per exemple, per comprovar que els bits d'estat snat i dnat no estan establerts, podeu especificar: ... ct status ! snat,dnat per comprovar que el bit syn està establert a la màscara de bits syn,ack: ... tcp flags syn / syn,ack per comprovar que els bits fin i primers no estan establerts a la màscara de bits syn,ack,fin,rst: ... tcp flags ! = fin,rst / syn,ack,fin,rst
  • Permet la paraula clau "verdicte" a les definicions de tipus de mapa/conjunt: add map xm { typeof iifname . protocol ip th dport: veredicte ;}

Font: opennet.ru

Afegeix comentari