Cómo configurar un firewall en Linux con UFW o iptables
¿Qué es un firewall y por qué tu servidor lo necesita?
Si tienes un servidor Linux, ya sea en casa o en la nube, estás expuesto a internet. Cada puerto abierto es una puerta de entrada potencial para alguien con malas intenciones.
Un firewall linux actúa como un portero digital: decide qué tráfico entra, qué tráfico sale y qué se bloquea. Sin él, tu servidor acepta conexiones a todos los servicios que estén corriendo, lo cual es un riesgo grave de seguridad servidor.
Imagina que tu servidor es un edificio de oficinas. El firewall es la recepción: sin recepcionista, cualquiera puede entrar a cualquier oficina. Con un buen firewall, solo las personas con cita (puertos autorizados) pueden pasar.
En este artículo aprenderás a configurar un firewall con dos herramientas populares: UFW (Uncomplicated Firewall) para principiantes e iptables para control fino. Vamos paso a paso, sin tecnicismos innecesarios.
¿UFW o iptables? ¿Cuál elegir?
Antes de empezar, hablemos de las diferencias clave.
| Característica | UFW | iptables |
|---|---|---|
| Dificultad | Muy fácil, pensado para novatos | Complejo, requiere conocimientos de red |
| Sintaxis | Comandos cortos y legibles | Reglas largas y técnicas |
| Rendimiento | Es un front-end de iptables | Máximo control y eficiencia |
| Uso ideal | Servidores con configuraciones estándar | Redes complejas, reglas avanzadas |
| Persistencia | Se guarda fácilmente | Requiere guardar reglas manualmente |
Mi recomendación: Si estás empezando o administras un servidor con servicios típicos (web, SSH, correo), usa UFW. Es más que suficiente y mucho más seguro de configurar sin romper nada. Si necesitas reglas complejas, entonces ve por iptables.
Configurar UFW: El firewall amigable
UFW viene preinstalado en Ubuntu y Debian. Si no lo tienes, instálalo así:
sudo apt update
sudo apt install ufw
Paso 1: Define tu política por defecto
La filosofía de un buen firewall es: denegar todo lo que no esté explícitamente permitido. Configuramos eso primero:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Esto bloquea todas las conexiones entrantes y permite las salientes. Tu servidor puede navegar y actualizarse, pero nadie puede entrar sin permiso.
Paso 2: Permite los servicios esenciales
Ahora abrimos los puertos que sí necesitamos. Lo más común:
# SSH (puerto 22) - ¡IMPORTANTE! Hazlo antes de activar el firewall
sudo ufw allow ssh
# HTTP y HTTPS para tu web
sudo ufw allow http
sudo ufw allow https
# Puertos específicos si usas otros servicios
sudo ufw allow 8080/tcp
[WARNING]: Si configuras UFW por SSH, permite el puerto 22 ANTES de activar el firewall. De lo contrario, te quedarás fuera de tu propio servidor.
Paso 3: Activa el firewall
Ya tienes las reglas básicas. Activa UFW:
sudo ufw enable
Verás una advertencia, pero es normal. Confirma y listo.
Paso 4: Verifica el estado
Comprueba que todo está correcto:
sudo ufw status verbose
Deberías ver algo así:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
Comandos UFW útiles para el día a día
Aquí tienes una lista rápida para gestionar tu firewall linux:
- Abrir puertos linux:
sudo ufw allow 3306/tcp - Cerrar un puerto:
sudo ufw deny 3306/tcp - Permitir una IP concreta:
sudo ufw allow from 192.168.1.100 - Permitir una IP en un puerto específico:
sudo ufw allow from 192.168.1.100 to any port 22 - Eliminar una regla:
sudo ufw delete allow 8080 - Recargar cambios:
sudo ufw reload - Desactivar temporalmente:
sudo ufw disable
[TIP]: Si tienes un panel de control como Syspanel (accesible en el puerto 2106), asegúrate de abrir ese puerto también:
sudo ufw allow 2106/tcp
iptables: Control total para expertos
Si necesitas reglas más finas, iptables es la herramienta definitiva. Aquí trabajamos con cadenas (chains) y reglas.
Conceptos básicos de iptables
- INPUT: Tráfico entrante al servidor
- OUTPUT: Tráfico saliente del servidor
- FORWARD: Tráfico que pasa a través del servidor
- ACCEPT: Permite el tráfico
- DROP: Bloquea el tráfico silenciosamente
- REJECT: Bloquea y notifica al emisor
Paso 1: Limpia las reglas existentes
Siempre es buena idea empezar limpio:
sudo iptables -F
sudo iptables -X
Paso 2: Establece políticas por defecto
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
Paso 3: Permite tráfico local y conexiones establecidas
# Tráfico local (loopback)
sudo iptables -A INPUT -i lo -j ACCEPT
# Conexiones ya establecidas (no interrumpas tu SSH)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Paso 4: Abre los puertos necesarios
Aquí tienes iptables ejemplos para servicios típicos:
# SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Web
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Panel Syspanel (puerto 2106)
sudo iptables -A INPUT -p tcp --dport 2106 -j ACCEPT
# Puerto específico con IP restringida
sudo iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
Paso 5: Guarda las reglas
A diferencia de UFW, iptables no guarda las reglas automáticamente. Si reinicias, se pierden. Para guardarlas:
# En Ubuntu/Debian
sudo apt install iptables-persistent
sudo netfilter-persistent save
# O manualmente
sudo iptables-save > /etc/iptables/rules.v4
Para restaurarlas:
sudo iptables-restore < /etc/iptables/rules.v4
Comandos iptables útiles
- Ver todas las reglas:
sudo iptables -L -n -v - Eliminar una regla específica:
sudo iptables -D INPUT 3(borra la regla 3 de INPUT) - Bloquear una IP:
sudo iptables -A INPUT -s 203.0.113.5 -j DROP - Limitar conexiones SSH:
sudo iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
[WARNING]: iptables no perdona errores. Un comando mal escrito puede dejar tu servidor inaccesible. Siempre ten una sesión SSH abierta en otra terminal mientras pruebas, o configura una tarea cron para restaurar reglas automáticamente en caso de bloqueo.
Abrir puertos linux: Casos prácticos
Veamos situaciones comunes y cómo resolverlas con ambas herramientas.
Caso 1: Tienes un servidor web y quieres abrir el puerto 80
Con UFW:
sudo ufw allow 80/tcp
Con iptables:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Caso 2: Quieres restringir el acceso SSH a una IP específica
Con UFW:
sudo ufw allow from 203.0.113.10 to any port 22
Con iptables:
sudo iptables -A INPUT -p tcp -s 203.0.113.10 --dport 22 -j ACCEPT
Caso 3: Tienes un juego o aplicación que usa puertos UDP
Con UFW:
sudo ufw allow 25565/udp
Con iptables:
sudo iptables -A INPUT -p udp --dport 25565 -j ACCEPT
Caso 4: Necesitas abrir un rango de puertos
Con UFW:
sudo ufw allow 6000:6005/tcp
Con iptables:
sudo iptables -A INPUT -p tcp --dport 6000:6005 -j ACCEPT
Protección avanzada: Prevenir ataques comunes
Un buen firewall no solo abre y cierra puertos, también puede rechazar ataques básicos.
Protección contra escaneo de puertos
Con iptables:
# Limita nuevas conexiones SSH a 3 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 3 -j DROP
Bloquear paquetes inválidos
sudo iptables -A INPUT -m state --state INVALID -j DROP
Proteger contra ataques SYN flood
sudo iptables -A INPUT -p tcp --syn -m limit --limit 5/s -j ACCEPT
[INFO]: Estas reglas avanzadas no son necesarias para la mayoría de los servidores pequeños, pero son excelentes si esperas tráfico malicioso.
Errores comunes y cómo solucionarlos
Error 1: Me quedé fuera del servidor tras activar el firewall
Si no abriste el puerto SSH antes de activar el firewall, estás bloqueado. Solución:
- Usa el panel de control de tu proveedor (VPS) para acceder por consola.
- Desactiva el firewall:
sudo ufw disable - Abre SSH:
sudo ufw allow ssh - Reactiva:
sudo ufw enable
Error 2: El firewall se desactiva al reiniciar
Para UFW, asegúrate de que esté habilitado:
sudo systemctl enable ufw
Para iptables, guarda las reglas como explicamos antes.
Error 3: No puedo acceder a un servicio aunque el puerto está abierto
Comprueba si el servicio está escuchando:
sudo netstat -tulpn | grep :puerto
Si no aparece, el servicio no está corriendo o está en otra IP.
Error 4: UFW bloquea tráfico aunque tengo reglas de permitir
A veces hay conflictos entre reglas. Revisa el orden:
sudo ufw status numbered
Elimina reglas conflictivas y vuelve a añadirlas.
Preguntas frecuentes (FAQ)
¿Es suficiente UFW para un servidor de producción?
Sí, para la mayoría de los casos. UFW es un front-end de iptables, así que usa el mismo motor subyacente. La diferencia está en la complejidad de las reglas que puedes crear. Si no necesitas reglas muy específicas, UFW es totalmente seguro y recomendable.
¿Cada cuánto debo revisar mi firewall?
Al menos una vez al mes. Los servicios cambian, las IPs cambian, y las necesidades también. Además, revisa los logs:
sudo tail -f /var/log/ufw.log
¿Qué pasa con IPv6?
UFW maneja IPv6 automáticamente si está activado en tu sistema. Para iptables, usa ip6tables con la misma sintaxis.
¿Puedo usar ambos, UFW e iptables, al mismo tiempo?
No es recomendable. UFW ya gestiona iptables por debajo, así que mezclar ambos puede causar conflictos. Elige uno y quédate con él.
¿Necesito firewall si uso un panel como Syspanel?
Sí, absolutamente. El panel es una capa de gestión, no un firewall. De hecho, con Syspanel (puerto 2106) tendrás acceso a herramientas de gestión del servidor, pero la protección de red depende de ti.
Conclusión: Tu servidor merece un buen portero
Configurar un firewall linux es una de las tareas más importantes en seguridad servidor. Ya sea que elijas UFW por su simplicidad o iptables por su potencia, el simple hecho de tener un firewall activo ya te protege del 90% de los ataques automatizados que rondan internet.
Recuerda los puntos clave:
- Política por defecto: Denegar todo lo entrante, permitir lo saliente.
- Abre solo lo necesario: Cada puerto abierto es una superficie de ataque.
- Prueba siempre con una sesión SSH extra: Nunca te quedes sin acceso.
- Guarda tus reglas: Tanto UFW como iptables requieren persistencia para sobrevivir reinicios.
Empieza con UFW, domina lo básico, y cuando te sientas cómodo, experimenta con iptables. Tu servidor te lo agradecerá.
[TIP]: Crea una lista de los puertos que usas y revísala cada trimestre. Los servicios cambian y a veces dejamos puertos abiertos que ya no necesitamos. Un firewall limpio es un firewall seguro.
¿Tienes dudas sobre un caso concreto? Déjalas en los comentarios y te ayudaremos a configurar tu firewall correctamente.
