Firewall avanzado: Configuración de iptables y nftables
Resumen: En este artículo encontrará un análisis en profundidad de las herramientas de filtrado de paquetes iptables y nftables en sistemas Linux. Se proporcionan conceptos clave, ejemplos prácticos, comparativas, buenas prácticas y configuraciones avanzadas para proteger redes y servidores de forma profesional y minimalista.
1. Introducción al filtrado de paquetes
Un firewall es la primera línea de defensa en la seguridad de redes. Filtra, registra y bloquea paquetes en función de reglas predefinidas. En Linux, las dos herramientas más utilizadas son iptables (basado en Netfilter) y nftables (su relevo moderno). Aunque ambas cumplen funciones similares, presentan diferencias de sintaxis, rendimiento y escalabilidad.
1.1 Objetivos principales
- Controlar el tráfico de entrada y salida.
- Prevenir ataques comunes (DDoS, escaneo de puertos, spoofing).
- Implementar zonas de confianza (DMZ, LAN, WAN).
- Auditar y registrar eventos de red.
1.2 Terminología esencial
- Chain: Cadena de reglas que se evalúan de forma secuencial (INPUT, OUTPUT, FORWARD).
- Table: Conjunto de chains con funciones específicas (filter, nat, mangle).
- Target: Acción que se toma cuando un paquete coincide (ACCEPT, DROP, REJECT).
- Stateful: Seguimiento de conexiones establecidas o relacionadas.
2. iptables: Arquitectura y configuración básica
iptables se basa en tablas configurables con chains. Su sintaxis clásica requiere ejecutar comandos por separado para cada regla.
2.1 Tablas y chains principales
Tabla | Propósito | Chains |
---|---|---|
filter | Filtrado principal | INPUT, FORWARD, OUTPUT |
nat | Traducción de direcciones | PREROUTING, POSTROUTING, OUTPUT |
mangle | Modificación de encabezados | PREROUTING, POSTROUTING, OUTPUT, INPUT, FORWARD |
2.2 Ejemplo de política por defecto
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
2.3 Permitir tráfico establecido
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
3. nftables: El futuro del filtrado en Linux
nftables unifica la gestión de filtrado, NAT y modificación de paquetes con una sintaxis más elegante y tablas de alto rendimiento. Emplea el Netlink API y un lenguaje declarativo.
3.1 Estructura básica
- family (inet, ip, ip6, arp)
- table ltnombregt
- chain ltcadenagt { type filter hook lthookgt priority ltngt policy ltActiongt }
- ruleset basado en sets y maps
3.2 Ejemplo de configuración inicial
nft add table inet firewall nft add chain inet firewall input { type filter hook input priority 0 policy drop } nft add chain inet firewall forward { type filter hook forward priority 0 policy drop } nft add chain inet firewall output { type filter hook output priority 0 policy accept } nft add rule inet firewall input ct state established,related accept
3.3 Uso de sets y maps
Los sets permiten agrupar IPs o puertos para hacer las reglas más legibles y eficientes:
nft add set inet firewall allowed_ips { type ipv4_addr flags interval } nft add element inet firewall allowed_ips { 192.168.1.0/24, 10.0.0.5 } nft add rule inet firewall input ip saddr @allowed_ips accept
4. Comparativa: iptables vs nftables
Característica | iptables | nftables |
---|---|---|
Sintaxis | Más verbosa | Declarativa y compacta |
Rendimiento | Bueno, pero con límites | Mejor escalabilidad |
Gestión de conjuntos | IP sets externos | Integrado (sets, maps) |
Compatibilidad | Universal en distros | Creciente adopción |
5. Buenas prácticas y recomendaciones
- Política por defecto: Mantener DROP en INPUT y FORWARD.
- Reglas específicas primero: Definir excepciones antes de reglas genéricas.
- Registro de eventos: Usar LOG o nf_log para auditoría.
- Backups: Guardar configuraciones con
iptables-save
ynft list ruleset
. - Automatización: Emplear scripts o Ansible para desplegar reglas.
6. Integración con VPNs
Es habitual combinar un firewall con túneles seguros. Por ejemplo, al usar OpenVPN o WireGuard, debe permitir puertos y protocolos específicos antes de establecer políticas estrictas:
# OpenVPN (UDP 1194) iptables -A INPUT -p udp --dport 1194 -j ACCEPT # WireGuard (UDP 51820) nft add rule inet firewall input udp dport 51820 accept
Para conexiones IPsec, una solución popular es strongSwan. Debe permitir puertos 500/udp, 4500/udp y protocolos ESP:
iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT iptables -A INPUT -p esp -j ACCEPT
7. Casos de uso y ejemplos avanzados
7.1 Limitación de conexiones simultáneas
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT
7.2 Protección contra escaneo de puertos
nft add rule inet firewall input tcp flags syn,ack,fin,rst/finct unclean drop
7.3 Redirección de puertos (port forwarding)
# Con iptables iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080 # Con nftables nft add rule ip nat PREROUTING tcp dport 80 dnat to 192.168.1.100:8080
8. Monitorización y auditoría
Registrar eventos es vital. En iptables, puede usar:
iptables -N LOGGING iptables -A INPUT -j LOGGING iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix IPTables-Dropped: --log-level 4 iptables -A LOGGING -j DROP
En nftables, la acción log:
nft add rule inet firewall input ct state invalid log prefix nftables-invalid: counter drop
9. Conclusiones
Tanto iptables como nftables ofrecen una base sólida para proteger sus sistemas Linux. Mientras iptables sigue siendo estándar en muchas distribuciones, nftables aporta una sintaxis más limpia y mejor rendimiento a gran escala. Le recomendamos:
- Iniciar proyectos nuevos con nftables.
- Migrar gradualmente configuraciones complejas de iptables.
- Automatizar y documentar cada regla.
- Combinar firewall con túneles VPN como OpenVPN o WireGuard para máxima seguridad.
Esta guía ha cubierto conceptos, ejemplos y buenas prácticas. La seguridad de su red depende de un diseño cuidadoso, monitorización constante y actualizaciones regulares.
Leave a Reply