Permitir o denegar tráfico de red con el firewall UFW en GNU/Linux

Escrito por el .
gnu-linux planeta-codigo software-libre
Comentarios

GNU
Linux

Un cortafuegos o firewall hace que un sistema sea más seguro analizando todo el tráfico de red que se recibe y envía impidiéndolo o permitiéndolo según las reglas que se hayan definido. Aunque los routers con los que nos conectamos a internet también hacen la función de firewall es aconsejable instalar un cortafuegos en cada sistema, sobre todo en sistemas portátiles que podemos conectar a redes WIFI ajenas a las que pueden conectarse al mismo tiempo otros muchos usuarios que desconocemos.

En GNU/Linux un firewall con el que las reglas de tráfico de red se puede definir de forma sencilla es Uncomplicated Firewall o UFW. En la distribución Arch Linux hay que instalar su paquete y habilitarlo para que se inicie con el sistema.

1
# pacman -S ufw
1
2
# systemctl enable ufw.service
# ufw enable

En la wiki de Arch Linux hay una buena página explicativa de su uso.

Instalado y activado hay que definir las reglas de tráfico permitidas. Por defecto, se deniega el tŕafico proveniente de un sistema que no sea el local. Por ejemplo, con el cortafuegos activado para que un servidor web sea accesible desde otro equipo en la misma red o desde internet hay crear una regla que permita todo el tráfico entrante los puertos por defecto 80 para http y 443 para https.

1
2
# ufw allow 80/tcp
# ufw allow 443/tcp

Para permitir acceso al servidor web únicamente desde la red local a la que está conectado el equipo hay que indicar la dirección IP de la red, los casos habituales son 192.168.0.0/24 o 192.168.1.0/24. En vez de usar la directiva allow se puede emplear la directiva deny para denegar el tráfico.

1
2
# ufw allow from 192.168.1.0/24 to any port 80 proto tcp
# ufw allow from 192.168.1.0/24 to any port 443 proto tcp

Definidas algunas reglas se pueden listar y de forma numerada en el caso de querer eliminar alguna.

1
2
# ufw status
# ufw status numbered

Para eliminar reglas hay que hacerlo según su número de la lista anterior.

1
# ufw delete 1

Ciertas aplicaciones usan un puerto conocido como el ejemplo de servidor web en el puerto 443 o 80, SSH en el 22 o descarga y compartición de archivos mediante P2P por Bittorrent que dependiendo de la aplicación se usa uno u otro, en el caso de Transmission es 51413. Sabiendo la aplicación para la que se quiere permitir el tráfico no es necesario conocer su puerto, ufw ya incorpora varias aplicaciones conocidas que se listan y activan con un comando.

1
# ufw app list
1
2
3
# ufw allow Transmission
# ufw allow from 192.168.1.0/24 to any app "WWW"
# ufw allow from 192.168.1.0/24 to any app "WWW Secure"

En el caso de este ejemplo se permite el tráfico para la aplicación Transmission desde cualquier ordenador y a las aplicaciones de servidor web tanto en el puerto seguro como inseguro y en el puerto 8080 que usan algunos servidores de aplicaciones limitando su acceso únicamente desde la red local.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# ufw status
Status: active

To                         Action      From
--                         ------      ----
Transmission               ALLOW       Anywhere                  
8080/tcp                   ALLOW       192.168.1.0/24            
WWW Secure                 ALLOW       192.168.1.0/24            
WWW                        ALLOW       192.168.1.0/24            
Transmission (v6)          ALLOW       Anywhere (v6)

Los comandos anteriores aunque cambiando los valores de los puertos o dirección IP son suficientes para hacer un sistema más seguro no permitiendo tráfico de red y evitando que se puedan establecer conexiones desde otro sistema en la misma red de área local a ciertos puertos de red abiertos sin ser conscientes de que los están.

En algunos casos como usando una Raspberry Pi sin interfaz gráfica para minimizar el consumo de recursos es necesario conocer o consultar los comandos de ufw.

Referencia: