Artículos de Ciberseguridad en Español

Todo es lo mismo pero siempre encontramos un punto diferente.

Cómo migrar de iptables a Nftables - guía completa

Cómo migrar de iptables a Nftables – guía completa

Nftables es una nueva implementación del firewall en el kernel de Linux que tiene como objetivo reemplazar iptables. Como casi todas las demás configuraciones de diseño, esta herramienta aún causa sentimientos encontrados entre los usuarios. Y la pregunta clave, por supuesto, es: ¿qué cualidades sobresalientes se pueden obtener al cambiar a él?

1 Eliminar una regla innecesaria

2 matrices asociativas

3 NAT sin estado

4 Acciones múltiples

4.1 tablas netdev5 Conclusión

   En la nota “Nftables. Cómo se ve el futuro de las opciones de firewall en Linux ”Cubrí los conceptos básicos de la opción nftables y la navegación de iptables. Posteriormente, el conjunto de reglas para viajar se acortó. Gracias a las nuevas características de nftables como variables y ayuda integrada para grupos de objetos, sin embargo, en términos de funcionalidad, es similar a la anterior y algunos usuarios generalmente dudan de la viabilidad de la migración.

   Por el momento, analizaremos una serie de funciones de nftables que faltan en iptables, y nos aseguraremos de que los desarrolladores no hayan comenzado a reelaborar el firewall en Linux por simples cosas aburridas.

  Reglas de seguimiento


   Lo más probable es que sucedió, de hecho, que el tráfico necesario está bloqueado incorrectamente por una cierta regla, pero no tiene la oportunidad de comprender cómo y cómo. Nftables tiene un rastreador de reglas integrado para estos casos.
   Considérelo con un ejemplo obvio. Deje que su regla bloquee todo el tráfico en la red 192.0.2.0/24.    Suponga que lo olvidó y no lo ve de cerca en la configuración, y los usuarios se quejan de que el tráfico del host 192.0.2.1 no pasa. No importa: podemos habilitar el seguimiento de todos los paquetes con una dirección de origen 192.0.2.1. Esto se hace con la opción nftrace set 1.    Ahora, en la salida del comando nft monitor trace, podemos ver la ruta completa de este paquete a través de nuestro conjunto de reglas.

           $ sudo nft insert rule inet filter input ip saddr 192.0.2.0/24 drop


        $ sudo nft insert rule inet filter input ip saddr 192.0.2.1 meta nftrace set 1


     
   Ahora podemos encontrar la regla necesaria buscando ip saddr 192.0.2.0/24. Este, por supuesto, es un ejemplo obvio, y la regla podría ser mucho menos común e indiscutible, pero en la salida de seguimiento siempre se ve exactamente la regla que eliminó el paquete.  

 Al igual que con tcpdump / Wireshark, elegir un aspecto para rastrear es un requisito previo para una depuración exitosa. El rastreo funciona solo para paquetes que caen bajo la regla con nftrace establecido 1. Si la condición no es muy específica, el paquete no se incluye en ella. Haga que la condición sea muy acumulativa, como el protocolo tcp, y no podrá encontrar lo que necesita en un tamaño de salida grande.


$ sudo nft monitor trace trace id 66fdb23e inet filter input packet: iif "eth0" ether saddr ... ether daddr ... ip saddr 192.0.2.1 ip daddr 203.0.113.1 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 0 ip protocol icmp ip length 84 icmp type echo-request icmp code net-unreachable icmp id 50986 icmp sequence 1 @th,64,96 14560823784192396447041847296 trace id 66fdb23e inet filter input rule ip saddr 192.0.2.1 meta nftrace set 1 (verdict continue) trace id 66fdb23e inet filter input rule ip saddr 192.0.2.0/24 drop (verdict drop)

Eliminar una regla innecesaria   

 Por el momento, hemos agregado una regla de depuración y, una vez finalizada la sesión de depuración, sería genial enviarla. Cómo hacerlo En iptables se requería mostrar cualquier condición de la regla. Nftables es ligeramente diferente.

   Primero, necesita obtener el número de regla en la tabla. Se puede ver en la salida del comando nft -a list ruleset (la opción es importante).
     

