Un firewall correctamente configurado es la primera línea de defensa para cualquier servidor expuesto a internet. Ubuntu incluye UFW (Uncomplicated Firewall) como su herramienta predeterminada de gestión de firewall, proporcionando una interfaz directa sobre el poderoso pero complejo framework iptables. Esta guía cubre todo lo que necesitas saber para configurar UFW en servidores Ubuntu de producción, desde la gestión básica de reglas hasta configuraciones avanzadas como limitación de velocidad, perfiles de aplicación y control de acceso basado en subredes.
Requisitos Previos
Antes de comenzar, asegúrate de tener:
- Ubuntu Server 20.04, 22.04 o 24.04 (Las ediciones de escritorio también funcionan)
- Acceso a terminal con privilegios sudo
- Acceso SSH al servidor (si configuras remotamente)
- Comprensión básica de puertos TCP/UDP y conceptos de redes
¿Qué es UFW?
UFW significa Uncomplicated Firewall (Firewall No Complicado). Fue creado por el equipo de Ubuntu para simplificar el proceso de configuración de iptables, el framework de firewall integrado en Linux. Mientras que iptables es extremadamente poderoso, su sintaxis es verbosa y propensa a errores para operaciones rutinarias. UFW envuelve iptables con una interfaz de comandos legible.
Características clave de UFW:
- Firewall con estado — rastrea los estados de conexión y permite automáticamente el tráfico de retorno para conexiones establecidas
- Perfiles de aplicación — conjuntos de reglas preconfiguradas para servicios comunes
- Soporte IPv4 e IPv6 — doble pila por defecto
- Registro — niveles de registro configurables para monitoreo de seguridad
- Limitación de velocidad — protección integrada contra ataques de fuerza bruta
Instalación de UFW
UFW viene preinstalado en la mayoría de las distribuciones Ubuntu. Verifica la instalación:
sudo apt update
sudo apt install ufw
Verifica el estado actual:
sudo ufw status
Si UFW nunca ha sido configurado, la salida mostrará:
Status: inactive
Importante: No habilites UFW hasta que hayas configurado tu regla de acceso SSH. Habilitar el firewall sin permitir SSH te dejará fuera de un servidor remoto.
Establecer Políticas Predeterminadas
Antes de agregar cualquier regla, establece las políticas predeterminadas. La postura de seguridad recomendada es denegar todo el tráfico entrante y permitir todo el saliente:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Permitir SSH Antes de Habilitar UFW
Este es el paso más crítico al configurar UFW en un servidor remoto. Siempre permite SSH primero:
sudo ufw allow ssh
Esto es equivalente a:
sudo ufw allow 22/tcp
Si tu servidor SSH ejecuta en un puerto no estándar (por ejemplo, 2222):
sudo ufw allow 2222/tcp
Habilitar UFW
Una vez que SSH está permitido, habilita el firewall:
sudo ufw enable
Para verificar:
sudo ufw status verbose
Reglas Comunes de Firewall
Permitir un Puerto Específico
# Permitir HTTP
sudo ufw allow 80/tcp
# Permitir HTTPS
sudo ufw allow 443/tcp
# Permitir un puerto de aplicación personalizado
sudo ufw allow 8080/tcp
# Permitir un puerto UDP (ej., para WireGuard VPN)
sudo ufw allow 51820/udp
Permitir desde una Dirección IP Específica
# Permitir todo el tráfico desde una IP confiable
sudo ufw allow from 203.0.113.50
# Permitir SSH solo desde una IP específica
sudo ufw allow from 203.0.113.50 to any port 22
# Permitir acceso a MySQL desde un servidor de aplicación específico
sudo ufw allow from 10.0.1.20 to any port 3306
Permitir una Subred
# Permitir todo el tráfico desde una red local
sudo ufw allow from 10.0.1.0/24
# Permitir SSH solo desde tu red de oficina
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp
Eliminar Reglas
# Listar reglas con números
sudo ufw status numbered
# Eliminar regla número 3
sudo ufw delete 3
# Eliminar por especificación de regla
sudo ufw delete allow 80/tcp
Perfiles de Aplicación
UFW soporta perfiles de aplicación que agrupan reglas de firewall para software específico. Los perfiles se almacenan como archivos INI en /etc/ufw/applications.d/.
# Listar perfiles disponibles
sudo ufw app list
# Permitir Nginx HTTP y HTTPS
sudo ufw allow 'Nginx Full'
# Ver detalles del perfil
sudo ufw app info 'Nginx Full'
Crear Perfiles de Aplicación Personalizados
Crea un archivo en /etc/ufw/applications.d/ para tu aplicación:
sudo nano /etc/ufw/applications.d/myapp
Contenido:
[MyApp]
title=Mi Aplicación Node.js
description=Aplicación web Express.js
ports=3000/tcp
Limitación de Velocidad
UFW incluye una función integrada de limitación de velocidad especialmente útil para proteger contra ataques de fuerza bruta:
sudo ufw limit ssh
Esto limita las conexiones SSH entrantes a 6 conexiones en 30 segundos desde una sola dirección IP.
La limitación de velocidad se recomienda para:
- SSH (puerto 22)
- FTP (puerto 21)
- Cualquier endpoint de inicio de sesión o autenticación
Nota: La limitación de velocidad en UFW es básica comparada con herramientas como fail2ban. Para servidores de producción, considera usar ambos.
Configurar Registro
El registro de UFW te ayuda a monitorear conexiones bloqueadas y detectar posibles ataques. Los registros se escriben en /var/log/ufw.log.
# Niveles disponibles: off, low, medium, high, full
sudo ufw logging on # Predeterminado: low
sudo ufw logging medium # Más detalle
# Ver entradas recientes del registro
sudo tail -50 /var/log/ufw.log
# Filtrar conexiones bloqueadas
sudo grep '\[UFW BLOCK\]' /var/log/ufw.log | tail -20
Configuraciones Prácticas de Servidor
Servidor Web (Nginx o Apache)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Servidor de Base de Datos (MySQL/PostgreSQL)
Solo permite conexiones de base de datos desde tus servidores de aplicación:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow from 10.0.1.20 to any port 3306
sudo ufw allow from 10.0.1.20 to any port 5432
sudo ufw enable
Servidor VPN (WireGuard)
sudo ufw allow ssh
sudo ufw allow 51820/udp
Solución de Problemas
No Puedo Conectar Después de Habilitar UFW
Si pierdes acceso a un servidor remoto:
- Accede al servidor a través de una consola (consola web del proveedor de nube, KVM o acceso físico)
- Deshabilita UFW:
sudo ufw disable - Revisa tus reglas:
sudo ufw status numbered - Corrige la configuración y vuelve a habilitar
Restablecer Todo
sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw enable
Referencia de Comandos de Gestión de UFW
| Comando | Descripción |
|---|---|
sudo ufw enable | Habilitar el firewall |
sudo ufw disable | Deshabilitar el firewall |
sudo ufw status | Mostrar reglas actuales |
sudo ufw status verbose | Mostrar reglas con detalles |
sudo ufw status numbered | Mostrar reglas con números |
sudo ufw reload | Recargar reglas sin reiniciar |
sudo ufw reset | Restablecer a valores predeterminados |
sudo ufw allow <puerto> | Permitir tráfico entrante en puerto |
sudo ufw deny <puerto> | Denegar tráfico entrante en puerto |
sudo ufw limit <puerto> | Limitar velocidad de conexiones en puerto |
sudo ufw delete <regla> | Eliminar una regla específica |
sudo ufw logging <nivel> | Establecer nivel de registro |
sudo ufw app list | Listar perfiles de aplicación |
Resumen
UFW proporciona una forma directa de gestionar reglas de firewall en servidores Ubuntu sin la complejidad de los comandos raw de iptables. Siguiendo el principio de menor privilegio — denegar todo el tráfico entrante por defecto y solo permitir lo que se necesita explícitamente — estableces una base de seguridad sólida para tu servidor.
Para endurecimiento adicional del servidor, combina UFW con otras medidas de seguridad. Consulta nuestras guías sobre Endurecimiento SSH y Configuración de VPN WireGuard.