versió 1.0.3 del filtre de paquets nftables

S'ha publicat la versió del filtre de paquets nftables 1.0.3, 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.3 funcioni s'inclouen al nucli de Linux 5.18.

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:

  • Les llistes de conjunts ara admeten la concordança de noms d'interfície de xarxa mitjançant una màscara, per exemple, especificada amb el caràcter "*": table inet testifsets { set simple_wild { type ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } cadena v4icmp { tipus de prioritat d'entrada de ganxo de filtre 0; acceptar la política; iifname @simple_wild paquets de comptador 0 bytes 0 iifname { "abcdef*", "eth0" } paquets de comptador 0 bytes 0 } }
  • S'ha implementat la unió automàtica d'elements de la llista de contes que s'intersequen durant el funcionament. Anteriorment, quan s'establia l'opció de "fusió automàtica", la combinació es realitzava en l'etapa de declaració de les regles, però ara també funciona quan s'afegeixen nous elements en el procés. Per exemple, al pas de declaració, la llista s'estableix y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8. 3.3.3.4, 3.3.3.5 , 1.2.3.0 } } es convertiran en elements = { 24/3.3.3.3, 3.3.3.5-4.4.4.4, 4.4.4.8-1.2.3.0 } i després si afegim nous elements # nft afegir element ip xy { 1.2.4.255 -3.3.3.6, 1.2.3.0 } es converteix en elements = { 1.2.4.255-3.3.3.3, 3.3.3.6-4.4.4.4, 4.4.4.8-XNUMX }

    Quan elimineu elements individuals de la llista que es troben dins dels elements existents, l'interval es redueix o es divideix.

  • S'ha afegit suport per combinar regles de traducció d'adreces múltiples (NAT) en una llista de mapes a l'optimitzador de regles anomenat quan s'especifica l'opció "-o/--optimize". Per exemple, per al conjunt # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; caiguda de la política; ip saddr 1.1.1.1 tcp dport 8000 snat a 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat a 5.5.5.5:90 } }

    executar "nft -o -c -f ruleset.nft" convertirà les regles separades "ip saddr" en una llista de mapes: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4. 80, 2.2.2.2. 8001:5.5.5.5. 90}

    De la mateixa manera, les expressions en brut també es poden convertir a llistes de mapes: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 th,62 78x160,128e0e anar a nat_dns_this_0 longitud udp 31393032383939353831343037320-5301 @th,62 78x160,128e0e va a nat_dns_saturn_0 longitud udp 31363436323733373931323934300-5301, @e 62e 78 160,128e goto nat_dns_saturn_0 udp length 0-32393535373539353636383732310 @th,5302 62x78e160,128e goto 0} nat_0_t

    després de l'optimització, obtenim una llista de mapes: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203: anar a nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : anar a nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e: anar a nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e: anar a nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e: anar a nat_dns_saturn_5303 }

  • Es permet l'ús d'expressions en brut en operacions de concatenació. Per exemple: # nft add rule xy ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } o taula x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
  • S'ha afegit suport per especificar camps de capçalera enters en operacions de concatenació: table inet t { map m1 { typeof udp length . @ih,32,32 : el veredicte marca els elements d'interval = { 20-80 . 0x14 : accepta, 1-10. 0xa : caiguda } } cadena c { tipus de prioritat d'entrada de ganxo de filtre 0; caiguda de la política; longitud udp. @ih,32,32 vmap @m1 } }
  • S'ha afegit suport per restablir les opcions TCP (només funciona amb el nucli Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • Execució més ràpida d'ordres de sortida en cadena ("nft list chain xy").

Font: opennet.ru

Afegeix comentari