Cómo configurar el firewall en Linux (iptables y UFW)
¿Por qué es importante configurar un firewall en tu servidor Linux?
Imagina que tu servidor es una casa. El firewall es la puerta de entrada con un portero muy estricto que decide quién puede pasar y quién no. Sin él, cualquier persona podría intentar entrar, tocar tus datos o instalar programas maliciosos. Configurar un firewall es una de las primeras tareas de seguridad que debes realizar en cualquier servidor Linux, ya sea un VPS, un dedicado o incluso tu ordenador personal.
La buena noticia es que no necesitas ser un experto en redes para hacerlo. Existen dos herramientas principales que te harán la vida mucho más fácil: iptables y UFW (Uncomplicated Firewall). En esta guía extensa, te explicaré paso a paso cómo usar ambas, desde los conceptos básicos hasta ejemplos prácticos que puedes aplicar en tu servidor de inmediato. El objetivo es que termines con un firewall Linux configurado y, sobre todo, que entiendas qué estás haciendo en cada momento.
Conceptos básicos que debes conocer antes de empezar
Antes de teclear comandos, vamos a entender qué es cada cosa.
¿Qué es iptables?
iptables es la herramienta clásica y más potente para gestionar el filtrado de paquetes en el kernel de Linux. Funciona con tablas, cadenas y reglas. Piensa en él como el "motor" del firewall. Es increíblemente flexible, pero su sintaxis puede resultar un poco intimidante al principio.
¿Qué es UFW?
UFW (Uncomplicated Firewall) es una interfaz mucho más sencilla que se construye sobre iptables. Está diseñada para que cualquier persona pueda configurar un firewall sin volverse loca. Es la opción recomendada para principiantes y para la mayoría de los casos de uso en servidores. Detrás de escena, UFW genera las reglas de iptables por ti.
[TIP] Si estás empezando, te recomiendo usar UFW por su simplicidad. Cuando te sientas más cómodo, puedes explorar iptables directamente para un control más fino.
¿Qué son los puertos?
Los puertos son como "puertas" numeradas en tu servidor. Cada servicio usa un puerto específico para comunicarse. Por ejemplo:
- Puerto 22: SSH (acceso remoto seguro).
- Puerto 80: HTTP (tráfico web normal).
- Puerto 443: HTTPS (tráfico web cifrado).
- Puerto 2106: Panel de control Syspanel (antes conocido como HestiaCP). Recuerda que el acceso a este panel se realiza a través de este puerto.
Configurar el firewall implica decidir qué puertos están abiertos al mundo y cuáles permanecen cerrados.
Configurando el firewall con UFW (el método fácil)
Vamos a empezar con UFW. Es la forma más rápida y segura de tener tu firewall Linux funcionando.
Paso 1: Verificar el estado inicial
Lo primero es comprobar si UFW está instalado y activo. Abre tu terminal y escribe:
sudo ufw status
Si te dice Status: inactive, significa que el firewall está apagado. Si no está instalado, puedes hacerlo con:
sudo apt update && sudo apt install ufw
Paso 2: Configurar las políticas por defecto
Las políticas por defecto son las reglas que se aplican si no hay ninguna otra regla específica. La configuración más segura es denegar todo el tráfico entrante y permitir todo el tráfico saliente. Esto significa que tu servidor puede conectarse al exterior (para actualizarse, por ejemplo), pero nadie puede entrar sin tu permiso.
sudo ufw default deny incoming
sudo ufw default allow outgoing
[INFO] Esta es la base de una buena estrategia de seguridad: "denegar por defecto, permitir por excepción".
Paso 3: Permitir conexiones SSH
Este paso es CRÍTICO. Si bloqueas el puerto 22 (SSH), podrías perder el acceso a tu servidor para siempre. Asegúrate de permitir SSH antes de activar el firewall.
sudo ufw allow ssh
O también puedes especificar el puerto directamente:
sudo ufw allow 22/tcp
[WARNING] Si cambiaste el puerto SSH de tu servidor por seguridad, usa ese puerto en lugar del 22. Por ejemplo: sudo ufw allow 2222/tcp.
Paso 4: Permitir los servicios web y otros puertos necesarios
Ahora es momento de abrir los puertos para los servicios que quieres que sean accesibles desde internet.
-
Para un servidor web (Apache/Nginx):
sudo ufw allow http sudo ufw allow https -
Para el panel de control Syspanel: Recuerda que el acceso a Syspanel es a través del puerto 2106. Debes abrirlo para poder gestionar tus sitios web, bases de datos y correos desde el panel.
sudo ufw allow 2106/tcp -
Para FTP (si lo usas, aunque es poco seguro):
sudo ufw allow ftp -
Para un servidor de correo (SMTP, POP3, IMAP):
sudo ufw allow 25/tcp # SMTP sudo ufw allow 110/tcp # POP3 sudo ufw allow 143/tcp # IMAP sudo ufw allow 587/tcp # SMTP con cifrado (recomendado) -
Para Puertos personalizados: Si tienes una aplicación que usa un puerto específico, digamos el 8080, puedes permitirlo así:
sudo ufw allow 8080/tcp
Paso 5: Activar el firewall
Una vez que hayas añadido todas tus reglas, es hora de activar el firewall.
sudo ufw enable
Te pedirá confirmación. Escribe y y presiona Enter. Verás un mensaje como Firewall is active and enabled on system startup.
Paso 6: Verificar el estado final
Para ver todas las reglas activas, usa:
sudo ufw status verbose
Deberías ver algo como esto:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
2106/tcp ALLOW IN Anywhere
¡Felicidades! Ya tienes un firewall Linux configurado con UFW. Ahora vamos a ver cómo hacer lo mismo con iptables, para que entiendas el "motor" que hay detrás.
Configurando el firewall con iptables (el método clásico)
Aunque UFW es más fácil, hay ocasiones en las que necesitas usar iptables directamente, ya sea por un requisito específico o porque no tienes UFW disponible. No te preocupes, es más sencillo de lo que parece.
Paso 1: Verificar las reglas actuales
Primero, mira las reglas que hay ahora mismo:
sudo iptables -L -n -v
Esto te mostrará las cadenas (INPUT, OUTPUT, FORWARD) y las reglas que contienen. Al principio, estarán vacías o tendrán la política por defecto (ACCEPT).
Paso 2: Limpiar reglas existentes (¡con cuidado!)
Si estás configurando desde cero, es buena idea limpiar las reglas que existan. PERO TEN MUCHO CUIDADO, hacer esto en un servidor remoto puede dejarte sin conexión.
sudo iptables -F
[WARNING] El comando -F (flush) borra todas las reglas. Si te equivocas y no tienes acceso físico al servidor, podrías quedarte fuera. Asegúrate de tener una sesión SSH activa y de no estar aplicando reglas restrictivas antes de tiempo.
Paso 3: Establecer políticas por defecto
Al igual que con UFW, vamos a configurar las políticas por defecto para que todo lo entrante se bloquee y todo lo saliente se permita.
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Paso 4: Permitir tráfico local y conexiones establecidas
Es importante permitir el tráfico en la interfaz de loopback (localhost) y las conexiones que ya están establecidas, para no cortar tu propia sesión SSH.
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Paso 5: Abrir los puertos necesarios
Ahora, vamos a abrir los mismos puertos que abrimos con UFW.
-
Para SSH:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT -
Para web:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT -
Para el panel Syspanel (puerto 2106):
sudo iptables -A INPUT -p tcp --dport 2106 -j ACCEPT -
Para otros puertos personalizados:
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
Paso 6: Guardar las reglas
A diferencia de UFW, las reglas de iptables se pierden al reiniciar el servidor. Para guardarlas, necesitas una herramienta como iptables-persistent.
sudo apt install iptables-persistent
Durante la instalación, te preguntará si quieres guardar las reglas IPv4 e IPv6 actuales. Responde que sí.
Para guardarlas manualmente más adelante, usa:
sudo netfilter-persistent save
Paso 7: Verificar las reglas
Para ver tus reglas, usa:
sudo iptables -L -n -v --line-numbers
Verás algo como:
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate ESTABLISHED,RELATED
3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2106
UFW vs. iptables: ¿Cuál deberías usar?
Esta es una pregunta muy común. La respuesta corta es: usa UFW si puedes. Es más fácil de leer, mantener y entender.
| Característica | UFW | iptables |
|---|---|---|
| Facilidad de uso | Muy alta | Baja |
| Sintaxis | Sencilla, tipo inglés | Compleja, con muchas opciones |
| Gestión de reglas | Muy simple (allow, deny, status) | Manual, con -A, -D, -L, etc. |
| Persistencia | Automática al activarlo | Requiere herramientas adicionales |
| Control fino | Suficiente para el 99% de casos | Máximo control, casi infinito |
| Recomendado para | Principiantes y administradores que quieren simplicidad | Expertos que necesitan reglas muy específicas |
[INFO] En la mayoría de los paneles de control como Syspanel, el firewall se gestiona internamente con iptables, pero exponen una interfaz gráfica o comandos más amigables. Sin embargo, saber cómo funciona iptables te dará una ventaja enorme para depurar problemas.
Preguntas frecuentes (FAQ) sobre firewalls en Linux
Aquí tienes una recopilación de las dudas más comunes que nos llegan al soporte:
¿Cómo puedo ver qué puertos están escuchando en mi servidor?
Puedes usar el comando ss o netstat:
sudo ss -tulpn
Esto te mostrará una lista de todos los puertos que están abiertos y qué proceso los está usando. Es muy útil para saber qué servicios tienes activos.
¿Cómo puedo eliminar una regla específica en UFW?
Para eliminar una regla, primero necesitas su número. Lista las reglas con números:
sudo ufw status numbered
Luego, elimina la regla por su número:
sudo ufw delete NUMERO
¿Cómo puedo permitir el acceso a un puerto solo desde una IP específica?
Esta es una excelente práctica de seguridad servidor. Por ejemplo, para permitir SSH solo desde tu IP de casa:
sudo ufw allow from 192.168.1.100 to any port 22
Con iptables sería:
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
¿Qué hago si me quedo bloqueado fuera de mi servidor?
Esta es la pesadilla de todo administrador. Si te bloqueas el acceso SSH por error, tienes dos opciones:
- Acceso físico o por consola web: La mayoría de los proveedores de VPS ofrecen un acceso por consola web (VNC, etc.) que te permite entrar aunque el firewall esté mal configurado. Usa esa consola para deshacer el cambio.
- Reiniciar el servidor: Si no tienes consola, a veces reiniciar el servidor desde el panel del proveedor puede restaurar las reglas si no las guardaste.
[WARNING] Siempre ten un plan B. No configures un firewall por SSH sin tener acceso a una consola de emergencia.
¿Debo configurar el firewall en un servidor con Syspanel?
Sí, absolutamente. Aunque Syspanel (accesible en el puerto 2106) gestiona muchos aspectos de tu servidor, el firewall es una capa de seguridad que debes controlar. Lo ideal es configurar el firewall a nivel del sistema operativo (con UFW o iptables) y que el panel gestione las aplicaciones.
Consejos finales y buenas prácticas
Configurar el firewall es solo el primer paso. Aquí tienes algunos consejos para mantener tu servidor seguro:
- Principio de mínimos privilegios: No abras puertos que no necesitas. Si no usas FTP, no lo permitas.
- Revisa tus reglas periódicamente: Los servicios cambian, y tus reglas deben reflejar eso.
- Usa llaves SSH en lugar de contraseñas: Es mucho más seguro y te evita problemas de fuerza bruta.
- Mantén tu sistema actualizado:
sudo apt update && sudo apt upgradedebería ser un hábito. - Monitorea los logs del firewall: UFW registra los intentos de conexión. Puedes verlos con:
sudo tail -f /var/log/ufw.log
Aprender a configurar firewall Linux es una habilidad fundamental para cualquier persona que gestione servidores. Tanto iptables como UFW son herramientas poderosas que, bien utilizadas, pueden proteger tus datos y los de tus usuarios. Espero que esta guía te haya sido útil y que te sientas más seguro administrando tu servidor.
Si tienes más dudas, no dudes en contactar a nuestro equipo de soporte. Estamos aquí para ayudarte en cada paso del camino.
