SSD Nodes Learn Hosting plans →
Guías Matt ConnorPor Matt Connor · Actualizado 2026-08-27

Cómo configurar un firewall UFW en un VPS

Configura UFW con denegación predeterminada, permite sólo los puertos necesarios y activa el firewall sin bloquear SSH. Incluye comandos para Ubuntu y Debian.

Qué es UFW y por qué conviene usarlo

UFW significa Uncomplicated Firewall, y el nombre es preciso. Es una interfaz sencilla para el firewall que ya incluye el kernel de Linux. En lugar de escribir reglas sin formato, puede introducir comandos breves como ufw allow 22/tcp. En un VPS recién configurado, todos los servicios que escuchan están accesibles desde Internet de forma predeterminada. Un firewall invierte esa situación: deniega todo y después permite sólo los pocos puertos que realmente utiliza. Este cambio elimina la mayor parte de la exposición con unos cuatro comandos. UFW es la herramienta de Ubuntu y Debian. Si su VPS ejecuta Rocky o AlmaLinux, debe usar firewalld en su lugar, que organiza las reglas en zonas.

Antes de modificarlo, averigüe qué servicios están escuchando, porque el firewall determina el destino de esos servicios. Consultar los servicios que escuchan con ss -tlnp es el primer paso correcto.

La única regla que evita que te quedes fuera

Este es el error que hace que muchas personas desconfíen de los firewalls. Habilitas UFW con una política predeterminada de denegación, pero nunca permites SSH. En cuanto se activa el firewall, se corta tu propia conexión y no puedes volver a entrar. Evítalo permitiendo siempre SSH antes de habilitar UFW. Ese es todo el procedimiento, y los pasos siguientes lo realizan en el orden seguro.

Si aun así te ocurre, no estás bloqueado: la consola web de tu proveedor, mediante VNC o serie, no pasa por SSH. Puedes iniciar sesión allí y ejecutar ufw disable o añadir la regla que falta. Un bloqueo causado por el firewall también presenta un síntoma característico: un paquete descartado deja el cliente SSH esperando hasta que se agota el tiempo de espera, mientras que un daemon SSH detenido rechaza la conexión de inmediato. Esa es la diferencia entre conexión rechazada y conexión agotada por tiempo de espera.

Paso 1: Establezca las políticas predeterminadas

Empiece indicando a UFW que deniegue todas las conexiones entrantes y permita todas las salientes:

sudo ufw default deny incoming
sudo ufw default allow outgoing

deny incoming es la parte importante. Significa que cualquier puerto sin una regla explícita de autorización queda cerrado desde el exterior, aunque haya un servicio escuchando en él. allow outgoing permite que el servidor acceda normalmente a Internet para descargar actualizaciones y realizar tareas similares. Estos dos comandos sólo cambian la política; no se aplica ninguna regla hasta que habilite UFW en el paso 3.

Paso 2: Permita los puertos que realmente necesita

Antes de habilitarlo, abra SSH para mantener la conexión:

sudo ufw allow 22/tcp

UFW también puede limitar la tasa de conexiones SSH: sudo ufw limit 22/tcp permite el puerto, pero bloquea cualquier dirección que realice seis o más conexiones en treinta segundos. Esto dificulta los scripts de fuerza bruta sin software adicional.

Si ejecuta un servidor web, permita también HTTP y HTTPS:

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

Permita únicamente los servicios que expone públicamente. Una base de datos como Postgres en el puerto 5432 casi nunca debería tener una regla allow. Enlácela a 127.0.0.1 para que sólo sea accesible desde la máquina. Cada puerto que abre aumenta la superficie que debe proteger, por lo que la lista debe ser corta.

También puede preparar aquí la secuencia completa de comandos ufw para su servidor y ejecutarlos en orden:

ToolUFW rule generator

Paso 3: Activarlo y confirmar que está habilitado

sudo ufw enable

