configurar ufw en un vps paso a paso
Aprende a configurar UFW en tu VPS. Evita perder el acceso SSH permitiendo el puerto 22 antes de activar la política default deny para asegurar tu servidor.
Qué es UFW y por qué es necesario
UFW significa Uncomplicated Firewall. Es una interfaz simplificada para el firewall del kernel de Linux. En lugar de escribir reglas complejas, se utilizan comandos cortos como ufw allow 22/tcp. Por defecto, en un VPS recién instalado, todos los servicios en escucha son accesibles desde internet. Un firewall invierte esta configuración: se deniega todo el tráfico y solo se permiten los puertos necesarios. Este cambio reduce la superficie de exposición mediante aproximadamente cuatro comandos.
Antes de configurarlo, identifique qué servicios están en escucha, ya que el firewall gestionará su acceso. Leer qué servicios están en escucha con ss -tlnp es el primer paso correcto.
La única regla para evitar perder el acceso al sistema
Este error es la razón por la que muchos usuarios evitan configurar firewalls. Si habilitas UFW con una política de denegación por defecto sin haber permitido SSH, la conexión se cortará en cuanto el firewall se active y no podrás volver a entrar. Para evitarlo, permite siempre el tráfico SSH antes de habilitar UFW. El procedimiento seguro se detalla en los siguientes pasos.
Si esto ocurre, no estás bloqueado: la consola web de tu proveedor, mediante VNC o serial, no depende de SSH. Puedes iniciar sesión por ese medio y ejecutar ufw disable o añadir la regla faltante.
Paso 1: Configurar las políticas predeterminadas
Comience indicando a UFW que deniegue todo el tráfico entrante y permita todo el tráfico saliente:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming es la parte importante. Significa que cualquier puerto sin una regla de permiso explícita estará cerrado al exterior, incluso si un servicio está escuchando en él. allow outgoing permite que su servidor se conecte a internet normalmente para actualizaciones y procesos similares. Estos dos comandos solo cambian la política; nada se aplica hasta que habilite UFW en el paso 3.
Paso 2: Permitir los puertos necesarios
Antes de activar el firewall, abra SSH para mantener su conexión:
sudo ufw allow 22/tcpUFW también permite limitar la tasa de conexiones de 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 mitiga los scripts de fuerza bruta sin instalar software adicional.
Si ejecuta un servidor web, permita también HTTP y HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpPermita únicamente lo que ofrece al público. Una base de datos como Postgres en el puerto 5432 casi nunca debe tener una regla de permiso. Vincúlela a 127.0.0.1 para que solo sea accesible localmente. Cada puerto abierto es una entrada que debe defender; mantenga la lista reducida.
También puede generar la secuencia completa de comandos ufw para su servidor aquí, y luego ejecutarlos en orden:
Paso 3: Habilitar y confirmar que esté activo
sudo ufw enableEl sistema advierte que el comando puede interrumpir las conexiones SSH existentes. Debido a que permitió 22/tcp en el paso 2, su sesión se mantiene activa. Confirme el resultado:
sudo ufw status verboseStatus: 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 AnywhereObserve dos elementos aquí. Status: active indica que el firewall está en ejecución. Cada regla aparece dos veces: una en texto plano y otra con (v6), lo que indica que UFW gestiona tanto IPv4 como IPv6. Si las líneas (v6) no aparecen, la parte de IPv6 no está gestionada, lo cual es un problema detallado en el post sobre el firewall de IPv6.
Gestión de reglas posterior
Para ver las reglas con números y poder eliminar una:
sudo ufw status numbered
sudo ufw delete 3Para permitir un puerto solo desde una dirección específica, lo cual es útil para exponer un servicio de administración únicamente a su propia IP:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpEl firewall es solo una capa. Controla qué puede alcanzar un puerto, pero no detiene los ataques de fuerza bruta en un puerto abierto, como SSH. Para ello, añada Fail2ban delante de SSH para bloquear a los atacantes recurrentes. La defensa en profundidad implica que cada capa cubre lo que las demás no pueden.
Un firewall solo es útil cuando se entiende qué son los puertos y cómo escuchan los servicios, y su configuración es un paso esencial en los primeros 10 minutos en un nuevo VPS.
FAQ
¿Al activar UFW se desconectará mi sesión SSH?
No si permite SSH primero. Ejecute sudo ufw allow 22/tcp antes que sudo ufw enable y la conexión se mantendrá porque el firewall ahora permite el puerto 22. El riesgo es activar un firewall con política de denegación por defecto sin una regla que permita SSH, lo que causará la pérdida de acceso. Si esto ocurre, inicie sesión mediante la consola VNC o serial de su proveedor y ejecute ufw disable.
¿Qué puertos debo abrir en un VPS?
Solo los que necesite para el acceso público. SSH (22/tcp) para gestionar el servidor, y HTTP y HTTPS (80/tcp, 443/tcp) si aloja un sitio web. Mantenga todo lo demás denegado. Los servicios internos como las bases de datos deben vincularse a 127.0.0.1 y no deben tener ninguna regla de firewall para que no sean alcanzables desde la red.
¿Gestiona UFW IPv6?
En Ubuntu moderno, sí: IPV6=yes está configurado en /etc/default/ufw, por lo que cada regla se aplica a ambos protocolos y ufw status muestra las reglas de IPv6 con el sufijo (v6). Los posibles errores se explican en la trampa del firewall IPv6.
¿Cómo elimino una regla de UFW?
Ejecute sudo ufw status numbered para listar las reglas con sus números de índice, luego sudo ufw delete N donde N es el número de la regla que desea eliminar. También puede borrar mediante especificación, por ejemplo sudo ufw delete allow 80/tcp.
¿Cómo permito un puerto solo para una dirección IP?
Use una regla from en lugar de una allow simple. Para permitir que solo 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 por defecto, el puerto permanece cerrado para todos hasta que una regla lo abra; por tanto, esta regla from es la única vía de entrada: todo internet permanece bloqueado y solo la dirección especificada tiene acceso. No añada también una regla allow 5432/tcp simple, ya que abriría el puerto a todo el mundo. Esta es la forma más segura de exponer una base de datos o un panel de administración. Confirme el cambio con sudo ufw status verbose, que muestra la dirección de origen junto al puerto.