Securitizando tu red: Pi-Hole (Parte 1)

Escrito por Daniel Olivares

Introducción

Este es el primer artículo de una serie que queremos desplegar para ayudar a securitizar un ambiente de casa o de PyME. Para que, a través de aplicaciones y herramientas Open Source, puedan tener visibilidad y protección de sus equipos y redes.

La primera parte de la serie quiere abarcar una protección muy simple y efectiva frente a la descarga y/o conexión con sitios de malware, y es a través del monitoreo/bloqueo de conexiones a nivel de DNS.

Dentro de una arquitectura interna de seguridad los DNS son una de las plataformas con mayor visibilidad, debido a que procesan todas las consultas de dominio de nuestros equipo y aunque no necesariamente podamos tener el virus (binario) o la comunicación (paquetes) en específico, sí podemos cubrir la gran mayoría de “malwares comunes” con una buena protección de DNS y con listas de malware actualizadas.

Y siguiendo esa línea a continuación explicaremos como realizar la instalación de un servidor DNS interno utilizando PiHole y lo configuraremos para que realice el bloqueo de sitios maliciosos aprovechando el listado disponible en FINSIN y sin más, manos a la obra…

Prerrequisitos

Para instalar PiHole, podemos utilizar cualquier distribución, pero para este tutorial utilizaremos una instalación limpia y actualizada de Ubuntu 22 con acceso a Internet.

Además, tu sistema debe cumplir con los siguientes requisitos mínimos:

  • 1 IP estática.
  • Al menos 1 GB de RAM, pero se recomienda al menos 2 GB de RAM para un uso más intensivo.
  • Un procesador de al menos 1 GHz o superior.
  • Disponer al menos de 16 GB de espacio en disco duro para la instalación y funcionamiento de PiHole.

Paso 1 – Instalación de PiHole

Antes de continuar nos aseguramos que el sistema operativo se encuentre actualizado, para esto ejecutamos el siguiente comando.

sudo apt update && sudo apt upgrade

Una vez actualizado nuestro servidor, procedemos a descargar el script de instalación oficial y lo ejecutamos con los siguientes comandos:

wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh

Recuerda validar el script “basic-install.sh” que sea el que necesitas, para ello puedes ingresar al mismo sitio (haciendo click en el link) y comparar su contenido.

Con esto iniciará el instalador automático de PiHole, donde deberemos seguir las instrucciones que se indican.

Antes de comenzar el instalador nos advertirá que es necesario que el servidor tenga configurada una IP estática. Una vez estemos seguros de esta instalación le damos a “continuar”.

El siguiente paso es seleccionar cuáles serán los servidores DNS públicos que utilizará PiHole para resolver las consultas DNS internas. Para este punto recomendamos utilizar los servidores de Google.

Luego, el instalador nos ofrecerá instalar listas de bloqueo de terceros como punto base. Recomendamos que selecciones “Yes”.

En el siguiente paso nos preguntará si queremos instalar la administración web, a lo que responderemos que “Yes”. Esto facilitará la gestión diaria.

En caso de aceptar la instalación de la interfaz de administración web, el instalador indicará que se necesita instalar el servicio de “web server” con sus respectivas librerías. Seleccionamos “Yes”.

Luego consultará si deseamos activar el registro de consultas. Es recomendable habilitarlo para así tener un registro de las consultas DNS que se realizan dentro de nuestra red.

Si elegimos “Yes” en el paso anterior, ahora nos consultará cual es el nivel de registro que deseamos habilitar. Para este punto recomendamos que se elija “0 – Show everything”.

Con esta última opción comenzará a instalar el servidor de PiHole y una vez termine nos indicará la dirección IP configurada, URL de acceso a la administración web y la contraseña para el usuario “Admin”.

Recuerda anotar la contraseña porque no se volverá a mostrar

Paso 2 – Configuración de Firewall

Una vez instalado PiHole en el servidor, procederemos a configurar correctamente el firewall para protegernos de accesos no deseados. 

UFW

Por defecto Ubuntu 22 trae instalado UFW (Uncomplicated FireWall) el que utilizaremos debido a lo fácil de su configuración. Para comenzar verificamos el estado de UFW con el comando:

ufw status

El cual nos indicará que está inactivo y sin realizar bloqueos.

Acto seguido ingresamos los siguientes comandos para configurar el Firewall:

ufw allow 22
ufw allow 53
ufw allow 80
ufw allow 443

Con esto permitimos las conexiones entrantes de:

  • SSH (22/TCP) para la administración del servidor como tal, 
  • DNS (53/UDP) para que las consultas DNS sean aceptadas,
  • HTTP y HTTPS (80/TCP,443/TCP) para la administración web del servidor.

Una vez habilitados los puertos procedemos a activar el firewall utilizando:

ufw enable

Validamos nuevamente el estado del servicio UFW, lo cual debería mostrar lo siguiente:

En caso de querer desactivar el acceso para IPv6, se deberá editar el archivo default ubicado en /etc/default/ufw modificando el campo IPV6=yes a IPV6=no.

IPTables

En caso de querer utilizar IPtables ingresamos los siguientes comandos:

-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

Paso 3 – Administración WEB

Acceso al portal web

Una vez permitamos el acceso hacía los puertos WEB 80, podremos ingresar a la consola de administración desde nuestro navegador favorito utilizando el link http://<ip-pihole/admin, desde donde veremos el portal de login. Para ingresar utilizaremos la contraseña que aparece al finalizar la instalación.

Una vez ingresemos al portal, lo primero que veremos será el dashboard en donde encontraremos estadísticas de las consultas realizadas como:

  • Número total de consultas DNS realizadas
  • Número de consultas DNS bloqueadas
  • Porcentaje de consultas DNS bloqueadas
  • Número de dominios registrados para bloqueo en el servidor.

Debido a que durante la instalación aceptamos instalar una lista de bloqueo básica nuestro servidor tiene 175.338 dominios bloqueados.

Agregar listas de bloqueo

El siguiente paso será agregar una lista que contenga más dominios que deseamos bloquear en nuestra red, para este caso utilizaremos la lista de IOC de dominios DNS disponible en FINSIN bajo el link https://ioc.finsin.cl/Output_FINSIN_Domain

Para esto debemos ir al menú “Adlist” en la barra lateral izquierda como se muestra en la siguiente imagen.

Luego pegamos la URL de FINSIN en la sección “address” y escribimos un comentario en la sección “Comment” para poder identificar de mejor manera los listados. Una vez estén todos los datos hacemos click en el botón “add”

La lista que agregamos se verá reflejada en la sección de abajo pero aparecerá con un signo de interrogación debido a que aún no se ha descargado este listado. Si hacemos click sobre el símbolo podremos ver las estadísticas de dicha lista.

En este caso veremos que se desconoce el estado de la lista y tampoco se identifica el número de dominios bloqueados por dicha lista.

Para solucionar está situación debemos ir al menú “Update Gravity” bajo la sección “Tools” y hacer click en el botón “Update”, este proceso tomará un par de segundos y no se recomienda cerrar la ventana.

Una vez aparezca el mensaje de “Success!” podremos volver al menú “Adlist” para verificar el estado de la lista que agregamos. Ahora se verá que el signo de interrogación fue reemplazado por un check verde y podremos visualizar también la fecha de última actualización y los dominios que se encuentran bloqueados en dicho listado.

Es importante destacar que el listado se actualizará automáticamente todos los domingos a las 00:00 hrs.

Comprobando nuestro DNS

Una vez agregamos el listado de dominios desde FINSIN, el siguiente paso será validar que nuestro servidor está realizando correctamente los bloqueos.

