Linux24 de julio de 2026 4 vistas

UFW: configurar el cortafuegos de su VPS Linux (Ubuntu/Debian)

UFW: configurar el cortafuegos de su VPS Linux (Ubuntu/Debian)

Un servidor bien configurado solo expone los servicios estrictamente necesarios. Todo lo demás debe estar cerrado y ese es precisamente el papel de un cortafuegos. En Linux, el filtrado de red se basa en netfilter, controlado históricamente por iptables, una sintaxis poderosa pero conocida por ser árida. UFW (Uncomplicated Firewall) es la capa oficial de Ubuntu que hace que este filtrado sea accesible: unas pocas órdenes legibles son suficientes para bloquear su máquina.

Esta guía le acompaña paso a paso para instalar y configurar UFW en un VPS Linux bajo Ubuntu o Debian: políticas por defecto, autorización de SSH sin arriesgarse a quedar fuera, apertura de los puertos web, reglas avanzadas, registro y la conocida trampa de eludir UFW mediante Docker.

¿Qué es UFW y por qué usarlo?

UFW no es un cortafuegos completo: es una interfaz simplificada sobre iptables/nftables. Donde iptables requiere líneas complejas, UFW se contenta con instrucciones del tipo ufw allow 443. Gestiona ambos sentidos del tráfico entrante (incoming) y saliente (outgoing) y permite filtrar por puerto, por protocolo, por servicio nombrado o por dirección de origen.

El principio de un buen cortafuegos se resume en una frase: bloquear todo por defecto, luego abrir solo lo necesario. Concretamente, se rechazan todas las conexiones entrantes, se permiten todas las conexiones salientes y luego se añade una excepción para cada servicio que se desea hacer accesible (SSH, HTTP, HTTPS…).

Requisitos previos

  • Un VPS bajo Ubuntu 22.04/24.04 o Debian 11/12 con acceso root o un usuario sudo.
  • Un acceso SSH funcional y, sobre todo, el conocimiento del puerto SSH utilizado (22 por defecto).
  • Una advertencia a leer antes de todo: configurar mal un cortafuegos en un servidor remoto es la mejor manera de quedar bloqueado fuera. Siga el orden de los pasos a continuación al pie de la letra: se permite SSH antes de activar UFW, nunca al revés.

Instalar UFW en Ubuntu y Debian

En Ubuntu, UFW generalmente está preinstalado. En Debian, hay que añadirlo. En ambos casos:

sudo apt update
sudo apt install -y ufw

Verifique el estado del servicio. Al principio, UFW está inactivo:

sudo ufw status

La respuesta Status: inactive es normal: primero vamos a establecer las reglas, luego lo activaremos.

Definir las políticas por defecto

Comenzamos con la regla básica: rechazar todo lo que entra, permitir todo lo que sale. Es la base de un servidor seguro.

sudo ufw default deny incoming
sudo ufw default allow outgoing

En este punto, si activara UFW de inmediato, perdería su conexión SSH. Por eso el siguiente paso es imperativo antes de la activación.

Permitir SSH (hacer ANTES de activar UFW)

Permita el servicio SSH para no cortar su acceso:

sudo ufw allow OpenSSH

OpenSSH es un perfil de aplicación predefinido que abre el puerto 22. También puede designar el puerto directamente:

sudo ufw allow 22/tcp

¿Ha cambiado el puerto SSH? Es una buena práctica de seguridad. En este caso, reemplace 22 por su puerto real, por ejemplo sudo ufw allow 2222/tcp. Verifique su puerto en /etc/ssh/sshd_config (directiva Port) antes de activar el cortafuegos. Para profundizar en el endurecimiento del acceso, consulte el recorrido de seguridad al final del artículo.

Activar UFW

Una vez que SSH esté permitido, active el cortafuegos:

sudo ufw enable

UFW muestra una advertencia indicando que el comando puede interrumpir las conexiones SSH existentes. Dado que ha permitido SSH justo antes, confirme con y. Su conexión actual permanece abierta.

Verificar el estado y listar las reglas

Para un estado detallado, incluyendo las políticas por defecto y el registro:

sudo ufw status verbose

Para mostrar las reglas con su número indispensable para eliminar una después:

sudo ufw status numbered

Obtendrá una salida de este tipo:

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                    ALLOW IN    Anywhere

Abrir puertos para sus servicios

Este es el uso diario de UFW: abrir un puerto para cada servicio que exponga. UFW acepta varias sintaxis.

Por nombre de servicio web (abre 80 y 443 de una vez):

sudo ufw allow 'Nginx Full'

Este perfil existe tan pronto como Nginx está instalado; el equivalente para Apache es 'Apache Full'. Si está configurando un servidor web, complete con nuestra guía instalar Nginx y PHP-FPM en un VPS.

Por número de puerto:

sudo ufw allow 80/tcp      # HTTP
sudo ufw allow 443/tcp     # HTTPS
sudo ufw allow 25565/tcp   # ejemplo: servidor de juego

Por rango de puertos:

sudo ufw allow 6000:6007/tcp

Desde una dirección de origen específica (no abrir un puerto más que a una IP de confianza):

sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp

Este ejemplo solo permite MySQL (puerto 3306) desde la IP 203.0.113.10, ideal para una base de datos que nunca debe estar expuesta a toda Internet. También puede apuntar a una subred completa en notación CIDR (203.0.113.0/24).

Los perfiles de aplicación

UFW conoce "perfiles" que agrupan los puertos de una aplicación, lo que evita tener que recordar los números. Liste los disponibles en su sistema:

sudo ufw app list

Encontrará, por ejemplo, OpenSSH, Nginx Full, Nginx HTTP, Nginx HTTPS, Apache Full… Para conocer el detalle de los puertos cubiertos por un perfil:

sudo ufw app info 'Nginx Full'

Estos perfiles aparecen automáticamente tan pronto como se instala un software compatible. Hacen que sus reglas sean más legibles: sudo ufw allow 'Nginx Full' es más claro que sudo ufw allow 80,443/tcp.

Eliminar una regla

Dos métodos. El más seguro pasa por el número mostrado por status numbered:

sudo ufw status numbered
sudo ufw delete 2

También puede eliminar una regla reescribiéndola, precedida de delete:

sudo ufw delete allow 80/tcp

Reglas avanzadas: limitar las conexiones SSH

UFW ofrece una protección integrada contra ataques de fuerza bruta: la regla limit. Bloquea temporalmente una IP que intenta demasiadas conexiones en un corto período de tiempo (por defecto, más de 6 intentos en 30 segundos).

sudo ufw limit OpenSSH

Es un complemento útil, pero deliberadamente básico. Para una detección más precisa y prohibiciones duraderas en todos sus servicios, combine UFW con Fail2ban (guía por venir en este mismo recorrido). Ambas herramientas son perfectamente complementarias: UFW decide qué puertos están abiertos, Fail2ban decide qué IP merecen ser bloqueadas.

Permitir, denegar o rechazar: elegir bien la acción

UFW ofrece tres acciones principales para el tráfico entrante, que no deben confundirse:

  • allow permite la conexión. Es lo que utiliza para sus servicios públicos (SSH, web).
  • deny bloquea silenciosamente la conexión. El paquete es ignorado, sin respuesta. El atacante no sabe si el puerto está cerrado o filtrado: este es el comportamiento recomendado para un servidor expuesto.
  • reject bloquea la conexión pero devuelve un mensaje de rechazo al emisor. Útil internamente para un diagnóstico rápido, menos discreto frente a un escaneo.

En casi todos los casos en un servidor público, se mantiene la política por defecto deny incoming y se añaden allow específicos. El reject se reserva para situaciones específicas donde se quiere señalar explícitamente que un puerto está cerrado.

La trampa mayor: UFW y Docker

Este es el punto que más sorprende a los administradores, y una verdadera falla de seguridad silenciosa. Docker elude UFW. Cuando publica un puerto de contenedor (por ejemplo docker run -p 8080:80), Docker escribe sus propias reglas directamente en iptables, por encima de las gestionadas por UFW. Resultado: el puerto es accesible desde toda Internet incluso si ufw status afirma que lo bloquea. Su cortafuegos muestra una protección que no existe.

La solución de referencia es el proyecto de código abierto ufw-docker, que reconcilia ambos. En resumen:

  1. Agregue un bloque de configuración dedicado al final de /etc/ufw/after.rules (el repositorio proporciona el contenido exacto a copiar).
  2. Recargue UFW: sudo ufw reload.
  3. Ahora gestione el acceso a los contenedores con la sintaxis dedicada, por ejemplo:
sudo ufw route allow proto tcp from any to any port 8080

Mientras esta configuración no esté en su lugar, considere que todo puerto publicado por Docker está abierto al mundo entero. Si utiliza Docker en su servidor, trate este punto como prioritario.

Registro

Para rastrear las conexiones rechazadas y diagnosticar un problema, active el registro:

sudo ufw logging on

Los eventos se escriben en /var/log/ufw.log. Puede ajustar el nivel (low, medium, high, full) según el volumen deseado. Para un servidor en producción, low generalmente es suficiente y evita saturar los registros.

Desactivar o reiniciar UFW

Para desactivar temporalmente el cortafuegos:

sudo ufw disable

Para restablecer todo a cero y comenzar con una configuración limpia (las reglas se eliminan):

sudo ufw reset

Después de un reset, no olvide volver a permitir SSH antes de reactivar UFW, de lo contrario, se bloqueará fuera.

Preguntas frecuentes

¿UFW reemplaza a iptables? No, lo controla. UFW genera las reglas de iptables/nftables por usted. Ambos no son opuestos: UFW es simplemente una capa más legible.

Me he bloqueado fuera, ¿qué hacer? Utilice la consola de rescate (KVM/VNC) proporcionada con su VPS para conectarse fuera de SSH, luego corrija la regla o ejecute sudo ufw disable. Es precisamente para evitar esta situación que debe permitir SSH antes de activar UFW.

¿Es necesario abrir los puertos en tcp o udp? La mayoría de los servicios (SSH, HTTP, HTTPS) utilizan TCP. Algunos servicios (VPN WireGuard, juegos, DNS) utilizan UDP. Especifique el protocolo cuando lo conozca: sudo ufw allow 51820/udp.

¿UFW protege contra ataques DDoS? Parcialmente. Filtra y puede limitar las conexiones, pero un ataque volumétrico se maneja en la parte superior, a nivel de red. Sin embargo, UFW sigue siendo un componente indispensable de la higiene básica.

El recorrido de seguridad de su servidor

Un cortafuegos correctamente configurado es el segundo paso para un servidor bien defendido. Para llevar a cabo el proceso en su VPS Linux, siga el recorrido completo:

  1. Claves SSH reemplace la contraseña por una autenticación por claves (guía por venir).
  2. UFW cierre todos los puertos innecesarios (está aquí).
  3. Fail2ban prohíba automáticamente a los atacantes que insisten (guía por venir).
  4. Certbot cifre sus servicios con un certificado SSL Let's Encrypt (guía por venir).

Encuentre todos nuestros tutoriales en la documentación de Linux. Con UFW en su lugar, su servidor ya no expone más que lo que ha autorizado explícitamente, la base de toda configuración seria.