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
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.
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
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
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
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
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
Y nuevamente vamos a hacer el escaneo de puertos…
Obviamente, vemos el puerto «abierto», y, si verificamos el estado con el comando ufw status verbose
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
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
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
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.
Si queremos desactivar por completo, ejecutaremos ufw disable
Y si escaneamos…
… 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