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:

  1. Accede al servidor a través de una consola (consola web del proveedor de nube, KVM o acceso físico)
  2. Deshabilita UFW: sudo ufw disable
  3. Revisa tus reglas: sudo ufw status numbered
  4. 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

ComandoDescripción
sudo ufw enableHabilitar el firewall
sudo ufw disableDeshabilitar el firewall
sudo ufw statusMostrar reglas actuales
sudo ufw status verboseMostrar reglas con detalles
sudo ufw status numberedMostrar reglas con números
sudo ufw reloadRecargar reglas sin reiniciar
sudo ufw resetRestablecer 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 listListar 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.