Trabajando con el firewall de Debian (UFW)

El Firewall sin complicaciones o Uncomplicated Firewall (UFW, por sus siglas en inglés) es una interfaz para iptables, el software que usamos comúnmente para administrar netfilter, que es una función de filtrado incluida en el Kernel de Linux. Dado que la administración de iptables requiere conocimientos avanzados de administración de redes de nivel medio, se desarrollaron para facilitar la tarea, el UFW es uno de ellos y se explicará en este tutorial.

Nota: En este tutorial la interfaz de red enp2s0 y la dirección IP 192.168.0.2/7 fueron usadas como ejemplos. Debe reemplazarlas por las correctas.

Instalando UFW

Para instalar UFW en Debian ejecute:

apt update

apt upgrade

apt install ufw

Para habilitar UFW escriba:

ufw enable

Para deshabilitar UFW escriba:

ufw disable

Si desea realizar una comprobación rápida sobre el estado de su firewall, escriba:

ufw status

Donde:

Status: Informa si el firewall está activo.

To: Muestra el puerto o servicio.

Action: Muestra las políticas

From: Muestra las posibles fuentes de tráfico.

También podemos verificar el estado del firewall en detalle con verbose:

ufw status verbose

Este segundo comando para ver el estado del firewall también mostrará las políticas predeterminadas y la dirección del tráfico.

Además de las pantallas informativas con “ufw status” o “ufw status verbose” podemos imprimir todas las reglas numeradas, si es de ayuda, para administrarlas como veremos más adelante. Para obtener una lista numerada de sus reglas de firewall, escriba:

ufw status numbered

En cualquier etapa podemos restablecer la configuración de UFW a la configuración predeterminada ejecutando:

ufw reset

Cuando reseteamos las reglas UFW nos pide confirmación. Para confirmar presionamos “Y”

Breve introducción a las políticas de firewalls:

Con cada servidor de seguridad podemos determinar una política predeterminada, las redes confidenciales pueden aplicar una política restrictiva que significa denegar o bloquear todo el tráfico, excepto el permitido específicamente. A diferencia de una política restrictiva, un firewall permisivo aceptará todo el tráfico, excepto el bloqueado específicamente.

Por ejemplo, si tenemos un servidor web y no queremos que ese servidor sirva más que un simple sitio web, podemos aplicar una política restrictiva que bloquee todos los puertos excepto los puertos 80 (http) y 443 (https), eso sería una política restrictiva porque, de forma predeterminada, todos los puertos están bloqueados a menos que desbloquee uno específico. Un ejemplo de servidor permisivo sería un servidor desprotegido en el que solo bloqueamos el puerto de inicio de sesión, por ejemplo, un servidor Plesk en el que solo bloqueamos los puertos 443 y 22. Además, podemos usar ufw para forwarding.

Aplicando políticas restrictivas y permisivas con ufw:

Para restringir todo el tráfico entrante por defecto usando ufw, escriba:

ufw default deny incoming

Para hacer lo contrario permitiendo que todo el tráfico entrante, escriba:

ufw default allow incoming

Para bloquear todo el tráfico saliente de nuestra red, la sintaxis es similar, para hacerlo ejecutamos:

ufw default deny outgoing

Para permitir todo el tráfico saliente, reemplazamos “deny” por “allow“, para permitir el tráfico saliente incondicionalmente, escriba:

ufw default allow outgoing

También podemos permitir o denegar el tráfico para interfaces de red específicas, manteniendo diferentes reglas para cada interfaz. Por ejemplo, para bloquear todo el tráfico entrante de mi tarjeta Ethernet:

ufw deny in on enp2s0

Donde:

ufw= Invoca al programa

deny= Define la política

in= Trafico entrante

enp2s0= Mi interfaz ethernet

Ahora, aplicaré una política restrictiva predeterminada para el tráfico entrante y luego permitiré solo los puertos 80 y 22:

ufw default deny incoming

ufw allow 22

ufw allow http

Donde:

El primer comando bloquea todo el tráfico entrante, mientras que el segundo permite las conexiones entrantes al puerto 22 y el tercer comando permite las conexiones entrantes al puerto 80. Tenga en cuenta que ufw nos permite llamar al servicio por su puerto o nombre de servicio predeterminado. Podemos aceptar o denegar conexiones a los puertos 22 o ssh, puerto 80 o http.

El comando ufw status verbose muestra el siguiente resultado:

Todo el tráfico entrante es denegado mientras los dos servicios (22 y 80) permitimos que estén disponibles.

Si deseamos remover una regla específica, tenemos que hacer esto con el parámetro “delete”. Para eliminar nuestra última regla permitiendo el tráfico entrante al puerto http, escribimos:

ufw delete allow http

Comprobamos si el servicio http continúa disponible o fue bloqueado escribiendo:

ufw status verbose:

El puerto 80 ya no aparece como una excepción, siendo el puerto 22 la única.

Puede eliminar una regla invocando la ID numérica proporcionada por el comando “ufw status numbered” mencionado anteriormente, en este caso, eliminaré la política DENY sobre el tráfico entrante a la tarjeta ethernet enp2s0:

ufw delete 1

Este proceso pedirá una confirmación para continuar. Presione “Y”

Además de DENY podemos usar el parámetro REJECT que informará al otro lado que se rechazó la conexión, para rechazar las conexiones a ssh podemos ejecutar:

ufw reject 22

Luego, si alguien intenta acceder a nuestro puerto 22, se le notificará que se rechazó la conexión como se muestra en la siguiente imagen.

En cualquier etapa, podemos verificar las reglas agregadas sobre la configuración predeterminada ejecutando:

ufw show added

Podemos rechazar todas las conexiones mientras permitimos direcciones IP específicas. En el siguiente ejemplo, rechazaré todas las conexiones al puerto 22, excepto la IP 192.168.0.2, que será la única que podrá conectarse:

ufw deny 22

ufw allow from 192.168.0.2

Ahora, si verificamos el estado de ufw, verá que todo el tráfico entrante al puerto 22 está denegado (regla 1) mientras esté permitido para la IP especificada (regla 2)

Podemos limitar los intentos de inicio de sesión para evitar ataques de fuerza bruta estableciendo un límite de ejecución:

ufw limit ssh

Para finalizar este tutorial y aprender a apreciar la generosidad de ufw, recordemos la forma en que podemos negar todo el tráfico, excepto una única IP usando iptables:

iptables -A INPUT -s 192.168.0.2 -j ACCEPT

iptables -A OUTPUT -d 192.168.0.2 -j ACCEPT

iptables -P INPUT DROP

iptables -P OUTPUT DROP

Lo mismo se puede hacer con solo 3 líneas más cortas y simples usando ufw:

ufw default deny incoming

ufw default deny outgoing

ufw allow from 192.168.0.2


Espero que hayas encontrado útil esta introducción acerca de ufw. Para realizar cualquier consulta sobre UFW o cualquier pregunta relacionada con Linux, no dude en ponerse en contacto con nosotros a través de nuestro canal de soporte en https://support.linuxhint.com.


Traducido al español del texto original Working with Debian Firewalls (UFW)

Artículos relacionados:

iptables for beginners

Configure Snort IDS and Create Rules