🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Guía para configurar el firewall iptables en Linux

Actualizado el 12 de octubre de 2025

¿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 -n evita 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-servidor para 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:

  1. Definir políticas restrictivas.
  2. Permitir solo lo necesario.
  3. Guardar las reglas para que persistan.
  4. 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.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel