Versión de filtro de paquetes nftables 1.0.3

Publicouse o lanzamento do filtro de paquetes nftables 1.0.3, que unifica interfaces de filtrado de paquetes para IPv4, IPv6, ARP e pontes de rede (destinados a substituír iptables, ip6table, arptables e ebtables). Os cambios necesarios para que funcione a versión 1.0.3 de nftables están incluídos no núcleo de Linux 5.18.

O paquete nftables inclúe compoñentes de filtro de paquetes que se executan no espazo do usuario, mentres que o traballo a nivel do núcleo é proporcionado polo subsistema nf_tables, que forma parte do núcleo de Linux desde a versión 3.13. O nivel do núcleo ofrece só unha interface xenérica independente do protocolo que proporciona funcións básicas para extraer datos de paquetes, realizar operacións de datos e controlar o fluxo.

As propias regras de filtrado e os controladores específicos do protocolo compílanse nun bytecode de espazo de usuario, despois de que este bytecode cárgase no núcleo mediante a interface Netlink e execútase no núcleo nunha máquina virtual especial que se asemella a BPF (Berkeley Packet Filters). Este enfoque fai posible reducir significativamente o tamaño do código de filtrado que se executa a nivel do núcleo e mover todas as funcións das regras de análise e a lóxica de traballar con protocolos ao espazo do usuario.

Principais novidades:

  • As listas de conxuntos admiten agora a coincidencia de nomes de interface de rede mediante unha máscara, por exemplo, especificada mediante o símbolo “*”: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } cadea v4icmp { prioridade de entrada de gancho de filtro tipo 0; política aceptar; iifname @simple_wild contador de paquetes 0 bytes 0 iifname { “abcdef*”, “eth0” } contador de paquetes 0 bytes 0 } }
  • Implementouse a fusión automática de elementos de lista de conxuntos que se cruzan durante a operación. Anteriormente, cando se estableceu a opción de "fusión automática", a fusión realizábase na fase de declaración das regras, pero agora tamén funciona cando se engaden novos elementos durante a operación. Por exemplo, na fase de declaración, a lista estableceu 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 } } converterase en elementos = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } e despois se engades novos elementos # nft add element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } parecerá elementos = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Cando elimina elementos individuais da lista que se atopan dentro dos elementos de intervalo existentes, o intervalo acurtase ou divídese.

  • A compatibilidade para combinar regras de tradución de enderezos múltiples (NAT) nunha lista de mapas engadiuse ao optimizador de regras, chamado cando se especifica a opción "-o/—optimize". Por exemplo, para o conxunto # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; caída da 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 } }

    ao executar "nft -o -c -f ruleset.nft" converterase as regras separadas "ip saddr" nunha lista de mapas: 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}

    Do mesmo xeito, as expresións en bruto poden converterse en listas de mapas: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 ,62 78x160,128e0e pasou a nat_dns_this_0 Lonxitude udp 31393032383939353831343037320-5301 @th,62 78x160,128e0e pasou a nat_dns_saturn_0 Lonxitude udp 31363436323733373931323934300-5301 @th,62 78x160,128 0e pasou a nat_dns_saturn_0 udp length 32393535373539353636383732310-5302 @th,62 78x160,128e0e pasou a nat_dns_saturn_0 drop }

    despois da optimización obtemos unha lista de mapas: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203: paso a nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e: vai a nat_dns_this_5301, 62-78. 0x0e31363436323733373931323934300e: vai a nat_dns_saturn_5301, 62-78. 0x0e32393535373539353636383732310e: vai a nat_dns_saturn_5302, 62-78. 0x0e38353439353637323038363633390e: ir a nat_dns_saturn_5303 }

  • Permítese o uso de expresións en bruto nas operacións de concatenación. Por exemplo: #nft add rule xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } ou táboa x { set y { typeof ip saddr . @ih,32,32 elementos = { 1.1.1.1 . 0x14 } } }
  • Engadido soporte para especificar campos de cabeceira enteiro nas operacións de concatenación: table inet t { map m1 { typeof udp length . @ih,32,32 : o veredicto marca elementos de intervalo = { 20-80 . 0x14 : aceptar, 1-10 . 0xa : soltar } } cadea c { prioridade de entrada de gancho de filtro tipo 0; caída da política; lonxitude udp. @ih,32,32 vmap @m1 } }
  • Engadido soporte para restablecer as opcións TCP (só funciona co núcleo Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • Acelerouse a execución de ordes de saída en cadea ("nft list chain xy").

Fonte: opennet.ru

Engadir un comentario