Lanzamiento del filtro de paquetes nftables 1.0.0

Se ha publicado la versión 1.0.0 del filtro de paquetes nftables, unificando las interfaces de filtrado de paquetes para IPv4, IPv6, ARP y puentes de red (destinado a reemplazar iptables, ip6tables, arptables y ebtables). Los cambios necesarios para el funcionamiento de la versión 1.0.0 de nftables están incluidos en el núcleo de Linux 5.13. El cambio significativo en el número de versión no está relacionado con cambios drásticos, sino que es simplemente una consecuencia de la continuación secuencial de la numeración en decimal (la versión anterior era 0.9.9).

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.

Novedades principales:

  • Se ha añadido soporte para el elemento de máscara «*» en listas set, que se activa para cualquier paquete que no se ajuste a otros elementos definidos en el conjunto. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; policy accept; ip saddr vmap @blocklist } }
  • Se proporciona la capacidad de definir variables desde la línea de comandos mediante la opción «—define». # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; policy drop; } } # nft —define dev=»{ eth0, eth1 }» -f test.nft
  • Se permite el uso de expresiones constantes (stateful) en listas map: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; policy accept; iif vmap { «lo» : jump wan_input } } }
  • Se ha añadido el comando «list hooks» para mostrar una lista de los manejadores de un determinado conjunto de paquetes: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev x y [nf_tables] +0000000300 chain inet m w [nf_tables] } hook input { -0000000100 chain ip a b [nf_tables] +0000000300 chain inet m z [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip a c [nf_tables] } hook output { -0000000225 selinux_ipv4_output } hook postrouting { +0000000225 selinux_ipv4_postroute } }
  • En los bloques «queue» se permite combinar expresiones jhash, symhash y numgen para distribuir paquetes entre colas en el espacio del usuario. … queue to symhash mod 65536 … queue flags bypass to numgen inc mod 65536 … queue to jhash oif . meta mark mod 32 «queue» también se puede combinar con listas map para seleccionar la cola en el espacio del usuario basada en claves arbitrarias. … queue flags bypass to oifname map { «eth0» : 0, «ppp0» : 2, «eth1» : 2 }
  • Se ha proporcionado la posibilidad de expandir variables que incluyen listas set en múltiples maps. define interfaces = { eth0, eth1 } table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook input priority 0; policy accept; iifname vmap { «lo» : accept, «eth0» : drop, «eth1» : drop } } }
  • Se permite la combinación de vmaps (verdict map) con intervalos: # nft add rule x y tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : accept }
  • Se ha simplificado la sintaxis de coincidencias para NAT. Se permite especificar rangos de direcciones: … snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } o explícitos direcciones IP y puertos: … dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } o combinaciones de rangos de IP y puertos: … dnat to ip saddr . tcp dport map { 192.168.1.2 . 80 : 10.141.10.2-10.141.10.5 . 8888-8999 }

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