Lanzamiento del filtro de paquetes nftables 0.9.9

Se ha publicado el lanzamiento del filtro de paquetes nftables 0.9.9, que unifica las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red (destinado a reemplazar iptables, ip6table, arptables y ebtables). Al mismo tiempo, se publicó el lanzamiento de la biblioteca complementaria libnftnl 1.2.0, que proporciona una API de bajo nivel para interactuar con el subsistema nf_tables. Los cambios necesarios para que funcione la versión nftables 0.9.9 se incluyen en el kernel de Linux 5.13-rc1.

El paquete nftables incluye componentes de filtrado de paquetes que se ejecutan en el espacio del usuario, mientras que el trabajo a nivel del kernel lo proporciona el subsistema nf_tables, que ha sido parte del kernel de Linux desde la versión 3.13. El nivel del kernel proporciona solo una interfaz genérica independiente del protocolo que proporciona funciones básicas para extraer datos de paquetes, realizar operaciones de datos y control de flujo.

Las reglas de filtrado y los controladores específicos del protocolo se compilan en un código de bytes en el espacio del usuario, después de lo cual este código de bytes se carga en el kernel usando la interfaz Netlink y se ejecuta en el kernel en una máquina virtual especial que recuerda a BPF (Berkeley Packet Filters). Este enfoque le permite reducir significativamente el tamaño del código de filtrado que se ejecuta a nivel del kernel y mover todas las funciones de reglas de análisis y lógica para trabajar con protocolos al espacio del usuario.

Principales novedades:

  • Se implementó la capacidad de mover el procesamiento de la tabla de flujo al lado del adaptador de red, habilitada mediante el indicador de "descarga". Flowtable es un mecanismo para optimizar la ruta de redirección de paquetes, en el que el paso completo de todas las cadenas de procesamiento de reglas se aplica solo al primer paquete y todos los demás paquetes del flujo se reenvían directamente. table ip global { flowtable f { filtro de prioridad de ingreso de gancho + 1 dispositivos = { lan3, lan0, wan } descarga de banderas } cadena hacia adelante { filtro de tipo gancho filtro de prioridad de avance; aceptar política; protocolo ip { tcp, udp } flujo agregar @f } publicación de cadena { tipo nat gancho filtro de prioridad posterior al enrutamiento; aceptar política; oifname "wan" mascarada } }
  • Se agregó soporte para adjuntar una marca de propietario a una tabla para garantizar el uso exclusivo de la tabla por parte de un proceso. Cuando un proceso finaliza, la tabla asociada a él se elimina automáticamente. La información sobre el proceso se muestra en el volcado de reglas en forma de comentario: table ip x { # progname nft flags propietario cadena y { tipo filtro gancho filtro de prioridad de entrada; aceptar política; paquetes de contador 1 bytes 309 } }
  • Se agregó soporte para la especificación IEEE 802.1ad (apilamiento de VLAN o QinQ), que define un medio para sustituir múltiples etiquetas VLAN en una sola trama Ethernet. Por ejemplo, para verificar el tipo de trama Ethernet externa 8021ad y vlan id=342, puede usar la construcción ... ether type 802.1ad vlan id 342 para verificar el tipo externo de trama Ethernet 8021ad/vlan id=1, 802.1 anidado q/vlan id=2 y encapsulación adicional de paquetes IP: ... tipo ether 8021ad vlan id 1 vlan tipo 8021q vlan id 2 vlan tipo contador ip
  • Se agregó soporte para administrar recursos usando la jerarquía unificada cgroups v2. La diferencia clave entre cgroups v2 y v1 es el uso de una jerarquía de cgroups común para todo tipo de recursos, en lugar de jerarquías separadas para asignar recursos de CPU, regular el consumo de memoria y E/S. Por ejemplo, para comprobar si el antepasado de un socket en el primer nivel cgroupv2 coincide con la máscara “system.slice”, puede utilizar la construcción: ... socket cgroupv2 nivel 1 “system.slice”
  • Se agregó la capacidad de verificar los componentes de los paquetes SCTP (la funcionalidad requerida para esto aparecerá en el kernel de Linux 5.14). Por ejemplo, para verificar si un paquete contiene un fragmento con tipo 'datos' y campo 'tipo': ... los datos del fragmento sctp existen ... el tipo de datos del fragmento sctp 0
  • La ejecución de la operación de carga de reglas se ha acelerado aproximadamente dos veces utilizando el indicador "-f". También se ha acelerado la publicación de la lista de normas.
  • Se proporciona un formulario compacto para comprobar si los bits de bandera están establecidos. Por ejemplo, para comprobar que los bits de estado snat y dnat no están configurados, puede especificar: ... ct status ! snat,dnat para verificar que el bit de sincronización esté configurado en la máscara de bits syn,ack: ... tcp flags syn / syn,ack para verificar que los bits fin y rst no estén configurados en la máscara de bits syn,ack,fin,rst: ... banderas tcp! = fin,primero / syn,ack,fin,primero
  • Permitir la palabra clave "veredicto" en las definiciones de tipo set/map: add map xm { typeof iifname . protocolo ip º puerto: veredicto;}

Fuente: opennet.ru

Añadir un comentario