Un servidor expuesto a internet sin firewall es una invitación abierta. Cada minuto que tu servidor está en línea, bots automatizados escanean puertos, intentan accesos SSH por fuerza bruta y buscan servicios mal configurados. UFW (Uncomplicated Firewall) es la herramienta estándar en Ubuntu y Debian para cerrar todo lo que no necesitas y dejar abierto solo lo indispensable.
En esta guía vas a configurar UFW desde cero con las reglas que todo servidor de producción necesita.
Requisitos previos
Necesitas un servidor con Ubuntu 20.04+ o Debian 11+ y acceso SSH con privilegios sudo. UFW viene preinstalado en Ubuntu; en Debian instálalo con:
sudo apt update && sudo apt install ufw -y
¡Importante!
Antes de habilitar UFW, asegúrate de crear la regla de SSH. Si activas el firewall sin permitir SSH, perderás el acceso al servidor.
Paso 1: Verificar estado actual
sudo ufw status verbose
Si nunca has configurado UFW, verás Status: inactive. Bien — vamos a configurarlo antes de activarlo.
Paso 2: Configurar políticas por defecto
La filosofía correcta de firewall es denegar todo por defecto y permitir solo lo necesario:
# Bloquear todo el tráfico entrante
sudo ufw default deny incoming
# Permitir todo el tráfico saliente
sudo ufw default allow outgoing
Con esto, ningún servicio es accesible desde fuera hasta que tú lo permitas explícitamente.
Paso 3: Permitir SSH (antes de activar)
Esta es la regla más importante. Sin ella, te quedas fuera del servidor:
# SSH en puerto estándar (22)
sudo ufw allow ssh
# O si cambiaste el puerto SSH (recomendado en producción)
sudo ufw allow 2222/tcp comment 'SSH puerto custom'
Buena práctica
Cambiar el puerto SSH del 22 a otro número reduce drásticamente los intentos de fuerza bruta automatizados. No es seguridad real (un escaneo de puertos lo encuentra), pero elimina el 99% del ruido en tus logs.
Paso 4: Activar UFW
Ahora sí, con SSH permitido, activa el firewall:
sudo ufw enable
UFW te advierte que puede interrumpir conexiones SSH. Como ya creaste la regla, confirma con y. Verifica:
sudo ufw status numbered
Deberías ver tu regla de SSH listada.
Paso 5: Agregar reglas para tus servicios
Ahora agrega reglas solo para los servicios que tu servidor necesita exponer. Aquí las más comunes:
Servidor web (HTTP y HTTPS)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
Base de datos PostgreSQL (solo desde IPs específicas)
# NUNCA abras la base de datos a todo internet
# Permite solo desde tu servidor de aplicación
sudo ufw allow from 10.0.1.10 to any port 5432 comment 'PostgreSQL desde app server'
Base de datos MySQL (solo desde IPs específicas)
sudo ufw allow from 10.0.1.10 to any port 3306 comment 'MySQL desde app server'
Redis (solo desde red local)
sudo ufw allow from 10.0.1.0/24 to any port 6379 comment 'Redis desde red interna'
Monitoreo (Zabbix agent)
sudo ufw allow from 10.0.1.5 to any port 10050 comment 'Zabbix agent'
Reglas avanzadas
Permitir un rango de puertos
sudo ufw allow 8000:8100/tcp comment 'Rango de puertos para apps'
Limitar intentos de conexión (rate limiting)
UFW puede limitar las conexiones por IP — útil para proteger SSH sin necesidad de fail2ban:
# Máximo 6 conexiones en 30 segundos por IP
sudo ufw limit ssh comment 'Rate limit SSH'
Si una IP intenta más de 6 conexiones en 30 segundos, UFW la bloquea temporalmente.
Bloquear una IP específica
# Bloquear una IP que está atacando
sudo ufw deny from 203.0.113.50 comment 'IP bloqueada por ataque'
# Bloquear una subred completa
sudo ufw deny from 203.0.113.0/24 comment 'Subred bloqueada'
Permitir tráfico solo por interfaz de red
# Permitir PostgreSQL solo en la interfaz de red interna
sudo ufw allow in on eth1 to any port 5432 comment 'PostgreSQL solo red interna'
Gestionar reglas existentes
Ver reglas numeradas
sudo ufw status numbered
Ejemplo de salida:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere # SSH
[ 2] 80/tcp ALLOW IN Anywhere # HTTP
[ 3] 443/tcp ALLOW IN Anywhere # HTTPS
[ 4] 5432 ALLOW IN 10.0.1.10 # PostgreSQL desde app
Eliminar una regla
# Por número
sudo ufw delete 4
# Por definición
sudo ufw delete allow 80/tcp
Resetear todo
# Borra todas las reglas y desactiva UFW
sudo ufw reset
Configuración completa para un servidor típico
Aquí un ejemplo de configuración completa para un servidor que corre una aplicación web con PostgreSQL, Redis y monitoreo:
#!/bin/bash
# setup-firewall.sh — Configuración de UFW para servidor de producción
set -e
# Reset
sudo ufw --force reset
# Políticas por defecto
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH (cambiar puerto en producción)
sudo ufw limit 22/tcp comment 'SSH con rate limit'
# Web
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# PostgreSQL solo desde app server
sudo ufw allow from 10.0.1.10 to any port 5432 comment 'PostgreSQL'
# Redis solo desde red interna
sudo ufw allow from 10.0.1.0/24 to any port 6379 comment 'Redis'
# Zabbix agent desde servidor de monitoreo
sudo ufw allow from 10.0.1.5 to any port 10050 comment 'Zabbix'
# Activar
sudo ufw --force enable
# Verificar
sudo ufw status verbose
echo "Firewall configurado correctamente."
Guárdalo como script para poder reproducir la configuración en cualquier servidor nuevo.
Verificar que funciona
Después de configurar UFW, verifica desde otra máquina que solo los puertos permitidos estén abiertos:
# Desde otra máquina, escanea los puertos del servidor
nmap -Pn tuservidor.com
Solo deberías ver los puertos que abriste (22, 80, 443). Todo lo demás debería aparecer como filtered.
Siguientes pasos
UFW es tu primera línea de defensa. Para completar la seguridad de tu servidor:
- fail2ban — bloqueo automático de IPs que intentan fuerza bruta contra SSH, Nginx o cualquier servicio
- Hardening SSH — desactivar acceso con contraseña, solo llaves, cambiar puerto y desactivar root login
- Actualizaciones automáticas —
unattended-upgradespara que los parches de seguridad se apliquen solos - Ciberseguridad completa — auditoría profesional, pentesting y hardening basado en CIS benchmarks
Seguridad empresarial
¿Necesitas un hardening profesional de tus servidores?
Auditamos la seguridad de tu infraestructura y aplicamos hardening basado en benchmarks CIS para que tus servidores estén protegidos de verdad.



