UFW (Uncomplicated Firewall) es un frontend de línea de comandos que simplifica la gestión de reglas de filtrado de paquetes. Por debajo sigue usando el subsistema netfilter del kernel, hoy en día a través de nftables (o iptables en sistemas más antiguos), pero te abstrae de la sintaxis de ambos. El diseño es deliberado: en lugar de escribir reglas con cadenas, tablas y saltos, describes intenciones en lenguaje casi natural.
La filosofía por defecto de UFW es asimétrica: bloquear todo el tráfico entrante y permitir todo el saliente. Esto tiene sentido operativo. Un servidor que no acepta conexiones que nadie le ha autorizado explícitamente tiene una superficie de ataque mínima, mientras que el tráfico saliente iniciado por los propios procesos del sistema raramente es el vector de ataque inicial, y restringirlo añade fricción sin beneficio proporcional en la mayoría de entornos.
Cuando llega un paquete, UFW lo evalúa contra las reglas en orden. Si ninguna regla lo acepta, la política por defecto (deny incoming) lo descarta silenciosamente. La diferencia entre deny y reject importa: deny tira el paquete sin responder, reject devuelve un ICMP de error. El primero es más habitual porque no confirma al emisor que la máquina existe.
Cuándo usarlo: UFW es la herramienta correcta cuando necesitas un firewall funcional en minutos sin aprender la sintaxis de nftables directamente, en servidores con un conjunto de reglas razonablemente simple, en estaciones de trabajo donde quieres protección básica, o en entornos de desarrollo. Para firewalls con lógica compleja —conjuntos de IPs dinámicos, marcado de paquetes, NAT elaborado— nftables directamente es más adecuado.
Qué se rompe si lo haces mal: el error más costoso es activar UFW en un servidor remoto sin haber permitido SSH antes. En el momento en que ejecutas ufw enable, el firewall empieza a aplicar las reglas actuales. Si SSH no está en esa lista, pierdes el acceso. Algunos proveedores de nube ofrecen consola de emergencia; muchos no. La regla es simple: primero el allow de SSH, luego el enable.
# Instalar UFW si no está presente apt install ufw # Verificar el estado antes de tocar nada ufw status verbose # Establecer las políticas base ufw default deny incoming ufw default allow outgoing # CRÍTICO: permitir SSH antes de activar el firewall # UFW consulta /etc/services para resolver "ssh" → 22/tcp ufw allow ssh # Abrir puertos para un servidor web ufw allow 80,443/tcp # Restringir acceso a PostgreSQL solo desde la red interna # El tráfico del resto del mundo ni siquiera llega al proceso ufw allow from 192.168.1.0/24 to any port 5432 # Solo ahora es seguro activar el firewall ufw enable # Verificar que todo quedó como esperamos ufw status verbose # Si necesitas retirar la regla del puerto 80 más adelante ufw delete allow 80/tcp
La llamada ufw default deny incoming no activa nada todavía — solo escribe la política que se aplicará cuando el firewall esté activo. Por eso el orden importa: configurar primero, activar después.
ufw allow ssh y ufw allow 22/tcp son equivalentes. UFW lee /etc/services para resolver nombres de servicio a números de puerto, igual que harías tú con getent services ssh. Usar el nombre es más legible en auditorías, pero ambos generan la misma regla interna.
La línea ufw allow 80,443/tcp demuestra que puedes agrupar puertos en una sola instrucción. Internamente se crean dos reglas separadas — ufw status verbose te lo mostrará explícitamente. No es sintaxis especial de UFW; simplemente expande la lista.
La regla de PostgreSQL (from 192.168.1.0/24 to any port 5432) merece atención. El to any significa “a cualquier IP local de esta máquina”, útil cuando el servidor tiene varias interfaces. Si solo quisieras permitir conexiones a una IP específica del servidor, reemplazarías any por esa dirección.
ufw status verbose es considerablemente más informativo que ufw status a secas: muestra las políticas por defecto, el estado de cada interfaz y las reglas con su numeración. Esa numeración es la forma más precisa de eliminar reglas cuando tienes varias similares — ufw delete 3 borra la tercera regla de la lista, sin ambigüedad.
Los perfiles en /etc/ufw/applications.d/ permiten definir grupos de puertos con nombre. Por ejemplo, Nginx Full agrupa los puertos 80 y 443 y puedes referenciarte con ufw allow 'Nginx Full'. Si instalas software que incluye su propio perfil UFW, aparecerá en ese directorio y estará disponible como nombre en los comandos.
[Ubuntu] UFW viene instalado y habilitado por defecto en muchas instalaciones de Ubuntu Server. En Debian hay que instalarlo explícitamente con apt install ufw y el estado inicial es inactivo, lo cual es más prudente: te obliga a configurarlo conscientemente antes de activarlo.
N° 94