Curso Gratuito Linux – Como configurar (muy) fácilmente nuestro firewall con UFW

Configurar Firewall en Debian

Hoy en nuestro Curso Gratuito Linux vamos a aprender a configurar nuestro firewall con UFW.

UFW, Uncomplicated Firewall (firewall sin complicaciones) nos va a permitir configurar iptables de una manera muy amigable, y voy a tratar de explicarlo de una manera sencilla (espero que me salga).

Antes de continuar, quisiera aclarar que UFW NO ES UN FIREWALL, sino una interfaz para configurar iptables. También existe una interfaz gráfica para UFW llamada GUFW, pero hoy día nos vamos a centrar en la línea de comandos dado que, seguramente nuestros servidores no van a tener un entorno de escritorio configurado.

¡Empecemos!, vamos a ingresar como el super usuario root, y vamos a, en primer lugar, verificar que NO tenemos ninguna regla en nuestro firewall, con el comando iptables -L

Configuracon Firewall en Debian
Estado iptables antes de la configuración con UFW

Como vemos en la imagen, NO hay ninguna regla configurada, por lo que nuestro servidor se encontraría sin ningún tipo de protección frente a ataques externos.

Si, desde otro equipo, hacemos un escaneo con nmap (ya aprenderemos como se utiliza) de puertos a nuestro equipo, el que venimos utilizando a lo largo de los post, encontraremos algo como esto.

estado puertos antes de configurar firewall
Puertos visibles antes de la configuración del firewall

En la lista vemos que tenemos abiertos varios puertos tcp visibles/abiertos, como el 22 para el ssh (conexión remota), 111 rpcbind (mapeador de direcciones a números de programas RPC, no nos compliquemos por ahora), y los puertos 139 y 445 que están relacionados con samba (¿recuerdan cuando nos conectamos a un entorno windows?).

¡Manos a la obra!, vamos a instalar ufw con el comando aptitude install ufw

resultado del comando aptitude install ufw
Instalación de UFW en Debian

Obviamente vamos a aceptar todo lo expuesto.

Bueno, ya tenemos instalado nuestro frontend ufw y estamos listos para comenzar a «segurizar» nuestro sistema.

Como buena práctica, y si bien pueden afirmar (y con razón) que hay que ser mas específico en lugar de ser genérico, aconsejo BLOQUEAR todo lo entrante y PERMITIR todo lo saliente, y a partir de este configuración, empezar a ABRIR los puertos para los servicios que necesitamos.

Dicho esto, vamos a ejecutar los comandos necesarios.

Vamos a BLOQUEAR TODO LO ENTRANTE a nuestro sistema con el comando ufw default deny incoming

Vamos a PERMITIR TODO LO SALIENTE con el comando ufw default allow outgoing

configuración por defecto con ufw
Reglas por defecto y chequeo de éstas

Arriba vemos que hemos agregado el bloqueo para lo entrante, liberado lo saliente, chequeado el estatus de ufw, que aún esta desactivado, y el status de iptables donde todavía no vemos ninguna regla aplicada.

Vamos a activar ufw con el comando ufw enable y a continuación vamos a comprobar el estado de nuestras reglas de iptables con el comando iptables -L 

estados reglas iptables
Estado de las reglas luego de aplicar la configuración

Bueno, como pueden ver, la cosa ha cambiado… Aclaro que ejecute iptables -L | more para poder «paginar» y capturar las primeras líneas, cuando Uds. lo ejecuten en vuestro sistema pueden ejecutar simplemente iptables -L

Veamos ahora que pasa si repetimos nuestro escaneo de puertos

puertos no visibles por bloqueo de firewall
Resultado del escaneo luego de aplicar la configuracion

No hay mucho para aclarar… no vemos ningún puerto abierto.

Todo esto es muy lindo si queremos tener un servidor que no preste servicios, que obviamente no será nunca nuestro caso.

Para ello, vamos a comenzar a habilitar aquellos servicios/puertos/aplicaciones necesarias.

En nuestro escenario vamos a habilitar el servicio de ssh para poder conectarnos desde un servidor remoto, con el comando ufw allow ssh

habilitación de puerto 22
Habilitación del puerto para SSH (22)

Y nuevamente vamos a hacer el escaneo de puertos…

resultado escaneo con puerto habilitado
Resultado del escaneo de puertos luego de habilitar el puerto de SSH (22)

Obviamente, vemos el puerto «abierto», y, si verificamos el estado con el comando ufw status verbose

estado configuracion firewall
Estado de la configuración del firewall

Ahora bien, puede ocurrir (y es lo mas probable) que deseamos que se puedan conectar únicamente desde una red específica o bien desde un equipo/ip específico. Para ello vamos a ejecutar el comando ufw allow from [red] to [ip] app ssh. En el caso de mi escenario, sería ufw allow from 192.168.2.0/24 to 127.0.0.1 app ssh

restricción a una red específica
Restringiendo el acceso a una red específica

Lo que debemos hacer, es eliminar la regla anteriormente creada donde le permitíamos a todo el mundo ingresar por ssh con el comando ufw delete allow ssh

restricción acceso desde otros sitios
Borrado del ingreso desde cualquier lugar al puerto SSH (22)

Ahora sí está correctamente configurado, desde ningún otro equipo que no se encuentre en la red especificada podrá conectarse a nuestro servidor.

Si queremos eliminar TODAS las reglas del firewall, ejecutaremos ufw reset

borrado de todas las reglas
Borrado de todas las reglas

 

De esta manera, todas las reglas se eliminan volviendo a la configuración default que hicimos al principio, es decir, permitir lo saliente… bloquear lo entrante.

reglas default activas
Sin reglas específicas, se aplican las default

 

Si queremos desactivar por completo, ejecutaremos ufw disable

desactivando firewall
Desactivando por completo el firewall

Y si escaneamos…

firewall desactivado
Resultado del escaneo de puertos luego de desactivar el firewall

… nos encontramos con que estamos como empezamos.

Este es una breve explicación, debemos saber que podemos bloquear o habilitar no solo por el nombre de la aplicación sino también por el puerto y protocolo, por ejemplo si queremos habilitar el puerto 25 smtp, ingresaremos ufw allow 25/tcp, si queremos habilitar un rango de puertos tcp, podriamos ingresar ufw allow 25:110/tcp

Si queremos obtener una lista de las aplicaciones/servicios, podemos tipear ufw app list

Recuerden siempre consultar las páginas del manual con man ufw

Espero que les sea útil y no dejen de compartir!

Eduardo

Deja una respuesta