Cómo abrir puertos en Ubuntu con UFW: guía práctica de firewall

Aprende a abrir, liberar y cerrar puertos en Ubuntu usando UFW. Configura el firewall paso a paso con reglas seguras para HTTP, HTTPS, SSH y puertos personalizados.

Un firewall mal configurado es una de las causas más comunes de problemas en servidores Linux recién provisionados — ya sea porque la aplicación no responde (puerto cerrado) o porque el servidor está demasiado expuesto (puerto abierto sin necesidad). En Ubuntu, UFW (Uncomplicated Firewall) es la interfaz por defecto y simplifica la gestión de reglas de iptables, manteniendo la configuración legible y versionable.

Este tutorial cubre el flujo completo: habilitar UFW sin bloquearte fuera por SSH, abrir puertos para servicios comunes (HTTP, HTTPS, base de datos), crear reglas restringidas por IP de origen, verificar el estado y eliminar reglas antiguas. El destinatario es un sysadmin Linux configurando el firewall por primera vez en un servidor Ubuntu 22.04 o 24.04.

Tiempo estimado: 10-15 minutos para ejecutar todos los pasos con calma, incluyendo la verificación. Si solo necesitas abrir un puerto específico, ve directamente a la sección “Abriendo puertos TCP y UDP”.

Requisitos previos

Requisitos previos

Necesitas Ubuntu 22.04 LTS o 24.04 LTS con acceso sudo, sesión SSH activa y estable, y conocimiento del puerto SSH en uso (por defecto: 22). UFW viene instalado de fábrica — no es necesario instalar paquetes externos.

Antes de comenzar, confirma en qué puerto está corriendo SSH. Si tú o el proveedor lo cambiaron a un puerto personalizado (ej: 2222), esa información es crítica — abrir el puerto equivocado significa perder acceso al servidor después de habilitar el firewall.

Puerto SSH por defecto 22/tcp
Puerto HTTP 80/tcp
Puerto HTTPS 443/tcp
Política default UFW deny incoming, allow outgoing

Verificando el estado actual de UFW

Antes de añadir reglas, confirma si UFW está habilitado o deshabilitado. Habilitarlo con reglas erróneas puede desconectarte inmediatamente.

01

Verifica el estado de UFW:

sudo ufw status verbose

Si la salida es Status: inactive, el firewall está deshabilitado y no hay ninguna regla en vigor. Si es Status: active, lista las reglas existentes antes de cambiar nada.

02

Identifica el puerto SSH en uso leyendo la configuración:

sudo grep -i "^Port" /etc/ssh/sshd_config

Si la salida muestra Port 22 (o ninguna línea), está por defecto. Si muestra otro número (ej: Port 2222), anótalo — necesitas liberar ese puerto antes de habilitar UFW.

Riesgo de bloqueo total

Habilitar UFW sin liberar antes el puerto SSH cierra tu sesión actual e impide reconectarse. Si esto sucede y no tienes acceso a la consola del proveedor, la recuperación exige reinstalar el servidor.

Liberando SSH antes de habilitar el firewall

Este es el paso más importante. Libera siempre SSH primero y después habilita UFW.

03

Libera el puerto SSH (usa 22 o el puerto personalizado identificado arriba):

sudo ufw allow 22/tcp

Si SSH corre en un puerto personalizado:

sudo ufw allow 2222/tcp

La respuesta Rules updated confirma que la regla se agregó a la configuración pendiente. Aún no está activa porque UFW está deshabilitado.

04

Habilita UFW:

sudo ufw enable

UFW te preguntará si quieres continuar, advirtiendo que puede interrumpir conexiones SSH. Confirma con y. Si tu sesión SSH no se cae, el paso anterior funcionó.

Abriendo puertos TCP y UDP

Con el firewall activo, libera los puertos de las aplicaciones que necesitan estar accesibles externamente. UFW acepta varias sintaxis — elige la más clara para tu caso.

05

Libera HTTP y HTTPS para servicios web (nginx, Apache, Caddy):

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Alternativa usando un perfil predefinido (más legible en scripts):

sudo ufw allow "Nginx Full"

Lista los perfiles disponibles con sudo ufw app list.

06

Libera un puerto UDP (ej: DNS interno o servidor de juego):

sudo ufw allow 53/udp
sudo ufw allow 27015/udp

Si la aplicación usa TCP y UDP en el mismo número (ej: algunos protocolos de juego), omite el protocolo:

sudo ufw allow 27015
07

Libera un rango de puertos (útil para FTP passive o rangos de aplicaciones):

sudo ufw allow 5000:5100/tcp

Usa dos puntos (:) para separar inicio y fin. El rango es inclusivo en ambos extremos.

Restringiendo el acceso por IP de origen

Para servicios que no deben ser públicos (base de datos, panel admin, métricas), libera únicamente IPs conocidas.

08

Libera PostgreSQL solo para la IP de tu servidor de aplicación:

sudo ufw allow from 203.0.113.45 to any port 5432 proto tcp

Sustituye 203.0.113.45 por la IP real. Para liberar una red entera (ej: VPC privada):

sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp
09

Aplica rate-limit en SSH para mitigar intentos de fuerza bruta:

sudo ufw limit 22/tcp

El limit bloquea conexiones del mismo origen que excedan 6 intentos en 30 segundos. No sustituye claves SSH ni fail2ban, pero añade una capa extra.

Combinación recomendada para SSH en producción

Usa ufw limit para rate-limiting + autenticación por clave SSH (deshabilitando contraseña en /etc/ssh/sshd_config) + fail2ban monitoreando /var/log/auth.log. Los tres juntos cubren el 99% de los ataques automatizados sin perjudicar el acceso legítimo.

Verificando las reglas activas

