versió 1.0.0 del filtre de paquets nftables

S'ha publicat el llançament del filtre de paquets nftables 1.0.0, 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). Els canvis necessaris perquè la versió nftables 1.0.0 funcioni s'inclouen al nucli Linux 5.13. Un canvi significatiu en el número de versió no està associat a cap canvi fonamental, sinó que és només una conseqüència de la continuació consistent de la numeració en notació decimal (la versió anterior era la 0.9.9).

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 afegit suport per a l'element de màscara "*" a les llistes de conjunts, que s'activa per a qualsevol paquet que no s'inclou en altres elements definits al conjunt. taula x { llista de bloqueig del mapa { tipus ipv4_addr : elements d'interval de senyals de veredicte = { 192.168.0.0/16 : acceptar, 10.0.0.0/8 : acceptar, * : deixar caure } } cadena y { tipus filter hook prerouting prioritat 0; acceptar la política; ip saddr vmap @blocklist } }
  • És possible definir variables des de la línia d'ordres mitjançant l'opció "--define". # cat test.nft table netdev x { cadena y { tipus filter hook ingress devices = $dev prioritat 0; caiguda de la política; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • A les llistes de mapes, es permet l'ús d'expressions constants (stateful): filtre inet de taula { map portmap { tipus inet_service : elements del comptador del veredicte = { 22 paquets de comptador 0 bytes 0 : salt ssh_input, * paquets de comptador 0 bytes 0 : drop } } cadena ssh_input { } cadena wan_input { tcp dport vmap @portmap } cadena prerouting { tipus filtre ganxo prerouting prioritat en brut; acceptar la política; iif vmap { "lo": saltar wan_input } } }
  • S'ha afegit l'ordre "list hooks" per mostrar una llista de controladors per a una família de paquets determinada: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } ganxo cap endavant { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables output] -0000000225_4 hooklin out seipvux 0000000225_4 XNUMX posar } hook postrouting { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
  • Els blocs de cua permeten combinar expressions jhash, symhash i numgen per distribuir paquets a les cues de l'espai d'usuari. … la cua al mod symhash 65536 … les banderes de la cua passen per numgen inc mod 65536 … la cua a jhash oif . meta mark mod 32 "queue" també es pot combinar amb llistes de mapes per seleccionar una cua a l'espai d'usuari basant-se en claus arbitràries. ... les banderes de cua passen per al mapa oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • És possible expandir variables que inclouen una llista de conjunts en diversos mapes. defineix les interfícies = { eth0, eth1 } taula ip x { cadena y { tipus filtre hook prioritat d'entrada 0; acceptar la política; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; acceptar la política; iifname vmap { "lo": acceptar, "eth0": deixar anar, "eth1": deixar anar } } }
  • Es permet combinar vmaps (mapa de veredictes) a intervals: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : accepta }
  • Sintaxi simplificada per a mapes NAT. Permès especificar intervals d'adreces: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } o adreces IP i ports explícits: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } o combinacions d'intervals IP i ports: ... dnat to ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Font: opennet.ru

Afegeix comentari