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

¿Cómo configurar un firewall en Linux con iptables? Guía básica

Actualizado el 4 de junio de 2026

¿Qué es iptables y por qué deberías usarlo?

Imagina que tu servidor Linux es una casa. Las aplicaciones y servicios que tienes instalados son las habitaciones, y cada una tiene una puerta (un puerto) por donde entran y salen datos. Un firewall es como un portero que decide quién puede entrar y quién no. iptables es ese portero: una herramienta de línea de comandos que te permite definir reglas para controlar el tráfico de red.

Para un SysAdmin, configurar iptables es una tarea fundamental para garantizar la seguridad del servidor. Sin un firewall bien configurado, tu máquina está expuesta a ataques, escaneos de puertos y accesos no autorizados. Esta guía básica te enseñará desde cero cómo configurarlo, paso a paso, con ejemplos prácticos que puedes aplicar ya mismo.

[INFO] iptables es el firewall tradicional en la mayoría de distribuciones Linux. Aunque sistemas como nftables están ganando terreno, iptables sigue siendo el estándar y el más documentado para aprender.

Requisitos previos

Antes de empezar, asegúrate de tener lo siguiente:

  1. Acceso root o sudo: Necesitarás permisos de superusuario para ejecutar los comandos.
  2. Conexión SSH: Lo más probable es que administres tu servidor de forma remota. Ten mucho cuidado: si te equivocas al aplicar reglas, podrías cerrarte el acceso.
  3. Distribución Linux: Esta guía funciona en Ubuntu, Debian, CentOS, Rocky Linux y la mayoría de sistemas basados en Linux.

[WARNING] Si estás administrando un servidor remoto, nunca cierres la sesión SSH mientras pruebas reglas. Siempre ten una segunda terminal de respaldo o programa un cron para desactivar el firewall en caso de error.

Conceptos básicos de iptables

Antes de escribir reglas, es importante entender cómo piensa iptables. Funciona con tablas (tables), cadenas (chains) y reglas (rules).

Tablas principales

  • filter: La tabla por defecto. Aquí decides qué tráfico permitir (ACCEPT) o bloquear (DROP/REJECT). Es la que usaremos casi siempre.
  • nat: Se usa para modificar direcciones IP (por ejemplo, para hacer forwarding o enmascarar IPs).
  • mangle: Para modificar paquetes de forma más avanzada (por ejemplo, cambiar el TTL).

Cadenas (chains) en la tabla filter

Cada tabla tiene cadenas predefinidas. En filter, las principales son:

  • INPUT: Controla el tráfico entrante a tu servidor. Por ejemplo, cuando alguien visita tu web.
  • OUTPUT: Controla el tráfico saliente desde tu servidor. Por ejemplo, cuando tu servidor actualiza paquetes.
  • FORWARD: Controla el tráfico que pasa a través de tu servidor (por ejemplo, si actúa como router).

Políticas por defecto

Una política es la acción que se toma cuando un paquete no coincide con ninguna regla. Por defecto, suele ser ACCEPT (permitir todo). Para un servidor seguro, lo recomendable es cambiar la política a DROP (bloquear todo) y luego abrir solo lo necesario.

Comandos esenciales de iptables

Aquí tienes los comandos que usarás el 90% del tiempo. Practícalos en un entorno de pruebas si es posible.

Ver reglas actuales

# Muestra todas las reglas en la tabla filter
iptables -L -n -v
  • -L: Lista las reglas.
  • -n: No resuelve nombres de dominio (más rápido).
  • -v: Muestra información detallada (paquetes contados).

Ver reglas con números de línea

Para insertar o borrar reglas fácilmente, necesitas saber su número.

iptables -L --line-numbers

Añadir una regla al final de una cadena

# Permite tráfico entrante al puerto 22 (SSH)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • -A: Append (añadir al final).
  • -p: Protocolo (tcp, udp, icmp).
  • --dport: Puerto destino.
  • -j: Acción (ACCEPT, DROP, REJECT, LOG).

Insertar una regla al principio de una cadena

# Inserta una regla para bloquear todo el tráfico ICMP (ping) al inicio
iptables -I INPUT -p icmp -j DROP
  • -I: Insert (insertar en una posición, por defecto la 1).

Borrar una regla

# Borra la regla número 3 de la cadena INPUT
iptables -D INPUT 3

Cambiar la política por defecto

# Bloquear todo el tráfico entrante por defecto
iptables -P INPUT DROP

# Bloquear todo el tráfico de forwarding (si no actúas como router)
iptables -P FORWARD DROP

# Permitir todo el tráfico saliente por defecto
iptables -P OUTPUT ACCEPT

[TIP] Siempre deja la política OUTPUT como ACCEPT a menos que tengas una razón muy específica para restringir el tráfico saliente. Bloquear la salida puede romper actualizaciones, DNS y servicios esenciales.

Guía paso a paso: Configurar un firewall básico

Vamos a construir un firewall desde cero. El objetivo es: bloquear todo el tráfico entrante excepto SSH y HTTP/HTTPS.

Paso 1: Limpiar reglas existentes (opcional pero recomendado)

Si estás empezando desde cero, es mejor limpiar todo.