Después de añadir reglas, confirma que todo quedó como esperabas.

10

Lista todas las reglas con numeración:

sudo ufw status numbered

La salida muestra cada regla con un índice ([ 1], [ 2], etc), útil para eliminar reglas específicas después. La columna To indica el destino (puerto en el servidor), Action es ALLOW/DENY/LIMIT, y From es el origen permitido.

11

Prueba la conectividad del puerto desde otra máquina:

nc -zv TU_IP 80

Si el puerto está abierto y el servicio respondiendo, la salida es Connection succeeded. Si el puerto está abierto pero nada está escuchando, es Connection refused. Si el puerto está cerrado por el firewall, el comando se cuelga o devuelve Operation timed out.

Eliminando reglas antiguas

A medida que reorganizas servicios, las reglas se vuelven basura. Limpiarlas mantiene el firewall auditable.

12

Elimina una regla por número (usa la lista de ufw status numbered):

sudo ufw delete 3

UFW pide confirmación mostrando qué regla será eliminada. Tras el delete, los números de las reglas siguientes se reindexan — ejecuta siempre ufw status numbered antes de cada delete en secuencia.

13

Elimina una regla por especificación completa (alternativa que no depende del número):

sudo ufw delete allow 8080/tcp

Esto es más seguro en scripts porque no depende del orden de las reglas.

Resolución de problemas

”ufw: command not found”

UFW no está instalado (raro en Ubuntu estándar, pero ocurre en imágenes minimalistas):

sudo apt update
sudo apt install -y ufw

Puerto liberado pero el servicio no responde

Verifica si el servicio realmente está escuchando en el puerto:

sudo ss -tulpn | grep :PUERTO

Si no aparece nada, el problema no es el firewall — el servicio no está corriendo o está enlazado a 127.0.0.1 (solo localhost). Para servicios que deben aceptar conexiones externas, configúralos para enlazarse a 0.0.0.0 o a la IP pública.

Las reglas desaparecen tras reiniciar

UFW persiste las reglas automáticamente en /etc/ufw/user.rules. Si las reglas desaparecen tras un reboot, el servicio puede no estar habilitado en el arranque:

sudo systemctl enable ufw
sudo systemctl status ufw

Próximos pasos

Con el firewall activo y los puertos configurados, considera los siguientes próximos pasos para fortalecer el servidor:

  • Configura fail2ban para monitorear intentos de fuerza bruta en SSH, HTTP y otros servicios.
  • Migra SSH a autenticación por clave y deshabilita el login por contraseña en /etc/ssh/sshd_config.
  • Define los logs de UFW en nivel medio (sudo ufw logging medium) y centralízalos vía journald o un sistema externo.
  • Documenta las reglas del firewall en un runbook versionado — facilita la auditoría y el onboarding de otros sysadmins.
  • Estudia las reglas before.rules y after.rules en /etc/ufw/ para casos avanzados como NAT, masquerading e integración con Docker.

Si estás aprovisionando esto en producción y quieres enfocarte en la aplicación en lugar de en la operación de infraestructura, una VPS Hostini ya viene con Ubuntu LTS y firewall preconfigurado con SSH liberado — solo añades las reglas de tus aplicaciones.

Preguntas frecuentes

¿Cuál es la diferencia entre 'ufw allow 80' y 'ufw allow 80/tcp'?

Sin especificar el protocolo, UFW libera tanto TCP como UDP en el puerto. Especificar /tcp o /udp restringe la regla al protocolo correcto, lo que es más seguro y claro. Para servicios web (HTTP, HTTPS, SSH) usa siempre /tcp; para DNS y juegos usa /udp o ambos según la aplicación.

¿Necesito reiniciar UFW después de añadir una regla?

No. UFW aplica las reglas en tiempo real en cuanto ejecutas el comando allow o deny. El reload (sudo ufw reload) solo es necesario si editaste archivos de configuración manualmente en /etc/ufw/ o modificaste perfiles en /etc/ufw/applications.d/.

¿Cómo abrir un puerto solo para una IP específica?

Usa la sintaxis extendida: sudo ufw allow from 203.0.113.45 to any port 5432 proto tcp. Esto libera el puerto 5432 (PostgreSQL) únicamente para solicitudes provenientes de la IP 203.0.113.45 — útil para bases de datos que solo deben ser accesibles desde tu servidor de aplicación.

¿UFW funciona con Docker?

Parcialmente. Docker manipula iptables directamente e ignora las reglas de UFW para los puertos publicados con -p. Para contenedores expuestos al público, usa la flag --iptables=false en el daemon de Docker o configura reglas en /etc/ufw/after.rules. En producción, considera exponer contenedores solo a través de un reverse proxy (nginx) con UFW protegiendo el host.

¿Cómo ver qué proceso está usando un puerto antes de abrirlo en el firewall?

Usa sudo ss -tulpn | grep :PUERTO para listar los procesos escuchando en el puerto. Si no aparece nada, ningún servicio está enlazado a él — abrirlo en UFW no hará que el puerto funcione. Primero necesitas iniciar el servicio (nginx, mysql, etc) que va a responder en ese puerto.

¿Es seguro dejar el puerto 22 abierto para cualquier IP?

Funcional, pero no ideal. Recomendamos limitar SSH a IPs conocidas (sudo ufw allow from TU_IP to any port 22) o usar sudo ufw limit ssh, que bloquea intentos excesivos de conexión desde el mismo origen. Combínalo con claves SSH (deshabilitando la contraseña) y fail2ban para defensa en profundidad.

Temas:
Próximos pasos Cloud Ryzen con NVMe y protección DDoS siempre activa.Pon en producción en un VPS Hostini →
¿Te resultó útil este tutorial?
Hablar por WhatsApp