nftables es el subsistema de filtrado de paquetes del kernel Linux (sucesor de iptables/ipset/ebtables desde el kernel 3.13, por defecto desde Debian 10/Ubuntu 18.04+). Se estructura en tablas (table), cadenas (chain) enganchadas a hooks del kernel (prerouting, input, forward, output, postrouting) y reglas evaluadas secuencialmente dentro de cada cadena. Su motor de conjuntos (sets) con estructuras hash permite escalar a miles de reglas sin degradación lineal de rendimiento.
⚙️ Ficheros de Configuración y Rutas Clave
Ruta
Descripción
/etc/nftables.conf
Fichero principal de reglas, cargado al arranque por el servicio nftables.service.
/etc/sysctl.d/*.conf
Parámetros de kernel complementarios (forwarding, anti-spoofing).
/var/log/kern.log
Registro de paquetes marcados con log en las reglas.
/proc/net/nf_conntrack
Tabla de seguimiento de conexiones en tiempo real.
🛠️ Comandos de Administración / Cheat Sheet CLI
Gestión básica
1 2 3 4 5 6 7 8 910
nftlistruleset# Ver ruleset completo activo
nftlistruleset-a# Con handles y contadores por regla
nft-f/etc/nftables.conf# Cargar/recargar ruleset completo (atomico)
nftflushruleset# Vaciar todo el ruleset (¡cuidado en producción!)
nftaddtableinetfilter
nftaddchaininetfilterinput'{ type filter hook input priority 0; policy drop; }'
nftaddruleinetfilterinputtcpdport22accept
nftdeleteruleinetfilterinputhandle<N># Borrar regla por handle
conntrack-L# Listar conexiones activas rastreadas
conntrack-L-ptcp--dport443# Filtrar por puerto
conntrack-D-s203.0.113.50# Eliminar entradas de una IP concreta
🛡️ Bastionado y Hardening (CCN-CERT / CIS)
Política por defecto drop en input y forward; nunca accept (principio de mínimo privilegio, default deny).
Descarte explícito de ct state invalid antes de cualquier regla de aceptación.
Segmentación DMZ/LAN con reglas de aislamiento explícitas en ambos sentidos, nunca solo unidireccional.
limit rate en reglas de logging para evitar saturación de disco por flood de paquetes descartados.
Combinar con sysctl anti-spoofing (rp_filter, accept_source_route=0) — el firewall de capa 4 no sustituye el hardening de pila TCP/IP del kernel.
🩺 Diagnóstico, Logs y Escalado
Síntoma
Comando
Causa habitual
Servicio inaccesible tras aplicar reglas
nft list ruleset -a (revisar contadores)
Regla de bloqueo evaluada antes de la de aceptación (orden importa).
Recarga falla con error de sintaxis
nft -c -f /etc/nftables.conf (modo check)
Error tipográfico o variable define no declarada.
NAT no funciona
sysctl net.ipv4.ip_forward
Forwarding deshabilitado a nivel de kernel.
Conexiones se cortan tras un tiempo
conntrack -L \| wc -l vs sysctl net.netfilter.nf_conntrack_max
Tabla de conntrack llena, se necesitan más entradas o tiempos de timeout menores.
Escalar como incidente cualquier modificación no planificada de la política por defecto de las cadenas input/forward a accept, ya que anula el modelo de seguridad perimetral completo.