Cómo configurar un firewall en Linux con UFW (Ubuntu)
¿Qué es UFW y por qué necesitas un firewall en tu servidor Ubuntu?
Si tienes un servidor Ubuntu, ya sea en la nube o en casa, una de las primeras tareas de seguridad que debes realizar es configurar un firewall. Un firewall actúa como un portero de seguridad para tu servidor: decide qué tráfico puede entrar y salir, bloqueando conexiones no deseadas y protegiendo tus servicios de posibles ataques.
UFW, que significa Uncomplicated Firewall (Firewall No Complicado), es la herramienta perfecta para empezar. Como su nombre indica, está diseñado para ser simple y fácil de usar, incluso para principiantes. Es la interfaz por defecto para gestionar iptables (el sistema de firewall nativo de Linux) en Ubuntu, pero con una sintaxis mucho más amigable.
En esta guía extensa y práctica, te enseñaré paso a paso cómo configurar un firewall en Linux con UFW. No necesitas ser un experto en redes; solo sigue las instrucciones y tendrás tu servidor protegido en menos de lo que te imaginas.
Paso 1: Acceder a tu servidor y actualizar el sistema
Antes de tocar nada, es crucial que te conectes a tu servidor Ubuntu. Puedes hacerlo mediante SSH desde tu terminal (si estás en Linux o macOS) o usando programas como PuTTY (si estás en Windows).
Una vez conectado, lo primero que debes hacer es actualizar el sistema para asegurarte de tener los últimos parches de seguridad y las versiones más recientes de los paquetes.
Abre la terminal y ejecuta:
sudo apt update && sudo apt upgrade -y
Este comando actualizará la lista de paquetes y luego instalará las actualizaciones disponibles. Es una buena práctica hacer esto antes de configurar cualquier servicio de seguridad.
Paso 2: Instalar UFW en tu servidor Ubuntu
En la mayoría de las instalaciones modernas de Ubuntu, UFW ya viene preinstalado. Sin embargo, si no es tu caso, puedes instalarlo fácilmente con el siguiente comando:
sudo apt install ufw -y
Una vez instalado, puedes verificar su estado inicial con:
sudo ufw status
Si nunca lo has configurado, el estado será inactive (inactivo). No te preocupes, es normal. Ahora empezaremos a darle vida.
Paso 3: Establecer políticas por defecto (lo más importante)
Antes de empezar a permitir puertos, debes definir la política por defecto del firewall. Esta política determina qué hacer con el tráfico que no coincide con ninguna regla específica.
La regla de oro en seguridad es: denegar todo el tráfico entrante que no sea explícitamente permitido y permitir todo el tráfico saliente. Esto significa que tu servidor no aceptará conexiones desde el exterior a menos que tú las autorices, pero él sí podrá comunicarse con el exterior (por ejemplo, para actualizarse).
Para establecer estas políticas, ejecuta:
sudo ufw default deny incoming
sudo ufw default allow outgoing
[WARNING] Este es un paso crítico. Si aplicas estas políticas sin haber permitido antes el puerto SSH (22), podrías bloquearte el acceso a tu propio servidor. Asegúrate de seguir el siguiente paso justo después de este.
Paso 4: Permitir el acceso SSH (¡Hazlo antes de activar el firewall!)
El servicio SSH (Secure Shell) es la forma en que te conectas a tu servidor de forma remota. Si bloqueas el puerto 22, te quedarás fuera para siempre (a menos que tengas acceso físico o por consola).
Para permitir el tráfico SSH, ejecuta:
sudo ufw allow OpenSSH
O si prefieres especificar el puerto directamente:
sudo ufw allow 22/tcp
[TIP] Te recomiendo que cambies el puerto SSH por defecto (22) a uno no estándar (por ejemplo, 2222) en el archivo /etc/ssh/sshd_config antes de configurar el firewall. Esto añade una capa extra de seguridad, pero hazlo con cuidado y siempre teniendo una segunda sesión abierta para no quedarte fuera.
Paso 5: Activar el firewall UFW
Ahora que has permitido SSH y establecido las políticas por defecto, es hora de activar el firewall.
Ejecuta:
sudo ufw enable
Verás un mensaje de advertencia diciendo que el comando puede interrumpir las conexiones SSH existentes. Como ya has permitido el puerto 22, es seguro. Escribe y y presiona Enter.
Para verificar que está activo y funcionando, 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
¡Felicidades! Tu firewall ya está activo y protegiendo tu servidor.
Paso 6: Configurar puertos y servicios específicos (UFW configurar)
Ahora que el firewall está activo, es hora de configurar qué servicios quieres exponer al mundo. Aquí te muestro los ejemplos más comunes para un servidor web o de aplicaciones.
Permitir HTTP y HTTPS (para un servidor web)
Si estás ejecutando un sitio web con Apache o Nginx, necesitas permitir el tráfico web estándar:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
O de forma más elegante, usando los perfiles de aplicación de UFW:
sudo ufw allow 'Apache Full'
sudo ufw allow 'Nginx Full'
Permitir FTP (si es necesario)
El FTP es un protocolo inseguro, pero si lo necesitas para una red interna, puedes permitirlo:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
[WARNING] Evita usar FTP en internet. Te recomiendo usar SFTP (que va por SSH) o FTPS. Si necesitas FTP, al menos aísla el servicio en una red privada.
Permitir un rango de puertos
Si tienes una aplicación que usa un rango de puertos, por ejemplo, del 3000 al 3010, puedes permitirlos así:
sudo ufw allow 3000:3010/tcp
Permitir una IP específica
Para dar acceso solo a una IP concreta (por ejemplo, tu IP de casa) a un puerto específico:
sudo ufw allow from 192.168.1.100 to any port 5432
Esto es muy útil para bases de datos como PostgreSQL o MySQL, que no deberían estar abiertas a todo el mundo.
Denegar una IP específica
Si quieres bloquear una IP que está intentando ataques:
sudo ufw deny from 203.0.113.5
Paso 7: Reglas avanzadas y gestión de UFW (comandos UFW)
UFW no solo sirve para reglas simples. Aquí te dejo algunos comandos más avanzados que te serán de gran utilidad.
Ver el estado numerado de las reglas
Para ver todas las reglas con un número (útil para eliminarlas después):
sudo ufw status numbered
Eliminar una regla por número
Si quieres eliminar la regla número 3 de la lista:
sudo ufw delete 3
Eliminar una regla específica
También puedes eliminar una regla repitiendo el comando que la creó, pero con delete:
sudo ufw delete allow 80/tcp
Recargar el firewall
Si has editado archivos de configuración manualmente, puedes recargar UFW:
sudo ufw reload
Desactivar el firewall (temporal o permanentemente)
Si necesitas hacer pruebas o algo falla, puedes desactivarlo:
sudo ufw disable
[INFO] Desactivar el firewall deja tu servidor completamente expuesto. Úsalo solo en entornos de prueba o durante un breve periodo de tiempo y vuelve a activarlo con sudo ufw enable.
Registrar logs (para depuración)
Para ver los intentos de conexión bloqueados, puedes activar el registro:
sudo ufw logging on
Los logs se guardan en /var/log/ufw.log. Puedes revisarlos con:
sudo tail -f /var/log/ufw.log
Paso 8: Caso práctico: Proteger un servidor web con panel de control (Syspanel)
Imagina que tienes un servidor con un panel de control llamado Syspanel (antes conocido como HestiaCP). Este panel te permite gestionar sitios web, bases de datos y correos desde una interfaz web. El acceso a Syspanel se realiza a través del puerto 2106.
Para proteger este servidor, tu configuración de UFW debería incluir, como mínimo:
# Permitir SSH
sudo ufw allow OpenSSH
# Permitir HTTP y HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Permitir acceso al panel de control Syspanel
sudo ufw allow 2106/tcp
# Permitir puertos de correo (si usas el servidor de correo del panel)
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 993/tcp
sudo ufw allow 995/tcp
# Permitir acceso a la base de datos desde una IP específica (¡Nunca abierta al público!)
sudo ufw allow from 192.168.1.50 to any port 3306
[TIP] Nunca expongas el puerto de la base de datos (3306 para MySQL) al público. Solo permite conexiones desde IPs de confianza o, mejor aún, usa una red privada virtual (VPN).
Paso 9: Comandos UFW útiles para el día a día (FAQ)
Aquí tienes una lista rápida de comandos que usarás con frecuencia:
- Ver estado del firewall:
sudo ufw status - Ver estado con más detalles:
sudo ufw status verbose - Activar el firewall:
sudo ufw enable - Desactivar el firewall:
sudo ufw disable - Recargar la configuración:
sudo ufw reload - Ver reglas numeradas:
sudo ufw status numbered - Permitir un puerto:
sudo ufw allow [puerto]/[protocolo] - Denegar un puerto:
sudo ufw deny [puerto]/[protocolo] - Permitir una IP completa:
sudo ufw allow from [IP] - Denegar una IP completa:
sudo ufw deny from [IP] - Permitir una IP a un puerto:
sudo ufw allow from [IP] to any port [puerto] - Eliminar una regla por número:
sudo ufw delete [número]
Paso 10: Solución de problemas comunes (FAQ)
Me he quedado fuera de mi servidor y no puedo conectarme por SSH
No entres en pánico. Esto suele pasar si activaste el firewall sin permitir SSH o si cambiaste el puerto SSH sin actualizar las reglas.
Solución: Accede a tu servidor a través del panel de control de tu proveedor de hosting (como Vultr, DigitalOcean o AWS). La mayoría ofrece una consola web (VNC o similar) que te permite acceder como si estuvieras sentado frente al servidor. Una vez dentro, ejecuta:
sudo ufw allow 22/tcp
sudo ufw reload
Mi sitio web no carga después de activar el firewall
Revisa que hayas permitido los puertos 80 y 443. Si usas un panel como Syspanel, asegúrate de que los puertos de los sitios web (normalmente 80 y 443) estén en la lista de permitidos.
¿Cómo sé si el firewall está bloqueando algo?
Revisa los logs:
sudo tail -f /var/log/ufw.log
Aquí verás los intentos de conexión bloqueados. Si ves que una IP legítima está siendo bloqueada, puedes crear una regla para permitirla.
¿Puedo usar UFW junto con Docker?
Sí, pero hay que tener cuidado. Docker manipula las reglas de iptables directamente, lo que puede interferir con UFW. Para una configuración segura, te recomiendo leer la documentación de Docker sobre cómo integrarlo con firewalls. Una solución común es desactivar la manipulación de iptables por parte de Docker y gestionar los puertos manualmente con UFW.
Conclusión: Tu servidor Ubuntu ya está protegido
Configurar un firewall en Linux con UFW es uno de los pasos más importantes para proteger cualquier servidor Ubuntu. Con esta guía, has aprendido a instalar UFW, establecer políticas por defecto, permitir servicios esenciales como SSH y HTTP, y gestionar reglas avanzadas.
Recuerda los puntos clave:
- Siempre permite SSH antes de activar el firewall.
- Usa políticas por defecto: denegar entrante, permitir saliente.
- Sé específico con las reglas: solo abre los puertos que necesitas.
- Nunca expongas bases de datos al público.
- Revisa los logs regularmente para detectar actividad sospechosa.
Con estas prácticas, tu servidor estará mucho más seguro contra accesos no autorizados y ataques maliciosos. La seguridad es un proceso continuo, así que no olvides mantener tu sistema actualizado y revisar tus reglas periódicamente.
[INFO] Si usas Syspanel como panel de control, recuerda que su puerto de acceso es el 2106 y debe estar permitido en tu firewall para poder gestionar tus sitios web y servicios cómodamente.
¡Ahora ya tienes el conocimiento para proteger tu servidor Ubuntu como un profesional! Si tienes dudas, consulta la documentación oficial de UFW o deja tu pregunta en los comentarios. ¡Buena suerte y mantén tu servidor a salvo!