# Vaciar todas las reglas
iptables -F

# Eliminar cadenas personalizadas (si las hay)
iptables -X

# Poner contadores a cero
iptables -Z

Paso 2: Establecer políticas por defecto seguras

# Bloquear todo lo que no esté explícitamente permitido
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Paso 3: Permitir tráfico de loopback (localhost)

El tráfico interno de tu servidor (por ejemplo, entre servicios) debe estar permitido.

# Permitir todo el tráfico entrante desde la interfaz loopback
iptables -A INPUT -i lo -j ACCEPT

# Permitir todo el tráfico saliente hacia loopback (opcional, pero buena práctica)
iptables -A OUTPUT -o lo -j ACCEPT

Paso 4: Permitir conexiones establecidas y relacionadas

Esta es una de las reglas más importantes. Permite que el tráfico de respuesta a tus conexiones salientes (por ejemplo, actualizaciones de paquetes) pueda volver a entrar.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Paso 5: Abrir puertos específicos

Ahora abrimos solo los servicios que necesitamos.

# SSH (puerto 22) - ¡IMPORTANTE! Si estás en remoto, no olvides esto.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP (puerto 80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# HTTPS (puerto 443)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Paso 6: (Opcional) Limitar el acceso SSH por IP

Para mayor seguridad, puedes restringir SSH solo a tu IP de trabajo.

# Reemplaza 192.168.1.100 con tu IP real
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT

Paso 7: Bloquear ping (ICMP) - opcional

Si no quieres que tu servidor responda a pings (lo que lo hace menos visible para escaneos básicos):

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

Paso 8: Guardar las reglas

Las reglas de iptables son volátiles: se pierden al reiniciar el servidor. Para hacerlas persistentes, necesitas guardarlas.

En Debian/Ubuntu:

# Instalar el paquete (si no lo tienes)
apt-get install iptables-persistent

# Guardar reglas IPv4
netfilter-persistent save

En CentOS/RHEL 7+:

# Instalar
yum install iptables-services

# Guardar
service iptables save

# Habilitar para que arranque con el sistema
systemctl enable iptables

Ejemplo completo de script

Para que no tengas que escribir comando por comando, aquí tienes un script listo para copiar y pegar. Ajusta los puertos según tus necesidades.

#!/bin/bash

# Limpiar reglas existentes
iptables -F
iptables -X
iptables -Z

# Políticas por defecto
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Loopback
iptables -A INPUT -i lo -j ACCEPT

# Conexiones establecidas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Servicios esenciales
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT   # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT  # HTTPS

# (Opcional) Si usas Syspanel (HestiaCP), el panel de control usa el puerto 2106
iptables -A INPUT -p tcp --dport 2106 -j ACCEPT

# Bloquear ping
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# Guardar reglas (ajusta según tu distribución)
# netfilter-persistent save   # Debian/Ubuntu
# service iptables save       # CentOS/RHEL

[TIP] Guarda este script como /root/firewall.sh, dale permisos de ejecución (chmod +x /root/firewall.sh) y ejecútalo cada vez que quieras restablecer tu firewall.

Preguntas frecuentes (FAQ)

¿Cómo verifico si mi firewall está funcionando?

Usa iptables -L -n -v para ver las reglas activas y los contadores de paquetes. Si ves paquetes en las reglas, significa que están siendo procesados.

¿Cómo desactivo iptables temporalmente?

# Vaciar todas las reglas y poner políticas a ACCEPT
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

¿Qué hago si me bloqueo fuera de mi servidor?

Si estás en un datacenter, muchos proveedores ofrecen un panel web (KVM o IPMI) para acceder a la consola del servidor. Desde ahí puedes ejecutar los comandos para desactivar el firewall. Si no, tendrás que pedir a soporte que reinicie el servidor en modo recovery.

¿iptables protege contra ataques DDoS?

No directamente. iptables puede mitigar ataques básicos (como limitar conexiones por IP), pero para DDoS necesitas soluciones especializadas como Cloudflare o un WAF.

¿Puedo usar iptables junto con Syspanel?

Sí, absolutamente. Syspanel (anteriormente HestiaCP) no instala su propio firewall por defecto, pero puedes configurar iptables manualmente. Solo asegúrate de abrir los puertos que Syspanel necesita: 2106 (panel), 80, 443, 21 (FTP), 25 (SMTP), etc.

Conclusión

Configurar iptables es una habilidad esencial para cualquier SysAdmin que quiera garantizar la seguridad del servidor. Aunque al principio pueda parecer complejo, una vez que entiendes los conceptos de cadenas, políticas y reglas, se vuelve una herramienta increíblemente potente y flexible.

Recuerda: menos es más. Solo abre los puertos que necesites y mantén una política restrictiva por defecto. Con esta guía básica ya puedes proteger tu servidor Linux de amenazas básicas. A medida que ganes experiencia, podrás explorar opciones avanzadas como limitar conexiones por IP, registrar tráfico sospechoso o crear reglas para servicios específicos.

[INFO] Si tienes dudas, siempre puedes consultar las páginas de manual (man iptables) o buscar en foros especializados. La comunidad Linux es muy activa y siempre hay alguien dispuesto a ayudar.

¿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