¿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.