Lanzamiento del filtro de paquetes nftables 1.0.6

Se ha publicado el lanzamiento del filtro de paquetes nftables 1.0.6, 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:

  • El optimizador de reglas, llamado cuando se especifica la opción “-o/—optimize”, tiene un empaquetado automático de reglas combinándolas y convirtiéndolas en mapas y listas de conjuntos. Por ejemplo, reglas # cat reglasset.nft tabla ip x {cadena y {tipo filtro gancho filtro de prioridad de entrada; caída de la política; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 aceptar meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 aceptar meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 aceptar meta iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 ip daddr 2.2.4.10-2 aceptar meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 aceptar } } después de ejecutar "nft -o -c -f reglasset.nft" se convertirá a lo siguiente: conjunto de reglas nft:17:74-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 aceptar conjunto de reglas.nft:17:74-1: meta iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 aceptar conjunto de reglas.nft : 17:77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 aceptar reglas.nft:17:83-1: meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8 aceptar reglas.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 aceptar en: iifname. dirección ip. ip papá { eth1.1.1.1 . 2.2.2.3. 1, eth1.1.1.2. 2.2.2.4. 1, eth1.1.1.2. 2.2.3.0. 24/1, eth1.1.1.2. 2.2.4.0. 2.2.4.10-2, eth1.1.1.3. 2.2.2.5. XNUMX } aceptar
  • El optimizador también puede convertir reglas que ya usan listas de conjuntos simples a una forma más compacta, por ejemplo las reglas: # cat ruleset.nft table ip filter { chain input { type filter gancho entrada filtro de prioridad; caída de la política; iifname “lo” aceptar ct estado establecido, relacionado aceptar comentario “En el tráfico que originamos, confiamos” iifname “enp0s31f6” ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 aceptar iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 aceptar } } después de ejecutar "nft -o -c -f reglaset.nft" se empaquetará de la siguiente manera : conjunto de reglas.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 aceptar reglas.nft:7:22 - 143: iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 aceptar en: iifname. dirección ip. ip papá deporte udp. puerto udp { enp0s31f6 . 209.115.181.102. 10.0.0.149. 123. 32768-65535, enp0s31f6. 216.197.228.230. 10.0.0.149. 123. 32768-65535, enp0s31f6. 64.59.144.17. 10.0.0.149. 53. 32768-65535, enp0s31f6. 64.59.150.133. 10.0.0.149. 53. 32768-65535 } aceptar
  • Se resolvió el problema con la generación de códigos de bytes para fusionar intervalos que usan tipos con diferente orden de bytes, como IPv4 (orden de bytes de la red) y metamarca (orden de bytes del sistema). tabla ip x { mapa w { tipo de ip saddr . meta marca: elementos del contador de intervalo de banderas de veredicto = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122: aceptar, 192.168.0.10-192.168.1.20. 0x0000aa00-0x0000aaff: aceptar, } } cadena k { tipo filtro gancho filtro de prioridad de entrada; caída de la política; dirección ip. meta marca vmap @w } }
  • Comparación mejorada de protocolos raros cuando se usan expresiones sin formato, por ejemplo: meta l4proto 91 @th,400,16 0x0 aceptar
  • Se han resuelto los problemas con la habilitación de reglas a intervalos: insertar regla xy tcp sport { 3478-3497, 16384-16387 } contador aceptar
  • La API JSON se ha mejorado para incluir soporte para expresiones en listas de conjuntos y mapas.
  • Las extensiones a la biblioteca Python de nftables permiten cargar conjuntos de reglas para procesar en modo de validación ("-c") y agregar soporte para la definición externa de variables.
  • Se permite agregar comentarios en los elementos de la lista de canciones.
  • El límite de velocidad de bytes permite especificar un valor cero.

Fuente: opennet.ru

Añadir un comentario