Se ha publicado el lanzamiento del filtrador de paquetes nftables 1.1.6, 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 correspondiente de la biblioteca libnftnl 1.3.1, 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:
- Se ha garantizado la compatibilidad completa con plantillas de túneles livianos, como vxlan, geneve y erspan: table netdev global { tunnel t1 { id 10 ip saddr 192.168.2.10 ip daddr 192.168.2.11 sport 1025 dport 20020 ttl 1 erspan { version 1 index 2 } } tunnel t2 { id 10 ip saddr 192.168.3.10 ip daddr 192.168.3.11 sport 1025 dport 21021 ttl 1 erspan { version 1 index 2 } } chain in { type filter hook ingress device veth0 priority 0; tunnel name ip saddr map { 10.141.10.12 : «t1», 10.141.10.13 : «t2» } fwd to erspan1 } } Antes de cargar las reglas, se debe crear la interfaz de red erspan1: ip link add dev erspan1 type erspan external
- Se ha añadido soporte para máscaras en los nombres de las interfaces de red en los controladores netdev, por ejemplo, para añadir una cadena básica al filtro de tráfico entrante para todos los dispositivos vlan se puede especificar: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
- En sistemas con núcleo Linux 6.18+ se ha implementado el soporte para la transmisión de tramas L2 en la interfaz de los puentes de red para procesamiento local, por ejemplo, para redirigir todas las tramas Ethernet al stack IP para la dirección MAC de:ad:00:00:be:ef se puede especificar: table bridge global { chain pre { type filter hook prerouting priority 0; policy accept; ether daddr de:ad:00:00:be:ef meta pkttype set host ether daddr set meta ibrhwaddr accept } }
- Se ha añadido una nueva infraestructura para pruebas de fuzzing utilizando el conjunto de herramientas afl++ (American Fuzzy Lop++), habilitada durante la etapa de compilación a través de «./configure —with-fuzzer».
Fuente: opennet.ru