$ sudo nft -a list ruleset
table inet filter { # handle 7
...
    chain input { # handle 1
        type filter hook input priority filter; policy accept;
        ip saddr 192.0.2.0/24 meta nftrace set 1 # handle 25
        ...



   Aquí el identificador 25 es el número de regla. Ahora podemos eliminarlo con el comando sudo nft delete rule inet filter input handle 25.

   A diferencia de iptables, nftables no admite la eliminación de reglas basadas en el conjunto completo de opciones. Es algo inconveniente que ya no pueda copiar la regla y cambiar -A / -I a -D, pero por otro lado, el comando para eliminar las reglas se ha acortado.


     Matrices asociativas


   La antigua herramienta de configuración de IP permitía crear diferentes tipos de grupos de objetos, pero no sabía cómo correlacionar los objetos con los permisos: era imposible permitir un objeto en una regla, pero prohibir otro.
   En las reglas de nftables, puede referirse no a un criterio y solución separados, sino a matrices asociativas de ellos. La sintaxis de tales matrices asociativas es vmap {objeto: resolución,…}.

 Aquí, vmap es una opción que especifica que le seguirá una matriz de objetos y permisos, y {clave: valor, …} es la sintaxis general para matrices asociativas.
Por ejemplo, en una regla, podemos permitir opciones SMTP cifradas (SMTPS y SMTP / STARTTLS), pero no permitir el normal en el puerto 25.

      ct state new tcp dport vmap { 465 : accept, 587 : accept, 25 : drop } comment "Secure SMTP only"

   También podemos definir una matriz asociativa con nombre (por ejemplo, banlist) y hacer referencia a ella en la regla usando la opción vmap @banlist. La matriz nombrada puede estar vacía, con la expectativa de una edición dinámica.  

 Esto simplifica enormemente el trabajo de scripts como fail2ban, ya que la matriz se puede editar dinámicamente usando nftables.
table inet filter {
map banlist {
type ipv4_addr : verdict
}

chain input {
type filter hook input priority filter; policy accept;
ip saddr vmap @banlist drop
}
}


     

$ sudo nft add element inet filter banlist { 203.0.113.80 : drop}
$ sudo nft delete element inet filter banlist { 192.0.2.98 : drop}



   El conjunto de IP tenía un conjunto de tipos incorporado, pero no había forma de crear uno propio, por lo que los desarrolladores agregaron numerosas opciones como hash: ip, puerto, tratando de cubrir todos los casos posibles. Este problema ya no existe en nftables: los elementos de las matrices asociativas pueden ser de tipos arbitrarios.

   Por ejemplo, podemos usar una regla NAT para reenviar el puerto 80 a 10.0.0.10 y el puerto 25 a 10.0.0.20.
 

$ sudo nft add rule ip nat prerouting dnat tcp dport map { 80 : 10.0.0.10, 25 : 10.0.0.20 }

    

   Incluso si la sintaxis de nftables le parece menos legible, le permite arreglárselas con menos reglas como compensación


        NAT sin estado        

   Érase una vez en el kernel de Linux una NAT sin pretensiones, no se rastreaba la posición de las conexiones. El dispositivo para rastrearlos (conntrack) mejoró mucho la vida de los administradores de red. Los protocolos difíciles con más de una conexión ya no son una tarea insuperable. 

Además, el procesamiento de paquetes se ha vuelto más rápido, porque la mayor parte de ellos se pueden comparar con la tabla de conexión (la opción de estado en iptables) y ya no es necesario ejecutar un conjunto completo de reglas.


   Sin embargo, a veces, NAT sin estado es realmente una de las mejores soluciones. Por ejemplo, los proveedores de alojamiento de VPS como Amazon utilizan ampliamente NAT 1: 1 para facilitar la administración de la red: la máquina virtual en sí tiene una dirección «gris», que en realidad permite desacoplar el enrutamiento externo e interno. 

El seguimiento de las direcciones del tráfico en este caso no tiene sentido, porque la conclusión para todos los paquetes con una dirección es la misma en todo momento.
   En iptables, esto solo era posible al traducir redes IPv6 (NPTv6). La traducción de direcciones tonta (y por lo tanto muy rápida) ha reaparecido en nftables.



Por ejemplo, traducimos la dirección externa 192.0.2.1 a la interna 10.0.0.1.

 

table ip raw {
    chain prerouting {
        type filter hook prerouting priority raw; policy accept;
        ip daddr 192.0.2.5 ip daddr set 10.0.0.1 notrack
    }
}

 Múltiples acciones


   En iptables, cada criterio tiene la capacidad de tener un solo efecto (está guiado por la opción -j). Es posible utilizar un cierto número de acciones diferentes para 1 paquete con solo unas pocas reglas.
En nftables, una regla puede tener varias acciones. Por ejemplo, podemos registrar paquetes de la red 192.0.2.0/24 y bloquearlos inmediatamente.

$ sudo nft insert rule inet filter input ip saddr 192.0.2.0/24 log level err prefix martian-source drop

          Tablas de Netdev


   Las reglas de estas tablas analizan el tráfico completo a medida que ingresa a la pila de red del núcleo desde el controlador NIC, incluidas las tramas ARP. Esto permite bloquear los paquetes antes de que el núcleo pueda procesarlos. Los creadores recomiendan usar estas tablas para las reglas de defensa DDoS y similares.

Conclusión

En el futuro previsible, nadie tiene la intención de eliminar iptables del kernel, por ejemplo, migrar a nftables o no, depende de usted. Supongo que este programa educativo sin duda le ayudará a tomar una decisión informada y significativa.

A %d blogueros les gusta esto: