UFW (uncomplicated firewall)
UFW es una herramienta de configuración de cortafuegos (firewall) sencilla y amigable para el usuario, diseñada para facilitar la administración de iptables en sistemas Linux. Permite definir reglas para permitir o bloquear el tráfico de red de forma sencilla.
UFW es una herramienta poderosa y sencilla para administrar un cortafuegos en Ubuntu. Esta guía es un punto de partida; según tu infraestructura, podrás ir refinando las reglas y aplicando medidas adicionales de seguridad. ¡Buena configuración!
Conceptos Básicos
Reglas de entrada y salida: Por defecto, UFW bloquea o permite conexiones entrantes o salientes según la configuración inicial. Lo habitual es permitir todas las conexiones salientes y restringir las entrantes.
Reglas por puerto y protocolo: Se pueden definir reglas específicas para puertos (por ejemplo, TCP o UDP).
Reglas por dirección IP o rango: Puedes permitir o bloquear tráfico de direcciones o subredes específicas.
Orden de las reglas: UFW evalúa las reglas en orden, por lo que las reglas más específicas deben agregarse antes de las generales.
Instalación y Activación
Instalación
En la mayoría de las distribuciones Ubuntu, UFW viene preinstalado y activado pero si no fuera así, siempre puedes instalarlo con:
sudo apt update
sudo apt install ufw
Estado inicial y activación
Para ver el estado de UFW:
sudo ufw status verbose
Para resetearlo:
sudo ufw reset
Para recargarlo:
sudo ufw reload
Para activarlo:
sudo ufw enable
Para desactivarlo (si fuese necesario):
sudo ufw disable
Comandos Básicos
Cambiar reglas a denegar por defecto: Denegar cualquier comunicación entrante o saliente
sudo ufw default deny incoming sudo ufw default deny outgoing
Agregar regla: Permitir el tráfico entrante por el puerto 80 (HTTP):
sudo ufw allow 80/tcp sudo ufw allow out http sudo ufw allow in http
Ahora, se podria hacer lo mismo con https
Denegar regla: Bloquear el tráfico entrante por el puerto 22 (SSH):
sudo ufw deny 22/tcp
Eliminar una regla: Primero, lista las reglas numeradas:
sudo ufw status numbered
Luego elimina la regla deseada, por ejemplo, la regla número 3:
sudo ufw delete 3
Permitir/denegar por IP: Permitir todo el tráfico desde una IP específica:
sudo ufw allow from 192.168.1.100
Bloquear una IP específica:
sudo ufw deny from 10.0.0.5
Permitir tráfico en una subred: Por ejemplo, para permitir a toda la subred 192.168.1.0/24:
sudo ufw allow from 192.168.1.0/24
Ejemplos con Servicios
A continuación se muestran ejemplos de reglas UFW teniendo en cuenta la presencia de diversos servicios:
Caso práctico 1: Aplicaciones web
Porbamos a permitir los puertos comunes:
HTTP (80/tcp)
HTTPS (443/tcp)
Permitir ambos puertos:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Recargarmos el firewall:
sudo ufw reload
Si tratamos de acceder a una pagina web, veremos que seguirá fallando, esto es debido al DNS (53) que tampoco esta funcionando, activémoslo:
sudo ufw allow out 53
Deberíamos recuperar el acceso ahora si teníamos configurada una política de negación total.
Caso práctico 2: Docker
Docker, por defecto, crea sus propias reglas iptables, lo que puede interferir con UFW, por eso es interesante, algunas recomendaciones:
Configura Docker para que no altere las reglas iptables automáticamente modificando el archivo
/etc/docker/daemon.json
(agrega"iptables": false
) y administra las reglas manualmente.Permite los puertos de los contenedores que deseas exponer. Por ejemplo, si tienes un contenedor en el puerto 8080:
sudo ufw allow 8080/tcp
Caso práctico 3: MySQL
MySQL utiliza por defecto el puerto 3306/tcp. Si deseas permitir conexiones externas (solo si es necesario y de fuentes confiables):
sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp
Esta regla permite que solo la subred 192.168.1.0/24 se conecte a MySQL, lo cual es más seguro que permitir acceso global.
Caso práctico 4: Postfix y Dovecot (Correo)
Postfix (SMTP): Usa el puerto 25/tcp (además de 587 para envío seguro o 465 para SMTPS).
sudo ufw allow 25/tcp sudo ufw allow 587/tcp
Dovecot (IMAP/POP3): Usa los puertos 143/tcp (IMAP), 993/tcp (IMAPS), 110/tcp (POP3) y 995/tcp (POP3S).
sudo ufw allow 143/tcp sudo ufw allow 993/tcp sudo ufw allow 110/tcp sudo ufw allow 995/tcp
Caso práctico 5: FTP
FTP tradicional utiliza el puerto 21/tcp, pero también puede requerir una configuración para los puertos pasivos:
Permitir el puerto FTP:
sudo ufw allow 21/tcp
Configura el rango de puertos pasivos en el servidor FTP (por ejemplo, 30000-31000) y permite ese rango:
sudo ufw allow 30000:31000/tcp
Caso práctico 6: ISC DHCP y Bind9 (DNS)
El servidor DHCP utiliza varios puertos y protocolos (normalmente UDP 67 y 68). En un servidor DHCP:
sudo ufw allow 67/udp
sudo ufw allow 68/udp
Bind9 utiliza el puerto 53 en TCP y UDP:
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
Ten en cuenta que normalmente estos servicios se utilizan en redes locales y no se exponen a Internet.
Consejos Avanzados
Uso de perfiles de aplicaciones
UFW permite gestionar reglas mediante perfiles predefinidos de aplicaciones, para ver los perfiles disponibles:
sudo ufw app list
Si se muestra un perfil para un servicio, puedes permitirlo con:
sudo ufw allow "OpenSSH"
Estos perfiles suelen incluir las reglas necesarias para los puertos requeridos por el servicio, por ejemplo, con OpenSSH negaremos el servicio por SSH.
Registro y monitoreo
Habilita el registro para monitorear la actividad:
sudo ufw logging on
Los registros se almacenan en /var/log/ufw.log
, lo que facilita identificar intentos de acceso no autorizados.
Reglas específicas por dirección y protocolo
Si necesitas reglas más específicas, por ejemplo, permitir solo conexiones seguras desde una IP determinada:
sudo ufw allow from 203.0.113.5 to any port 443 proto tcp
Esto es especialmente útil para acceder a paneles de administración o servicios sensibles.
Resumen

Última actualización