Tutorial de Nftables

Tutorial De Nftables



Este tutorial explica cómo trabajar con el firewall Nftables Linux. Este contenido está optimizado tanto para usuarios experimentados como nuevos de Linux.

Nftables es un componente del kernel de Linux que proporciona funcionalidades de cortafuegos. Es el reemplazo de Iptables.







Después de leer este tutorial, comprenderá las reglas de Nftables y podrá crear su firewall. No necesitas conocimientos previos sobre Iptables.



Todos los ejemplos de este tutorial contienen capturas de pantalla, lo que facilita que todos los usuarios de Linux, independientemente de su nivel de conocimiento, los comprendan e implementen.



Primeros pasos con Nftables

Antes de comenzar, cree y abra un archivo con un editor de texto como nano o vi para comenzar a escribir sus primeras reglas de Nftables según el siguiente ejemplo. No copie y pegue; escriba todo.





nano cortafuegos.nft

El ejemplo de este tutorial es bastante simple y muestra un cortafuegos restrictivo en el que todo el tráfico IPv4 se elimina, excepto el loopback y puertos específicos.



En la captura de pantalla anterior, utilicé la primera línea para definir mi red local (192.168.0.0/16) como LinuxHintNet.

definir LinuxHintNet = 192.168.0.0 / 16

En la segunda línea, defino un grupo de puertos (80,443 y 22). Llamo a este grupo AllowPorts porque planeo permitir el tráfico a través de ellos. AllowPorts es un nombre arbitrario.

definir PermitirPuertos   = { 80 , 443 , 53 , 22 }

Luego, agrego una tabla, que es un contenedor o grupo de cadenas y reglas; ambos se explican a continuación. Las tablas ayudan a organizar las reglas y las cadenas. Llamé a la tabla del ejemplo 'Restrictiva' porque contiene una política restrictiva y su nombre es arbitrario.

La dirección IP antes del nombre de la tabla indica que las reglas de la tabla de colas solo se aplicarán al tráfico IPv4. Puede usar inet en lugar de IP para aplicar reglas a los protocolos IPv4 e IPv6. O puede reemplazar IP con ip6 solo para IPv6.

Recuerde, Restrictive es un nombre que definí arbitrariamente. Puedes nombrar la tabla como quieras.

En mi caso, aplico reglas solo para IPv4, como se muestra a continuación.

agregar tabla ip Restrictivo

Para ambos protocolos, utilice lo siguiente:

agregar tabla inet Restrictiva

Luego agregamos la primera cadena base, a la que arbitrariamente llamo Entrante porque está relacionada con el tráfico entrante. Sin embargo, puedes nombrarlo como quieras.

La siguiente cadena base elimina todo el tráfico entrante de forma predeterminada:

  • add chain ip Restrictive Incoming: Esta sección agrega la cadena Restrictive Incoming que se aplicará a IPv4
  • type filter: Esto define el tipo de cadena como un filtro ya que filtrará el tráfico. Otros tipos de cadena posibles son ruta o NAT
  • entrada de enlace: se refiere a los paquetes entrantes
  • prioridad 0: la prioridad de la cadena base define el orden de las cadenas base
  • política de caída: la política de caída, por defecto, descarta todos los paquetes
Agregar cadena ip Entrada restrictiva { escribe prioridad de entrada de enlace de filtro 0 ; caída de la política; }

Como puede ver en la siguiente captura de pantalla, creé otras dos cadenas base similares a la anterior, Restrictive Redirect y Restrictive Outgoing. La diferencia es el gancho definido para cada uno (gancho adelante y salida de gancho). Explicarlos es repetitivo.

Después de las tres cadenas base, podemos continuar con las reglas de Nftables para permitir el tráfico de loopback.

Agrego las siguientes líneas para el tráfico entrante y saliente en la interfaz de loopback.

añadir regla ip Restrictivo Incoming iifname lo counter accept

añadir regla ip Restrictivo Entrante oifname lo counter accept

Ahora, agrego cuatro reglas que aceptan tráfico TCP y UDP saliente y entrante a través de todos los puertos incluidos en la variable $AllowPorts definida al principio del archivo.

añadir regla ip Deporte TCP entrante restrictivo $PermitirPuertos contador aceptar

añadir regla ip Puerto TCP saliente restrictivo $PermitirPuertos contador aceptar

añadir regla ip Deporte UDP entrante restrictivo $PermitirPuertos contador aceptar

añadir regla ip Puerto upd saliente restrictivo $PermitirPuertos contador aceptar

Puedes ver el guión completo a continuación.

Una vez que termine de escribir sus tablas, cadenas y reglas, cierre el documento y guarde los cambios.

# En las primeras dos líneas, defino mi red local (LinuxHintNet) y un conjunto de puertos (80,
#443,22) para habilitar el tráfico a través de ellos en las reglas a continuación.
definir LinuxHintNet = 192.168.0.0 / 16
definir PermitirPuertos   = { 80 , 443 , 53 , 22 }
#Declaro una nueva tabla que contendrá cadenas y reglas. Llamo a esta tabla 'Restrictiva'.
#La 'ip' aplica reglas solo a IPv4. Para IPv6, solo use 'ip6' y use 'inet' para ambos protocolos.
agregar tabla ip Restrictivo
# Después de crear la tabla, creo tres cadenas, Entrante, Redirigir y Saliente,
#Sus nombres son arbitrarios. Todos descartan el tráfico entrante, saliente y de reenvío de forma predeterminada.
añadir cadena ip Entrada restrictiva { escribe prioridad de entrada de enlace de filtro 0 ; caída de la política; }
añadir cadena ip Redirección restrictiva { escribe Prioridad de reenvío del enlace del filtro 0 ; caída de la política; }
añadir cadena ip Saliente restrictivo { escribe prioridad de salida de enlace de filtro 0 ; caída de la política; }
# Implemento dos reglas para permitir el tráfico de loopback.
añadir regla ip Restrictivo Incoming iifname lo counter accept
añadir regla ip Restrictivo Entrante oifname lo counter accept
# Implemento reglas para permitir el tráfico a través de los puertos definidos en la variable AllowPorts.
añadir regla ip Deporte TCP entrante restrictivo $PermitirPuertos contador aceptar
añadir regla ip Puerto TCP saliente restrictivo $PermitirPuertos contador aceptar
añadir regla ip Deporte UDP entrante restrictivo $PermitirPuertos contador aceptar

añadir regla ip Puerto upd saliente restrictivo $PermitirPuertos contador aceptar

Para activar el firewall, ejecute el siguiente comando:

sudo nft -F cortafuegos.nft

Puede verificar sus reglas ejecutando el siguiente comando:

sudo conjunto de reglas de la lista nft

Ese es un cortafuegos restrictivo básico.

Conclusión:

Como puede ver, Nftables es mucho más amigable que Iptables y los usuarios pueden aprender Nftables más rápido que Iptables. Dado que Iptables se está descontinuando, y muchas distribuciones están usando Nftables como el firewall predeterminado, incluido Debian. Los usuarios experimentados de Iptables pueden querer ver la herramienta Iptables-nftables-compat, que traduce Iptables a Nftables. Esto puede ayudarlos a comprender las diferencias.

Los usuarios profesionales como los administradores de sistemas tienden a seguir trabajando con Iptables; evite ignorar Nftables para ahorrar tiempo mientras mejora el filtrado. Espero que este artículo haya sido lo suficientemente simple como para convencerte de que pruebes Nftables.