Lanzamiento del filtro de paquetes nftables 1.0.6

Se ha publicado la versión 1.0.6 del filtro de paquetes nftables, que unifica las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red (destinada a reemplazar iptables, ip6tables, arptables y ebtables). El paquete nftables incluye componentes del filtro de paquetes que operan en el espacio de usuario, mientras que en el nivel del núcleo la funcionalidad es proporcionada por el subsistema nf_tables, incluido en el núcleo de Linux desde la versión 3.13. A nivel del núcleo, se ofrece solo una interfaz general, independiente del protocolo específico y que proporciona funciones básicas para la extracción de datos de paquetes, realización de operaciones con datos y gestión de flujo.

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, que se invoca al especificar la opción "-o/--optimize", se ha establecido un empaquetado automático de reglas mediante su combinación y transformación en listas de mapa y conjunto. Por ejemplo, las reglas # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } después de ejecutar "nft -o -c -f ruleset.nft" se transformarán de la siguiente manera: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept en: iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
  • El optimizador también puede convertir en una forma más compacta las reglas que ya utilizan listas de conjuntos simples, por ejemplo, las reglas: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname "lo" accept ct state established,related accept comment "Confiamos en el tráfico que generamos" 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 accept 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 accept } } después de ejecutar «nft -o -c -f ruleset.nft» estarán empaquetadas de la siguiente manera: ruleset.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 accept ruleset.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 accept en: iifname . ip saddr . ip daddr . udp sport . udp dport { 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 } accept
  • Se resolvió el problema con la generación de bytecode para fusionar intervalos en los que se aplican tipos con diferentes ordenamientos de bytes, por ejemplo, IPv4 (orden de bytes de red) y meta mark (orden de bytes del sistema). table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
  • Se ha establecido la correspondencia de protocolos raros al usar expresiones en bruto, por ejemplo: meta l4proto 91 @th,400,16 0x0 accept
  • Se resolvieron problemas con la inclusión de reglas con intervalos: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
  • Mejorada la API JSON, que ahora admite expresiones en listas set y map.
  • En las extensiones a la biblioteca de Python nftables, se ha permitido la carga de conjuntos de reglas para el procesamiento en modo de verificación («-c») y se ha añadido soporte para definiciones externas de variables.
  • En los elementos de las listas set se ha permitido la adición de comentarios.
  • En el byte ratelimit se ha permitido especificar un valor cero.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster