--- title: "Cómo configurar el firewall UFW en Ubuntu 24.04 y Debian 12" description: "Configura UFW en Ubuntu 24.04 o Debian 12: políticas por defecto, acceso SSH seguro, reglas por puerto e IP, borrado de reglas y registros de tráfico bloqueado." category: "Linux" language: es source: https://cubepath.com/es/docs/linux/como-asegurar-tu-servidor-con-ufw-en-ubuntu-debian updated: 2026-09-25 --- # Cómo configurar el firewall UFW en Ubuntu 24.04 y Debian 12 UFW (Uncomplicated Firewall) es la interfaz sencilla que Ubuntu y Debian ofrecen para gestionar el filtrado de paquetes del kernel sin escribir reglas de iptables o nftables a mano. En esta guía configurarás UFW en un servidor con Ubuntu 24.04 para bloquear todo el tráfico entrante salvo SSH y los servicios que necesites, aprenderás a crear reglas por puerto y por IP de origen, a borrarlas y a revisar los registros. Los comandos son los mismos en Debian 12. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS o Debian 12, por ejemplo un VPS de CubePath. - Un usuario no root con privilegios `sudo`. - Acceso a la consola del servidor desde el panel de CubePath, por si una regla errónea te deja sin SSH. > Importante: el orden de esta guía importa. Permite SSH (paso 3) **antes** de activar UFW (paso 5); si no, cortarás tu propia sesión. ## Paso 1: Instalar UFW y comprobar su estado Ubuntu 24.04 trae UFW instalado pero desactivado. En Debian 12 hay que instalarlo. Ejecuta lo siguiente en ambos casos; si ya está instalado, apt no hará nada: ```bash sudo apt update sudo apt install ufw ``` Comprueba el estado: ```bash sudo ufw status verbose ``` ```output Status: inactive ``` Asegúrate también de que UFW gestionará IPv6. Abre el archivo de configuración por defecto: ```bash sudo nano /etc/default/ufw ``` Comprueba que esta línea tiene el valor `yes`: ```ini IPV6=yes ``` Guarda y cierra el archivo. Con `IPV6=yes`, cada regla que crees se aplicará a IPv4 e IPv6. ## Paso 2: Definir las políticas por defecto Las políticas por defecto deciden qué pasa con el tráfico que no coincide con ninguna regla. La configuración recomendada para un servidor es rechazar todo lo entrante y permitir todo lo saliente: ```bash sudo ufw default deny incoming sudo ufw default allow outgoing ``` ```output Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly) ``` Estas políticas no se aplican hasta que actives UFW en el paso 5. ## Paso 3: Permitir el acceso SSH Permite SSH antes de nada. Si tu servidor escucha en el puerto estándar 22: ```bash sudo ufw allow 22/tcp ``` En lugar de `allow` puedes usar `limit`, que permite la conexión pero bloquea una IP que intente abrir 6 o más conexiones en 30 segundos. Es una defensa útil contra ataques de fuerza bruta: ```bash sudo ufw limit 22/tcp ``` Si cambiaste el puerto de SSH, por ejemplo al 2222, permite ese puerto en su lugar: ```bash sudo ufw limit 2222/tcp ``` Para confirmar en qué puerto escucha realmente SSH, consulta los sockets abiertos: ```bash sudo ss -tlnp | grep ssh ``` ```output LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3)) LISTEN 0 4096 [::]:22 [::]:* users:(("sshd",pid=812,fd=4)) ``` ## Paso 4: Permitir otros servicios Abre solo los puertos que usen tus servicios. Para un servidor web con HTTP y HTTPS: ```bash sudo ufw allow 80/tcp sudo ufw allow 443/tcp ``` Algunos paquetes instalan perfiles de aplicación con sus puertos ya definidos. Lístalos con: ```bash sudo ufw app list ``` ```output Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH ``` Puedes usar el nombre del perfil entre comillas en lugar de los puertos, por ejemplo `sudo ufw allow "Nginx Full"` abre el 80 y el 443. Los perfiles de Nginx solo aparecen si Nginx está instalado. Otros tipos de reglas habituales: Un rango de puertos (hay que indicar el protocolo): ```bash sudo ufw allow 60000:61000/udp ``` Un puerto accesible solo desde una IP concreta, por ejemplo MySQL desde tu servidor de aplicaciones: ```bash sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp ``` Todo el tráfico desde una red privada de confianza: ```bash sudo ufw allow from 10.0.0.0/24 ``` Bloquear por completo una IP que está atacando tu servidor. Usa `insert 1` para que la regla quede por delante de las que permiten tráfico, porque UFW aplica la primera regla que coincide: ```bash sudo ufw insert 1 deny from 198.51.100.23 ``` > Nota: `insert` solo funciona cuando ya existe al menos una regla. Si es la primera, usa `sudo ufw deny from 198.51.100.23`. ## Paso 5: Activar UFW Revisa las reglas que has añadido antes de activarlas: ```bash sudo ufw show added ``` ```output Added user rules (see 'ufw status' for running firewall): ufw limit 22/tcp ufw allow 80/tcp ufw allow 443/tcp ``` Si aparece la regla de SSH, activa el firewall: ```bash sudo ufw enable ``` ```output Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup ``` UFW se activa en el acto y queda habilitado en cada arranque. Sin cerrar tu sesión actual, abre una **segunda** conexión SSH desde otra terminal para confirmar que sigues pudiendo entrar. ## Paso 6: Verificar las reglas Consulta el estado completo: ```bash sudo ufw status verbose ``` ```output Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp LIMIT IN Anywhere 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere 22/tcp (v6) LIMIT IN Anywhere (v6) 80/tcp (v6) ALLOW IN Anywhere (v6) 443/tcp (v6) ALLOW IN Anywhere (v6) ``` Para comprobar desde fuera que un puerto no permitido está bloqueado, ejecuta desde otro equipo: ```bash nc -vz -w 5 your_server_ip 3306 ``` Un puerto bloqueado responde con un `timed out`, mientras que uno permitido con un servicio escuchando devuelve `succeeded`. ## Paso 7: Borrar y modificar reglas Para borrar una regla, lista las reglas numeradas: ```bash sudo ufw status numbered ``` ```output Status: active To Action From -- ------ ---- [ 1] 22/tcp LIMIT IN Anywhere [ 2] 80/tcp ALLOW IN Anywhere [ 3] 443/tcp ALLOW IN Anywhere [ 4] 22/tcp (v6) LIMIT IN Anywhere (v6) [ 5] 80/tcp (v6) ALLOW IN Anywhere (v6) [ 6] 443/tcp (v6) ALLOW IN Anywhere (v6) ``` Borra la regla por su número. UFW pedirá confirmación: ```bash sudo ufw delete 2 ``` Las reglas IPv4 e IPv6 tienen números distintos y los números cambian después de cada borrado, así que vuelve a listar antes de borrar otra. Es más cómodo borrar por la especificación de la regla, que elimina a la vez la versión IPv4 y la IPv6: ```bash sudo ufw delete allow 80/tcp ``` ## Paso 8: Revisar los registros UFW registra los paquetes bloqueados con el nivel `low`, activo por defecto. Si lo desactivaste, vuelve a activarlo: ```bash sudo ufw logging on ``` Los mensajes van al log del kernel con el prefijo `[UFW BLOCK]`. Consulta los más recientes con: ```bash sudo journalctl -k --grep "UFW BLOCK" -n 20 ``` ```output Sep 25 10:41:07 server kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... SRC=198.51.100.23 DST=your_server_ip LEN=44 TOS=0x00 PREC=0x00 TTL=242 ID=54321 PROTO=TCP SPT=51012 DPT=3389 WINDOW=1024 RES=0x00 SYN URGP=0 ``` Si tu sistema tiene rsyslog, los mismos mensajes están también en `/var/log/ufw.log`. `SRC` es la IP de origen y `DPT` el puerto de destino al que intentaban conectar. ## Solución de problemas **Te has quedado sin acceso SSH.** Entra por la consola del servidor desde el panel de CubePath, inicia sesión y permite el puerto correcto con `sudo ufw allow 22/tcp`. Si necesitas volver a empezar, `sudo ufw disable` desactiva el firewall sin borrar las reglas. **Un contenedor Docker es accesible aunque UFW no lo permite.** Docker publica los puertos con sus propias reglas de iptables, que se evalúan antes que las de UFW. Publica los puertos solo en localhost (`127.0.0.1:8080:8080`) y expón el servicio a través de un proxy inverso, o no publiques puertos que no deban ser públicos. **Quieres empezar desde cero.** `sudo ufw reset` desactiva UFW y borra todas las reglas (guarda copias de seguridad en `/etc/ufw/`). Después repite la guía desde el paso 2. ## Conclusión Tu servidor ya rechaza todo el tráfico entrante salvo SSH y los servicios que has permitido de forma explícita, en IPv4 e IPv6. Como siguientes pasos, desactiva el acceso por contraseña en SSH y usa solo claves, instala Fail2ban para bloquear IPs de forma automática tras varios intentos fallidos y, si tu IP tiene protección DDoS Premium, añade reglas en el firewall perimetral de CubePath para filtrar el tráfico antes de que llegue al servidor.