Introducción
El firewall es una capa esencial de seguridad en cualquier servidor Linux. iptables es la herramienta tradicional que permite definir reglas de filtrado de paquetes a nivel de kernel. Aunque nftables ha ido ganando terreno, iptables sigue siendo ampliamente utilizado y conocer su funcionamiento es fundamental para administradores de sistemas.
¿Qué es iptables?
iptables es una interfaz de usuario para el subsistema de filtrado de paquetes Netfilter del kernel de Linux. Trabaja mediante tablas y cadenas: cada tabla contiene un conjunto de cadenas (INPUT, OUTPUT, FORWARD, etc.) donde se evalúan los paquetes según las reglas definidas.
Sintaxis básica
El formato general de una regla es:
iptables [-t tabla] cadena coincidencia -j acción
-t tabla: especifica la tabla (por defectofilter). Otras tablas útiles sonnatymangle.cadena: indica en qué cadena se inserta la regla (INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING).coincidencia: criterios como protocolo, puerto, dirección IP, estado de conexión, etc.-j acción: el salto a una acción (ACCEPT, DROP, REJECT, LOG, etc.).
Políticas predeterminadas
Antes de añadir reglas específicas, es recomendable establecer una política de base. Por ejemplo, para un servidor que solo acepta conexiones entrantes necesarias:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
Con esto, todo el tráfico entrante se descarta por defecto y solo lo permitido explícitamente pasará.
Reglas comunes de ejemplo
Permitir tráfico SSH (puerto 22)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Permitir HTTP y HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
Bloquear una dirección IP específica
iptables -A INPUT -s 203.0.113.5 -j DROP
Limitar conexiones simultáneas (anti‑flood)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 5 -j ACCEPT
Guardar y restaurar reglas
Las reglas de iptables son volátiles; se pierden al reiniciar el sistema. Para hacerlas persistentes:
- En Debian/Ubuntu:
apt-get install iptables-persistenty luegonetfilter-persistent save. - En RHEL/CentOS:
service iptables saveoiptables-save > /etc/sysconfig/iptables. - Recargar al arranque:
iptables-restore < /etc/sysconfig/iptables.
Verificación y solución de problemas
Para listar las reglas activas:
iptables -L -v -n
Si el tráfico no se comporta como esperas, revisa el orden de las reglas (las primeras coinciden y detienen la evaluación) y asegúrate de que no haya una regla DROP genérica antes de las permisivas.
Mejores prácticas
- Documenta cada regla con un comentario usando
-m comment --comment "texto". - Agrupa reglas relacionadas en cadenas personalizadas para mayor claridad.
- Revisa periódicamente el registro (
LOG) para detectar intentos de acceso no autorizados. - Combina iptables con herramientas como
fail2banpara bloquear automáticamente IPs tras múltiples fallos. - Prueba los cambios en un entorno de staging antes de aplicarlos en producción.
Conclusión
iptables sigue siendo una herramienta potente y flexible para administrar el firewall en Linux. Dominar su sintaxis, comprender el flujo de cadenas y aplicar reglas con criterio permite proteger eficazmente cualquier servidor. Aunque el futuro apunta a nftables, el conocimiento de iptables sigue siendo valioso para muchos entornos y sirve como base sólida para aprender los nuevos sistemas de filtrado.