Lanzamiento del filtro de paquetes nftables 1.0.7

Se ha publicado el lanzamiento del filtro de paquetes nftables 1.0.7, que unifica las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red (destinado a reemplazar iptables, ip6table, arptables y ebtables). 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.

Cambios importantes:

  • Para los sistemas que ejecutan el kernel de Linux 6.2+, se agregó soporte para asignaciones de protocolos vxlan, geneve, gre y gretap, lo que permite expresiones simples para verificar los encabezados en paquetes encapsulados. Por ejemplo, para verificar la dirección IP en el encabezado de un paquete anidado de VxLAN, ahora puede usar las reglas (sin la necesidad de desencapsular primero el encabezado de VxLAN y vincular el filtro a la interfaz vxlan0): ... udp dport 4789 vxlan ip protocolo udp... udp dport 4789 vxlan ip saddr 1.2.3.0/24... udp dport 4789 vxlan ip saddr. vxlan ip papádr { 1.2.3.4 . 4.3.2.1 }
  • Se ha implementado la compatibilidad con la combinación automática de restos después de la eliminación parcial de un elemento de la lista de conjuntos, lo que le permite eliminar un elemento o parte de un rango de un rango existente (anteriormente, un rango solo se podía eliminar por completo). Por ejemplo, después de eliminar el elemento 25 de una lista de conjuntos con rangos 24-30 y 40-50, la lista seguirá siendo 24, 26-30 y 40-50. Las correcciones necesarias para que funcione la fusión automática se ofrecerán en las versiones de mantenimiento de las ramas estables del kernel 5.10+. # tabla de conjunto de reglas de lista nft ip x { set y { tipo de tcp dport flags intervalo elementos de combinación automática = { 24-30, 40-50 } } } # nft eliminar elemento ip xy { 25 } # tabla de conjunto de reglas de lista nft ip x { set y { typeof tcp dport flags intervalo elementos de fusión automática = { 24, 26-30, 40-50 } } }
  • Permite el uso de contactos y rangos al mapear la traducción de direcciones (NAT). table ip nat { enrutamiento previo de cadena { tipo nat gancho enrutamiento previo prioridad dstnat; aceptar política; dnat a ip daddr. mapa de puerto tcp { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } persistente } }
  • Se agregó soporte para la expresión "última", que le permite averiguar la hora del último uso de un elemento de regla o lista de conjuntos. La característica es compatible a partir del kernel de Linux 5.14. table ip x { set y { tipo de ip daddr . tcp dport tamaño 65535 banderas dinámicas, tiempo de espera último tiempo de espera 1h} cadena z {tipo filtro gancho salida filtro de prioridad; aceptar política; actualizar @y { ip daddr . tcp dport } } } # lista nft establecer ip xy tabla ip x { establecer y { tipo de ip daddr . tcp tamaño de puerto 65535 banderas dinámicas, tiempo de espera último tiempo de espera 1h elementos = {172.217.17.14. 443 último uso 1s591ms tiempo de espera 1h expira 59m58s409ms, 172.67.69.19. 443 último uso 4s636ms tiempo de espera 1h expira 59m55s364ms, 142.250.201.72. 443 último uso 4s748ms tiempo de espera 1h expira 59m55s252ms, 172.67.70.134. 443 último uso 4s688ms tiempo de espera 1h expira 59m55s312ms, 35.241.9.150. 443 último uso 5s204ms tiempo de espera 1h expira 59m54s796ms, 138.201.122.174. 443 último uso 4s537ms tiempo de espera 1h expira 59m55s463ms, 34.160.144.191. 443 último uso 5s205ms tiempo de espera 1h expira 59m54s795ms, 130.211.23.194. 443 último uso 4s436ms tiempo de espera 1h expira 59m55s564ms } } }
  • Se agregó la capacidad de definir cuotas en listas establecidas. Por ejemplo, para determinar la cuota de tráfico para cada dirección IP de destino, puede especificar: table netdev x { set y { typeof ip daddr size 65535 cuota sobre 10000 mbytes } chain y { type filter gancho salida dispositivo "eth0" filtro de prioridad; aceptar política; ip daddr @y drop } } # nft agregar elemento inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft lista tabla de reglas netdev x { set y { tipo ipv4_addr tamaño 65535 cuota sobre 10000 mbytes de elementos = { 8.8.8.8. 10000 cuota de más de 196 mbytes usados ​​0 bytes } } cadena y { tipo filtro gancho dispositivo de salida filtro de prioridad “ethXNUMX”; aceptar política; ip papá @y soltar } }
  • Se permite el uso de constantes en listas de conjuntos. Por ejemplo, cuando utiliza la dirección de destino y el ID de VLAN como clave de lista, puede especificar directamente el número de VLAN (daddr. 123): table netdev t { set s { typeof ether saddr . tamaño de identificación de vlan 2048 banderas dinámicas, tiempo de espera de espera 1 m} cadena c {tipo filtro gancho dispositivo de entrada eth0 prioridad 0; aceptar política; tipo de ether! = 8021q actualización @s { ether daddr. 123 } contador } }
  • Se agregó un nuevo comando "destruir" para eliminar objetos incondicionalmente (a diferencia del comando eliminar, no genera ENOENT cuando se intenta eliminar un objeto faltante). Requiere al menos el kernel de Linux 6.3-rc para funcionar. destruir el filtro IP de la tabla

Fuente: opennet.ru

Añadir un comentario