Para esto nos debemos asegurar que nuestro servidor sea el único DNS configurado, para este laboratorio realizaremos la configuración manual.

Una vez configuramos el servidor DNS principal, ingresamos a https://www.wikipedia.com para validar que se estén registrando las consultas realizadas, revisamos el dashboard principal donde se podrá ver que los gráficos se actualizaron y aparece el registro de la página solicitada.

Ahora sí, validaremos que los dominios publicados bajo la lista de FINSIN están siendo bloqueados. Para esto seleccionamos uno de los dominios al azar del listado e ingresamos a él por navegador al mismo link que agregamos anteriormente: https://ioc.finsin.cl/Output_FINSIN_Domain

Para la prueba usaremos el dominio www[.]microsofe[.]xyz, un claro ejemplo de imitación del dominio microsoft.com. El cual al intentar ingresar nos dice que no se puede resolver el destino.

Y desde el dashboard de PiHole podremos ver que este dominio se encuentra con bloqueo, resultando en un éxito la prueba.

Extra – Configurando nuestro DNS de forma global

Como paso opcional, y con el fin de asegurarnos de que todos los equipos dentro de nuestra red utilicen el servidor DNS de forma automática, realizaremos un cambio en la configuración DHCP del router que nos entrega internet en nuestra red.

Para este tutorial tomaremos como ejemplo un router Movistar y un router TP-Link, pero depende de cada caso el dispositivo que se tiene que modificar.

MOVISTAR

Como primer paso debemos ingresar al portal de configuración web del router, por lo general este se encuentra ingresando a la dirección http://192.168.0.1 o http://192.168.1.1.

Una vez ingresemos debemos dirigirnos a Menú → Red local → Red Local

Una vez ingresemos al menú, debemos cambiar la configuración del servidor DNS de “from_ISP” a “Static”. En el campo de “Servidor DNS1” ingresamos la IP del servidor PiHole, en este caso “172.16.30.5”, y el campo “Servidor DNS2” lo dejamos en blanco.

TP-LINK

Como primer paso debemos ingresar al portal de configuración web del router, por lo general este se encuentra ingresando a la dirección http://192.168.0.1 o http://192.168.1.1.

Una vez ingresemos debemos dirigirnos a Advanced → Network → DHCP Server

Una vez ingresemos al menú, debemos agregar a la configuración del servidor DNS en el campo de “Primary DNS” la IP del servidor PiHole, en este caso “172.16.30.5”, y el campo “Servidor DNS2” lo dejamos en blanco.

Para ambos ejemplos, con esta configuración se logra que cada vez que el router asigne una dirección IP a un equipo, éste tendrá que utilizar por defecto el servidor PiHole.

Es importante destacar que el campo de “DNS secundario” debe quedar en blanco. Esto debido a que si se configura un DNS público el acceso a las páginas se resolverá por éste y se salta los bloqueos de PiHole

Conclusión

La instalación de PiHole es un proceso sencillo y rápido que puede mejorar significativamente la seguridad y privacidad en línea de cualquier dispositivo conectado a la red doméstica o de nuestra PyME funcionando como una herramienta de bloqueo de anuncios y de “seguimiento en línea”, que se ejecuta en un equipo con muy pocos recursos.

Sumado a que se le pueden agregar listas dinámicas de bloqueo que se actualizan constantemente disminuimos significativamente los vectores de acceso de un atacante.

Es importante destacar que FINSIN cuenta con varios listados de indicadores de compromiso (IOC) que están publicados libremente y con Pi-Hole en la red, podrás comenzar a aprovecharlos. 

En los próximos artículos mostraremos cómo integrar otros tipos de IOC como URL, IP y HASH. En el siguiente link podrás encontrarlos todos https://ioc.finsin.cl

4 respuestas a “Securitizando tu red: Pi-Hole (Parte 1)

Add yours

Deje un comentario

Crea una web o blog en WordPress.com

Subir ↑