Se ha publicado la versión 1.0.5 del filtrador de paquetes nftables, que unifica las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red (destinado a reemplazar iptables, ip6tables, arptables y ebtables). Al mismo tiempo, se ha publicado la versión 1.2.3 de la biblioteca auxiliar libnftnl, que proporciona una API de bajo nivel para interactuar con el subsistema nf_tables.
El paquete nftables incluye componentes del filtrador de paquetes que funcionan en el espacio de usuario, mientras que a nivel del núcleo, el trabajo es realizado por el subsistema nf_tables, incluido en el núcleo de Linux desde la versión 3.13. A nivel del núcleo, solo se proporciona una interfaz general, independiente del protocolo específico, que ofrece funciones básicas para extraer datos de paquetes, realizar operaciones con datos y gestionar flujos.
Las reglas de filtrado y los controladores específicos del protocolo se compilan en bytecode en el espacio de usuario, que luego se carga en el núcleo a través de la interfaz Netlink y se ejecuta en el núcleo en un espacio especial una máquina virtual, similar a BPF (Berkeley Packet Filters). Este enfoque permite reducir significativamente el tamaño del código de filtrado que opera a nivel de núcleo y trasladar todas las funciones de análisis de reglas y la lógica de trabajo con protocolos al espacio de usuario.
Principales cambios:
- En el optimizador de reglas, llamado al especificar la opción «-o/—optimize», se han resuelto problemas relacionados con la fusión de reglas, listas map y set. # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } } # nft -o -c -f ruleset.nft Merging: ruleset.nft:4:3-52: ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ruleset.nft:5:3-52: ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 into: 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 }
- Al combinar elementos ethernet y vlan, se ha asegurado la definición de una lista set dinámica, poblada en función de los parámetros de la ruta del paquete. add table netdev x add chain netdev x y { type filter hook ingress device enp0s25 priority 0; } add set netdev x macset { typeof ether daddr . vlan id; flags dynamic,timeout; } add rule netdev x y update @macset { ether daddr . vlan id timeout 60s } add rule netdev x y ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 0a:0b:0c:0d:0e:0f . 4095 } counter accept
- Se ha establecido la visualización de reglas con listas map que contienen máscaras en los nombres de las interfaces. table inet filter { chain INPUT { iifname vmap { «eth0» : jump input_lan, «wg*» : jump input_vpn } } chain input_lan {} chain input_vpn {} }
- Se han corregido regresiones que causaban un análisis léxico incorrecto de reglas válidas.
- Se han solucionado problemas de procesamiento lento y fusión automática de grandes listas con elementos que definen rangos de valores.
- Se ha eliminado el fallo al agregar elementos a una lista set incorrecta.
Fuente: opennet.ru
