Podcast de Redes de Eduardo Collado

Podcast de Redes de Eduardo Collado


Introducción a Nftables

July 12, 2019

Esta frase creo que puede resumir de qué vamos a hablar hoy, hoy vamos a hablar de la evolución del firewall en Linux, la cual en los últimos años se había desmadrado un poco.

Por un lado teníamos iptables, por otro ebtables y luego la configuración y el funcionamiento de ambos no estaban homogeneizados, además de los problemas de configuración de repetir trozos, etc…

A día de hoy tenemos un software para controlarlo todo con un mejor rendimiento y una sintaxis más adaptada a los tiempos que corren, se llama nftables y ya lo podéis encontrar en nuestro queridísimo Debian 10.

Y aún sin haber escrito ni una sola línea nunca de nftables podréis empezar a utilizar nftables porque en iptables tenemos un fantástico conversor, el iptables-translate.

Pero antes de meternos con comandos y demás voy a contaros un poco como se organiza todo esto suponiendo que no sabéis nada ni de iptables ni de nftables ni de nada parecido, voy a intentarlo.

Por un lado tenemos las reglas (rules) que son las acciones y se configuran dentro de una cadena o chain. Una regla sería por ejemplo tira todo el tráfico de entrada al puerto 25.

Por otro lado tenemos las cadenas (chains) que son un grupo de reglas (rules) que están dentro de tables (tables). Una cadena sería por ejemplo el conjunto de reglas que aplican a las redes autorizadas a acceder por el cliente.

Y por último tenemos las tables (tables) que son simplemente el contenedor de las cadenas. Lo normal en una máquina estándar es que hayan muy poquitas tablas, incluso que sólo haya una, pero claro, depende de quien lo configure.

Con esto ya podéis ver cual es la organización. La idea es que podamos ver la tabla y sólo con leer las cadenas podamos saber qué hace ese firewall. Creedme si os digo que es muy más sencillo verlo así, es algo parecido a programar, cuando programáis no ponéis todo el código línea tras línea, usáis funciones, que serían las cadenas, y si es necesario podéis reutilizar código.

Un ejemplo podría ser el autorizar el acceso SSH desde las IPs de gestión, pero también permitiremos desde esas mismas IPs el acceso al puerto de DNS. En este caso podemos definir las reglas correspondientes a esas máquinas autorizadas y definirlas en la cadena “Autorizadas”, luego podemos decir que pueden acceder al puerto de SSH son las “Autorizadas” y también podemos decir que tienen acceso al DNS las máquinas “Autorizadas”, sin tener que definir otra vez las reglas porque podemos reutilizarlas.

Si os dais cuenta la herramienta ip_set ya no será necesaria en nftables porque ya lo hace por defecto.

Si empezamos por los comandos relacionados con las tables tendremos lo más sencillo, aunque lo primero que tenemos que saber es cual es el comando de nftables que no es otro que nft, con ese comando se hace todo.

Obviamente para escribir reglas antes tenemos que tener una cadena y para definir cadenas tenemos que tener una tabla.

Así que lo primero será definir una tabla, aunque por defecto tenemos una llamada filter de tipo IP.

Las tables pueden ser de tipo ip, arp, ip6, bridge, inet, netdev.

Por supuesto las tablas podemos añadirlas, borrarlas, vaciarlas o listarlas:

nft (list | add | delete | flush) table [<family>] <name>

nft list tables [<family>]