nftables: Firewall Moderno

nftables es una herramienta que filtra paquetes y los clasifica, actuando como un firewall para sistemas Linux. Es el sustituto directo de iptables, ip6tables, arptables , unificando todos estos frameworks en una sola solución más limpia, estructurada y eficiente. Su función es controlar el tráfico de red, permitiendo o bloqueando conexiones según reglas que el administrador define. Así, protege el sistema, organiza el flujo de datos y previene accesos no deseados.


Comandos Básicos de nftables

Mostrar todas las cadenas existentes

sudo nft list chains

Ver todas las reglas de la tabla

sudo nft list table inet filter

Ver reglas con identificadores

sudo nft -a list table inet filter

Exportar configuración en JSON

sudo nft export json

Exportar configuración en XML

sudo nft export xml

Ver todo el ruleset

sudo nft list ruleset

Vaciar todas las reglas del sistema:

sudo nft flush ruleset

Vaciar una tabla específica:

sudo nft flush table inet filter

Crear tabla y cadenas básicas

sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0\; }
sudo nft add chain inet filter forward { type filter hook forward priority 0\; }

Agregar una regla al final de la cadena input

sudo nft add rule inet filter input tcp dport 22 accept

Agregar con nombre del servicio

sudo nft add rule inet filter input tcp dport ssh accept

Insertar al inicio de la cadena

sudo nft insert rule inet filter input tcp dport 22 accept

Insertar antes del handle 3

sudo nft insert rule inet filter input position 3 tcp dport 636 accept

Insertar después del handle 3

sudo nft add rule inet filter input position 3 tcp dport 80 accept

Reglas comunes de filtrado

Descarta paquetes con estado de conexión inválido

sudo nft add rule inet filter input ct state invalid drop

Permite todo el tráfico entrante desde la interfaz de loopback

sudo nft add rule inet filter input iifname lo accept

Permite paquetes que son parte de una conexión ya establecida o relacionadas

sudo nft add rule inet filter input ct state established,related accept

Permite tráfico entrante al puerto 80

sudo nft add rule inet filter input tcp dport 80 accept

Permite tráfico entrante al puerto 443

sudo nft add rule inet filter input tcp dport 443 accept

Bloquea todo el tráfico entrante que no haya sido explícitamente permitido antes

sudo nft add rule inet filter input drop

Usar sets para múltiples puertos

sudo nft add set inet filter allowed_ports { type inet_service\; elements = { 22,80,443 } }
sudo nft add rule inet filter input tcp dport @allowed_ports accept

Detectar paquetes sin flags

sudo nft add rule inet filter input tcp flags == 0x0 drop

Prevenir anomalías TCP

sudo nft add rule inet filter input tcp flags all == fin,syn,rst,psh,ack,urg drop

Limitar tráfico sospechoso:

sudo nft add rule inet filter input tcp flags != syn ct state new counter log prefix "SUSPICIOUS: " level warning

Limitar conexiones por segundo

sudo nft add rule inet filter input limit rate 15/second counter drop

Bloquear IPs en set

sudo nft add set inet filter banned_ips { type ipv4_addr\; elements = { 103.0.0.0/8,185.220.101.0/24 } }
sudo nft add rule inet filter input ip saddr @banned_ips drop

NAT y redirección

sudo nft add table ip nat
sudo nft add chain ip nat postrouting { type nat hook postrouting priority 100\; }
sudo nft add rule ip nat postrouting oifname "eth0" ip saddr 192.168.10.0/24 masquerade

Guardar reglas y hacerlas persistentes:

sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftables

Para mas información

Última actualización