Aparece una advertencia: el comando puede interrumpir las conexiones SSH existentes. Como permitió 22/tcp en el paso 2, su sesión continúa activa. Confirme el resultado:

sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing)

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp                     ALLOW IN    Anywhere

Aquí debe comprobar dos cosas. Status: active significa que el firewall está activo. Además, cada regla aparece dos veces: una vez sin modificaciones y otra con (v6). Esto indica que UFW también cubre IPv6, además de IPv4. Si faltan las líneas (v6), el tráfico IPv6 no está gestionado. Este es un problema independiente que se explica en el artículo sobre el firewall IPv6.

Administrar las reglas posteriormente

Para ver las reglas con números y poder eliminar una:

sudo ufw status numbered
sudo ufw delete 3

Para permitir un puerto únicamente desde una dirección, una opción adecuada para exponer un servicio de administración sólo a su propia IP:

sudo ufw allow from 10.0.0.24 to any port 5432 proto tcp

Ese enfoque deja de funcionar cuando cambia su propia dirección o cuando necesitan acceso varias máquinas. La solución habitual es no exponer el puerto públicamente y acceder al servicio mediante una red privada. Para eso sirve anunciar la subred privada del servidor en su tailnet.

Un firewall es una capa. Controla qué puede llegar a un puerto, pero no ralentiza a alguien que intenta acceder repetidamente a un puerto que ha dejado abierto, como SSH. Para eso, añada Fail2ban delante de SSH para bloquear a los atacantes reincidentes. La defensa en profundidad significa que cada capa cubre lo que las demás no pueden cubrir.

Un firewall sólo tiene sentido cuando sabe qué son los puertos y cómo escuchan los servicios, y configurarlo es un paso de los primeros 10 minutos en un VPS nuevo.

FAQ

¿Activar UFW desconectará mi sesión SSH?

No, si permite SSH primero. Ejecute sudo ufw allow 22/tcp antes de sudo ufw enable. La conexión se mantiene porque el firewall permite el puerto 22. El riesgo aparece al activar un firewall con denegación predeterminada sin una regla que permita SSH, porque la conexión se corta. Si ocurre, inicie sesión mediante la consola VNC o serie de su proveedor y ejecute ufw disable.

¿Qué puertos debo abrir en un VPS?

Sólo los que exponga públicamente. SSH (22/tcp) para administrar el servidor, y HTTP y HTTPS (80/tcp, 443/tcp) si ejecuta un sitio web. Mantenga todos los demás puertos denegados. Los servicios internos, como las bases de datos, deben enlazarse a 127.0.0.1 y no tener ninguna regla de firewall, para que nunca sean accesibles desde la red.

¿UFW gestiona IPv6?

Sí, en las versiones modernas de Ubuntu: IPV6=yes está establecido en /etc/default/ufw, por lo que cada regla se aplica a ambas pilas y ufw status muestra las reglas de IPv6 con el sufijo (v6). Los casos en los que todavía puede fallar se explican en la trampa del firewall de IPv6.

¿Cómo elimino una regla de UFW?

Ejecute sudo ufw status numbered para listar las reglas con sus números de índice. Después, ejecute sudo ufw delete N, donde N es el número de la regla que desea eliminar. También puede eliminarla mediante su especificación, por ejemplo sudo ufw delete allow 80/tcp.

¿Cómo permito un puerto sólo desde una dirección IP?

Use una regla from en lugar de una regla allow simple. Para permitir que sólo la dirección de su oficina acceda a PostgreSQL, ejecute sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. Con una política de denegación predeterminada, el puerto está cerrado para todos hasta que una regla lo permita. Por tanto, esta regla from es la única vía de acceso: Internet queda bloqueado y sólo se permite la dirección indicada. No añada también una regla allow 5432/tcp simple, porque abriría el puerto para todos. Es la forma más segura de exponer una base de datos o un panel de administración. Confírmelo con sudo ufw status verbose, que muestra la dirección de origen junto al puerto.