Seguridad

Firewall con nftables: configuración paso a paso

15 dic 2024 8 min lectura 193 visitas Actualizado: 05 jul 2026
Firewall con nftables: configuración paso a paso

¿Por qué nftables y no iptables?

Desde Debian 10 (Buster), nftables es el framework de firewall por defecto. Iptables sigue funcionando, pero nftables ofrece mejor rendimiento, sintaxis más limpia y conjuntos (sets) nativos.

Instalación base

apt update && apt install nftables -y
systemctl enable nftables
systemctl start nftables

Nuestra configuración tipo

En Tinux Net no usamos herramientas visuales ni generadores. Cada regla se escribe según el servidor:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
  set blocked_ips {
    type ipv4_addr
    flags interval
    elements { 1.2.3.0/24, 5.6.7.8 }
  }

  chain input {
    type filter hook input priority 0; policy drop;

    # Permitir tráfico ya establecido
    ct state established,related accept
    ct state invalid drop

    # Loopback
    iif lo accept

    # Bloquear IPs conocidas
    ip saddr @blocked_ips drop

    # SSH
    tcp dport 22 ct state new limit rate 5/minute accept

    # HTTP/HTTPS
    tcp dport { 80, 443 } accept

    # ICMP limitado
    ip protocol icmp limit rate 2/second accept

    # Log y drop final
    log prefix "[NFT DROP] " drop
  }

  chain forward {
    type filter hook forward priority 0; policy drop;
  }

  chain output {
    type filter hook output priority 0; policy accept;
  }
}

Conjuntos dinámicos con Fail2ban

Podemos hacer que Fail2ban añada IPs al set blocked_ips automáticamente, sin reiniciar el firewall:

# En /etc/fail2ban/action.d/nftables.conf
[Definition]
actionstart = nft add set inet filter blocked_ips { type ipv4_addr \; flags interval \; }
actionban = nft add element inet filter blocked_ips {  }
actionunban = nft delete element inet filter blocked_ips {  }

Conclusión

Un firewall configurado a mano no tiene reglas innecesarias. Cada línea tiene un propósito claro, y si algo falla, sabes exactamente dónde mirar.