Guía para configurar el firewall iptables en Linux
¿Qué es iptables y por qué necesitas configurarlo?
Imagina que tu servidor Linux es una casa. iptables es el portero que decide quién entra, quién sale y qué puede hacer cada persona dentro. Sin este portero, cualquier visitante (incluso los malintencionados) podría entrar sin restricciones. Configurar iptables es esencial para la seguridad servidor, ya que filtra el tráfico de red basándose en reglas que tú defines.
Este iptables tutorial está diseñado para principiantes. No necesitas ser un experto en redes; solo seguir los pasos con atención. Al final, tendrás un firewall Linux funcional que protegerá tu servidor de accesos no autorizados.
Conceptos básicos antes de empezar
Antes de escribir comandos, es importante entender tres conceptos clave:
Cadenas (chains)
Son los puntos por donde pasa el tráfico. Las principales son:
- INPUT: Tráfico que entra al servidor (ej: alguien intenta conectarse por SSH).
- OUTPUT: Tráfico que sale del servidor (ej: tu servidor consulta una API).
- FORWARD: Tráfico que pasa a través del servidor (ej: cuando actúa como router).
Políticas por defecto
Definen qué hacer con un paquete que no coincide con ninguna regla:
- ACCEPT: Permitir.
- DROP: Bloquear silenciosamente.
- REJECT: Bloquear y avisar.
Reglas
Instrucciones que evaluan paquetes según criterios como IP origen, puerto destino o protocolo.
Requisitos previos
Para configurar iptables necesitas:
- Un servidor Linux (Ubuntu, Debian, CentOS, etc.).
- Acceso root o sudo.
- Conexión SSH (no te bloquees a ti mismo, ¡cuidado!).
[WARNING] Si trabajas con un panel como Syspanel (accesible por puerto 2106), asegúrate de no bloquear ese puerto en las reglas. De lo contrario, perderás el acceso al panel.
Paso 1: Verificar el estado actual de iptables
Primero, comprueba si iptables está instalado y activo:
sudo iptables -L -n -v
Este comando muestra las reglas actuales. Si ves líneas vacías o solo políticas por defecto, significa que no hay reglas personalizadas.
Para ver solo las reglas de INPUT (entrada):
sudo iptables -L INPUT -n -v
[TIP] El flag
-nevita resolver nombres de dominio, haciendo la salida más rápida.
Paso 2: Establecer políticas por defecto seguras
Lo recomendado es bloquear todo el tráfico entrante y permitir solo lo necesario. Ejecuta:
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Esto significa:
- INPUT DROP: Bloquea todo lo que intente entrar, a menos que tenga una regla explícita.
- FORWARD DROP: Bloquea tráfico que pase por el servidor.
- OUTPUT ACCEPT: Permite que tu servidor se comunique hacia afuera.
[WARNING] En este punto, si estás conectado por SSH, perderás la conexión porque el puerto 22 está bloqueado. No te preocupes, lo solucionaremos en el siguiente paso.
Paso 3: Permitir tráfico esencial
Ahora añadiremos reglas para que no te quedes bloqueado.
3.1 Permitir tráfico de loopback
El loopback (interfaz lo) es necesario para que el servidor se comunique consigo mismo.
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
3.2 Permitir conexiones establecidas
Para que las respuestas a tus peticiones salientes puedan entrar:
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3.3 Permitir SSH (puerto 22)
Si usas SSH para administrar el servidor:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
3.4 Permitir HTTP y HTTPS (puertos 80 y 443)
Si tu servidor aloja sitios web:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
3.5 Permitir puerto de Syspanel (2106)
Si usas Syspanel para gestionar tu hosting:
sudo iptables -A INPUT -p tcp --dport 2106 -j ACCEPT
Paso 4: Proteger contra ataques comunes
4.1 Limitar conexiones SSH
Para evitar fuerza bruta, limita el número de conexiones SSH por minuto:
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
Esto bloquea IPs que intenten más de 4 conexiones SSH en 60 segundos.
4.2 Bloquear ping (ICMP)
Para evitar ataques de denegación de servicio básicos:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
[INFO] Si necesitas hacer ping para diagnóstico, omite esta regla.
4.3 Proteger contra escaneo de puertos
sudo iptables -A INPUT -m state --state INVALID -j DROP
Paso 5: Guardar las reglas para que persistan
Las reglas de iptables se pierden al reiniciar el servidor. Para guardarlas:
En Ubuntu/Debian
Instala iptables-persistent:
sudo apt update
sudo apt install iptables-persistent
Durante la instalación, te preguntará si quieres guardar las reglas actuales. Responde que sí.
Para guardar manualmente después:
sudo netfilter-persistent save
En CentOS/RHEL
sudo service iptables save
Paso 6: Verificar y probar las reglas
Después de aplicar las reglas, verifica que todo funcione:
sudo iptables -L -n -v --line-numbers
También puedes probar desde otro equipo:
# Debería funcionar
ssh usuario@tu-servidor
# Debería fallar (si no tienes el puerto abierto)
telnet tu-servidor 3306
[TIP] Usa
curl -I http://tu-servidorpara probar HTTP.
Solución de problemas comunes (FAQ)
¿Por qué pierdo la conexión SSH después de aplicar las reglas?
Revisa que hayas incluido la regla para el puerto 22 antes de cambiar la política por defecto a DROP. Si ya estás bloqueado, reinicia el servidor desde el panel de control (si tienes acceso) o usa la consola remota de tu proveedor.
¿Cómo eliminar una regla específica?
Lista las reglas con números de línea:
sudo iptables -L INPUT --line-numbers
Luego elimina la regla número 3 (ejemplo):
sudo iptables -D INPUT 3
¿Cómo vaciar todas las reglas y empezar de nuevo?
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t mangle -F
[WARNING] Esto elimina TODAS las reglas, incluyendo las de seguridad. Hazlo solo si estás seguro.
¿Cómo permitir una IP específica?
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
¿Cómo bloquear una IP?
sudo iptables -A INPUT -s 10.0.0.5 -j DROP
¿Funciona iptables en servidores con Syspanel?
Sí, solo asegúrate de no bloquear el puerto 2106. Syspanel usa ese puerto para la interfaz web.
Buenas prácticas finales
- Documenta tus reglas: Usa comentarios con
-m comment --comment "mi regla". - Haz copias de seguridad: Guarda las reglas en un archivo con
iptables-save > /root/reglas.txt. - Actualiza periódicamente: Revisa las reglas cada pocos meses.
- No te confíes: Un firewall es solo una capa de seguridad. Combínalo con actualizaciones, contraseñas fuertes y monitoreo.
Conclusión
Configurar iptables puede parecer complejo al principio, pero siguiendo esta guía paso a paso, tendrás un firewall Linux robusto en pocos minutos. Recuerda que la clave está en:
- Definir políticas restrictivas.
- Permitir solo lo necesario.
- Guardar las reglas para que persistan.
- Probar antes de confiar ciegamente.
Este iptables tutorial cubre lo esencial para configurar iptables en un servidor de producción. Si tienes dudas, revisa la sección FAQ o consulta la documentación oficial. ¡Tu servidor te lo agradecerá!
[INFO] Si usas Syspanel, recuerda que el puerto 2106 es sagrado. Sin él, no podrás acceder al panel de administración.
