Page cover

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.

Para probar estas configuraciones creamos una máquina virtual ubuntu desktop con un adaptador de red NAT mismamente


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:

Para resetearlo:

Para recargarlo:

Para activarlo:

Para desactivarlo (si fuese necesario):


Comandos Básicos

  • Cambiar reglas a denegar por defecto: Denegar cualquier comunicación entrante o saliente

  • Agregar regla: Permitir el tráfico entrante por el puerto 80 (HTTP):

Ahora, se podria hacer lo mismo con https

  • Denegar regla: Bloquear el tráfico entrante por el puerto 22 (SSH):

  • Eliminar una regla: Primero, lista las reglas numeradas:

    Luego elimina la regla deseada, por ejemplo, la regla número 3:

  • Permitir/denegar por IP: Permitir todo el tráfico desde una IP específica:

    Bloquear una IP específica:

  • Permitir tráfico en una subred: Por ejemplo, para permitir a toda la subred 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:

Recargarmos el firewall:

Si tratamos de acceder a una pagina web, veremos que seguirá fallando, esto es debido al DNS (53) que tampoco esta funcionando, activémoslo:

Ten en cuenta que este comando habilitara las peticiones de salida de DNS, si nuestro servidor fuera el propio DNS deberiamos usar este comando:

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:

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):

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).

  • Dovecot (IMAP/POP3): Usa los puertos 143/tcp (IMAP), 993/tcp (IMAPS), 110/tcp (POP3) y 995/tcp (POP3S).

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:

  • Configura el rango de puertos pasivos en el servidor FTP (por ejemplo, 30000-31000) y permite ese rango:

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:

Bind9 utiliza el puerto 53 en TCP y 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:

Si se muestra un perfil para un servicio, puedes permitirlo con:

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:

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:

Esto es especialmente útil para acceder a paneles de administración o servicios sensibles.

Caso ejemplo: Configuración de UFW para Control de Acceso en una Red

Imaginemos un escenario real donde administramos una red interna y necesitamos controlar el acceso de diferentes usuarios a ciertos servicios dentro de la empresa. Y donde nuestro objetivo es:

  1. Permitir que solo ciertos usuarios (por IP o subred) accedan a un servidor MySQL.

  2. Permitir acceso a un servidor DNS interno solo para clientes internos.

  3. Bloquear el acceso de un usuario específico a un servicio específico (por ejemplo, denegar acceso a un servidor FTP para una IP en particular).

Estos son los dato de la red:

  • La empresa tiene una red local: 192.168.1.0/24

  • Hay un servidor con MySQL (192.168.1.100, puerto 3306) y FTP (192.168.1.100, puerto 21).

  • Hay otro servidor también en BIND9 (DNS) en 192.168.1.200, puerto 53).

  • Un usuario con la IP 192.168.1.50 necesita ser bloqueado para acceder al servidor FTP.

Configuración Paso a Paso

1️⃣ Restringir el acceso a MySQL solo a ciertos usuarios

Por seguridad, MySQL no debe estar accesible desde toda la red. Solo dos máquinas administrativas deben poder conectarse:

  • Administrador 1: 192.168.1.10

  • Administrador 2: 192.168.1.20

🔹 Configuramos UFW en el servidor MySQL (192.168.1.100) para permitir solo estas IPs:

Resultado: Solo los administradores pueden conectarse a MySQL desde sus direcciones IP específicas.


2️⃣ Permitir acceso al servidor DNS solo para clientes internos

El servidor de DNS (192.168.1.200) solo debe atender consultas de la red local (192.168.1.0/24).

🔹 Configuramos UFW en el servidor DNS para aceptar tráfico solo desde la red interna:

Resultado: Solo las máquinas dentro de la red local pueden usar este servidor DNS. Si alguien externo intenta consultar, será bloqueado.


3️⃣ Bloquear acceso al servidor FTP para un usuario específico

El usuario con la IP 192.168.1.50 no debe poder acceder al FTP en 192.168.1.100.

🔹 Configuramos UFW en el servidor FTP (192.168.1.100) para bloquear esta IP:

Resultado: Cualquier otro usuario en la red puede acceder al FTP, pero 192.168.1.50 será bloqueado.


Verificación Final

Para ver todas las reglas aplicadas, ejecutamos:

🔍 Salida esperada (resumida):

Resumen

Última actualización