Cómo configurar un firewall básico con UFW en Ubuntu y Debian
¿Qué es UFW y por qué deberías usarlo?
Imagina que tu servidor Linux es una casa. Sin un firewall, es como dejar la puerta principal abierta de par en par: cualquiera podría entrar sin invitación. UFW (Uncomplicated Firewall) es esa puerta con cerrojo que tú controlas. A pesar de su nombre en inglés ("firewall sin complicaciones"), es una herramienta poderosa que te permite proteger servidor linux de accesos no deseados.
UFW es un frontend para iptables, el sistema de filtrado de paquetes estándar en Linux. Su gran ventaja es que simplifica enormemente la creación de reglas. No necesitas ser un gurú de la terminal para configurar ufw correctamente. Con unos pocos comandos, puedes permitir o bloquear tráfico según el puerto, la IP o el protocolo.
Tanto en Ubuntu como en Debian, UFW viene incluido por defecto (aunque puede que no esté activo). Esto lo convierte en la primera línea de defensa ideal para cualquier administrador, incluso si estás empezando.
En esta guía, te mostraré paso a paso cómo configurarlo, desde la instalación hasta las reglas más avanzadas. Al final, tendrás un servidor mucho más seguro y entenderás los fundamentos de las reglas firewall linux.
Paso 1: Instalar y activar UFW (si no está disponible)
En la mayoría de las instalaciones de Ubuntu, UFW ya está instalado. En Debian, a veces hay que instalarlo manualmente. Para asegurarte, abre tu terminal y ejecuta:
sudo apt update
sudo apt install ufw
Este comando actualizará la lista de paquetes e instalará UFW si no lo tienes. Si ya estaba, no pasa nada, simplemente se asegurará de que esté en su última versión.
Verificar el estado actual
Antes de activarlo, es fundamental saber si ya está corriendo. Ejecuta:
sudo ufw status
Si el resultado es Status: inactive, significa que está instalado pero apagado. No te preocupes, lo activaremos en un momento. Si ves Status: active, ya tienes un firewall corriendo, probablemente con reglas por defecto.
[WARNING] No actives UFW todavía si estás conectado a tu servidor por SSH. Si no configuras primero la regla para el puerto 22 (o el que uses), podrías quedarte fuera de tu propio servidor. Sigue leyendo, lo haremos en el siguiente paso.
Paso 2: Configurar las políticas por defecto
UFW funciona con políticas por defecto: lo que no esté explícitamente permitido, se bloquea. Esta es la filosofía más segura. Vamos a establecer que el tráfico entrante esté denegado y el saliente permitido.
sudo ufw default deny incoming
sudo ufw default allow outgoing
¿Qué significa esto en la práctica?
- Deny incoming: Todo intento de conexión desde el exterior hacia tu servidor será bloqueado, a menos que crees una regla específica para permitirlo.
- Allow outgoing: Tu servidor puede conectarse al exterior sin restricciones (por ejemplo, para actualizaciones, DNS, etc.).
Esta configuración es el punto de partida perfecto para proteger servidor linux de escaneos de puertos y accesos no autorizados.
Paso 3: Reglas básicas para configurar UFW
Ahora viene la parte interesante: crear las reglas. Aquí es donde decides qué puertos están abiertos al mundo y cuáles permanecen cerrados. Vamos a ver los casos más comunes.
Permitir SSH (¡hazlo primero!)
Si accedes a tu servidor de forma remota, necesitas mantener abierto el puerto SSH. Por defecto es el 22, pero si lo cambiaste por seguridad, usa ese número.
sudo ufw allow ssh
O si usas un puerto personalizado, por ejemplo el 2222:
sudo ufw allow 2222/tcp
[TIP] Especificar el protocolo (
/tcpo/udp) es una buena práctica. SSH usa TCP, así que conallow sshoallow 22/tcpes suficiente.
Permitir HTTP y HTTPS
Si vas a alojar una web, necesitas abrir los puertos 80 (HTTP) y 443 (HTTPS).
sudo ufw allow http
sudo ufw allow https
O de forma numérica:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Permitir otros servicios comunes
- FTP (puerto 21):
sudo ufw allow ftp - MySQL/MariaDB (puerto 3306):
sudo ufw allow 3306/tcp(¡cuidado! solo hazlo si es estrictamente necesario y desde IPs específicas) - DNS (puerto 53):
sudo ufw allow 53 - Correo SMTP (puerto 25):
sudo ufw allow smtp
Permitir rangos de puertos
Algunas aplicaciones usan rangos. Por ejemplo, para servicios como Minecraft (25565) o algunos juegos. La sintaxis es:
sudo ufw allow 6000:6007/tcp
Esto abriría los puertos del 6000 al 6007 para TCP.
Denegar o eliminar reglas
Si cometiste un error o ya no necesitas una regla, puedes eliminarla. Primero, lista las reglas numeradas:
sudo ufw status numbered
Verás una salida como esta:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
Para eliminar la regla número 3, ejecuta:
sudo ufw delete 3
También puedes borrar por especificación exacta:
sudo ufw delete allow 80/tcp
Paso 4: Reglas avanzadas (IPs específicas y subredes)
A veces no quieres abrir un puerto a todo el mundo, sino solo a una IP concreta. Esto es muy útil para bases de datos o paneles de administración.
Permitir una IP específica
Para que solo una IP (por ejemplo, tu IP de casa) pueda acceder al puerto 3306:
sudo ufw allow from 192.168.1.100 to any port 3306
Permitir una subred completa
Para permitir toda una subred (por ejemplo, 192.168.1.0/24):
sudo ufw allow from 192.168.1.0/24 to any port 22
Esto permitiría SSH a todos los equipos de esa red local.
Denegar una IP específica
Para bloquear completamente una IP problemática:
sudo ufw deny from 203.0.113.5
[INFO] Las reglas se aplican en orden. UFW evalúa primero las reglas más específicas antes que las generales. Si tienes una regla que permite todo el tráfico desde una subred, una regla de denegación para una IP dentro de esa subred funcionará correctamente.
Paso 5: Activar y verificar el firewall
Una vez que hayas configurado todas tus reglas, es hora de poner el candado.
Activar UFW
sudo ufw enable
Verás un mensaje de advertencia, pero confirma con y y pulsa Enter. El firewall se activará inmediatamente.
Verificar el estado detallado
Para ver las reglas y el estado, usa:
sudo ufw status verbose
Esto te mostrará algo como:
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
Comprobar que todo funciona
Desde tu máquina local, intenta conectarte por SSH. Si puedes, ¡perfecto! También puedes usar herramientas como nmap desde otro equipo para ver qué puertos están abiertos.
nmap -p 22,80,443 tu_ip_servidor
Si todo está bien, solo verás abiertos los puertos que permitiste.
Paso 6: Reglas para aplicaciones y perfiles
UFW puede trabajar con perfiles de aplicación. Esto es muy cómodo porque no necesitas recordar números de puerto. Los perfiles están en /etc/ufw/applications.d/.
Listar perfiles disponibles
sudo ufw app list
Verás aplicaciones como OpenSSH, Apache Full, Nginx Full, etc.
Usar un perfil
Para permitir el perfil de Apache completo (HTTP y HTTPS):
sudo ufw allow 'Apache Full'
O para Nginx:
sudo ufw allow 'Nginx Full'
Crear tu propio perfil
Si tu aplicación usa un puerto personalizado, puedes crear un perfil. Crea un archivo en /etc/ufw/applications.d/miapp con este contenido:
[MiApp]
title=Mi Aplicación Personalizada
description=Puerto para mi app
ports=8080/tcp
Luego recarga UFW:
sudo ufw app update MiApp
sudo ufw allow MiApp
Paso 7: Logging y monitorización
UFW puede registrar los intentos de conexión bloqueados. Esto es útil para detectar ataques o simplemente para entender el tráfico.
Activar el logging
sudo ufw logging on
Por defecto, los logs se guardan en /var/log/ufw.log. Puedes verlos con:
sudo tail -f /var/log/ufw.log
Verás líneas como:
[UFW BLOCK] IN=eth0 OUT= MAC=... SRC=203.0.113.5 DST=tu_ip LEN=60 TOS=0x00 ...
Esto te indica de dónde vienen los intentos bloqueados. Es una herramienta excelente para auditar tu servidor.
[TIP] Si ves demasiados intentos desde una misma IP, puedes bloquearla con
sudo ufw deny from IP. Esto reducirá la carga y el ruido en los logs.
Paso 8: Reiniciar o desactivar UFW
A veces necesitas empezar de cero o simplemente apagar el firewall temporalmente.
Desactivar UFW
sudo ufw disable
Esto detiene el firewall y todas las reglas. Útil para pruebas o si tienes problemas.
Reiniciar completamente
Para borrar todas las reglas y empezar de nuevo:
sudo ufw reset
Te pedirá confirmación. Esto es útil si has hecho un lío con las reglas y quieres volver al estado inicial.
Caso práctico: Configurar UFW para un servidor web con Syspanel
Imagina que tienes un servidor con un panel de control llamado Syspanel (el puerto de acceso es el 2106). Además, quieres servir una web en los puertos 80 y 443, y acceder por SSH. Los pasos serían:
-
Establecer políticas por defecto:
sudo ufw default deny incoming sudo ufw default allow outgoing -
Permitir SSH:
sudo ufw allow ssh -
Permitir HTTP y HTTPS:
sudo ufw allow http sudo ufw allow https -
Permitir Syspanel:
sudo ufw allow 2106/tcp -
Activar el firewall:
sudo ufw enable
Con esto, tu servidor web está protegido y solo expone los puertos necesarios. Ni siquiera tendrías que exponer el puerto 3306 de MySQL si no es necesario.
Preguntas frecuentes (FAQ)
¿UFW es suficiente para proteger mi servidor?
UFW es una capa de seguridad fundamental, pero no es la única. Debes combinar el firewall con contraseñas seguras, SSH con llaves, actualizaciones regulares y, si es posible, un IDS/IPS como Fail2ban. UFW es el primer muro, no la única defensa.
¿Puedo usar UFW en un servidor con múltiples interfaces de red?
Sí. UFW permite especificar la interfaz en las reglas. Por ejemplo:
sudo ufw allow in on eth0 to any port 22
Esto solo permitiría SSH en la interfaz eth0.
¿Qué pasa si bloqueo mi propio acceso SSH?
Si te equivocas y bloqueas el puerto SSH, puedes conectarte por consola (si es un VPS con panel web) o mediante una sesión de rescate. En servidores locales, necesitarías acceso físico. Por eso es tan importante configurar SSH antes de activar UFW.
¿UFW funciona igual en Ubuntu y Debian?
Sí, la sintaxis y los comandos son idénticos en ambas distribuciones. La única diferencia es que en Debian puede que necesites instalarlo primero, mientras que en Ubuntu suele venir preinstalado.
¿Cómo sé qué puertos están abiertos en mi servidor?
Puedes usar sudo ufw status para ver las reglas. Para ver los puertos realmente escuchando, usa sudo netstat -tulpn o sudo ss -tulpn.
¿Puedo automatizar reglas UFW con scripts?
Por supuesto. Puedes crear un script bash con todos tus comandos y ejecutarlo cuando necesites configurar un nuevo servidor. Esto es especialmente útil si gestionas varios servidores.
Conclusión
Configurar un firewall básico con UFW es una de las tareas más importantes que puedes hacer para proteger servidor linux. No solo es fácil de aprender, sino que su sintaxis clara reduce los errores comunes que se cometen con iptables directamente.
Con los pasos que te he mostrado, ya puedes configurar ufw en tu servidor Ubuntu o Debian con confianza. Recuerda siempre:
- Establece políticas por defecto seguras.
- Permite solo lo necesario.
- Activa el logging para monitorizar.
- Revisa tus reglas periódicamente.
Un firewall bien configurado te dará tranquilidad y una base sólida sobre la que construir servicios más complejos. No subestimes el poder de unas pocas líneas bien escritas: pueden marcar la diferencia entre un servidor vulnerable y uno robusto.
Ahora que ya sabes cómo hacerlo, ¡ponte manos a la obra y asegura tu servidor! Si tienes dudas, repasa esta guía o consulta la documentación oficial de UFW. La seguridad es un proceso continuo, y has dado el primer gran paso.
