Configuración del servicio dns

En esta sección realizaremos el despliegue del componente que se encarga del servicio DNS y realizaremos la integración con el resto de componentes del sistema. Para ello configuraremos los siguientes plugins:

  • idsapi: se encargará del acceso al registro de servicios de la API luIDS.

  • xlisthole: se encargará de la integración con el sistema de listas xlist y de la lógica de nuestro sumidero DNS.

Recuerde que tiene a su disposición todos los ficheros de configuración de esta guía en https://github.com/luids-io/docs/blob/master/es/modules/guide-basic-dns-sinkhole/examples/.
Este proceso está probado únicamente en un sistema Ubuntu 20.04LTS server. Los binarios están compilados estáticamente y las rutas empleadas son las de una distribución estándar, por lo que el instalador debería funcionar en cualquier distribución.

Instalación del paquete dns

Instalar dns es muy sencillo, basta descargar el instalador ya existente y ejecutarlo.Para ello puede dirigirse a https://github.com/luids-io/dns/releases y descargar la última versión del instalador (fichero installer_linux.sh). También puede simplemente copiar y pegar lo siguiente en una consola de comandos.

DOWNLOAD_URL=$(wget -O - https://api.github.com/repos/luids-io/dns/releases/latest| grep download.*installer | grep -v sha256 | cut -d '"' -f4)
wget ${DOWNLOAD_URL} -O installer_dns.sh
chmod 755 installer_dns.sh
sudo ./installer_dns.sh
Si está instalando el software en una arquitectura diferente a la amd64 (como en el caso de una Raspberry) deberá definirla en una variable de entorno al lanzar el instalador. Ejemplo: sudo ARCH=arm64 ./installer.sh. Las arquitecturas disponibles son: amd64, arm, arm64, mips, mips64, mips64le, ppc64 y s390x.

Configuración de ludns

La configuración del servidor DNS la realizaremos en dos fases. En la primera fase lo pondremos a escuchar en el puerto no estándar 1053 para hacer pruebas y comprobar que funciona correctamente. En la segunda fase, que se verá en el apartado siguiente, haremos los pasos necesarios para ponerlo a escuchar en el puerto estándar y agregar una caché para mejorar el rendimiento del servicio.

Una vez que el servicio xlisthole se encuentra disponible, la configuración del servicio ludns es muy sencilla, basta editar el fichero /etc/luids/dns/Corefile.

Contenido temporal /etc/luids/dns/Corefile
.:1053 {
	idsapi
	xlisthole
	forward . 8.8.8.8 8.8.4.4
}

Iniciaremos el servidor con la nueva configuración.

systemctl start luids-ludns

Y puede comprobar que se ha iniciado correctamente como se ve en el ejemplo siguiente.

# systemctl status luids-ludns
● luids-ludns.service - ludns luIDS service
     Loaded: loaded (/etc/systemd/system/luids-ludns.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-08-17 08:21:57 CEST; 32s ago
   Main PID: 1888 (ludns)
      Tasks: 6 (limit: 1074)
     Memory: 1.9M
     CGroup: /system.slice/luids-ludns.service
             └─1888 /usr/local/bin/ludns -conf /etc/luids/dns/Corefile

ago 17 08:21:57 luids-test systemd[1]: Started ludns luIDS service.
ago 17 08:21:57 luids-test ludns[1888]: .:1053
ago 17 08:21:57 luids-test ludns[1888]: CoreDNS-1.6.9
ago 17 08:21:57 luids-test ludns[1888]: linux/amd64, go1.14.3,

Ahora llevaremos a cabo las pruebas del servicio utilizando para ello el comando dig.

$ dig @localhost +short -p 1053 www.google.com (1)
216.58.211.36
$ head -1 /var/lib/luids/xlist/blocklist.site-malware.xlist (2)
domain,100.1qingdao.com
$ dig @8.8.4.4 +short 100.1qingdao.com (3)
116.255.236.109
$ dig @localhost +short -p 1053 100.1qingdao.com (4)
1 interrogamos al servidor local en puerto 1053 por el dominio www.google.com y obtenemos respuesta.
2 obtenemos el primer dominio listado en la lista de malware
3 consultamos a un servidor DNS de google por la existencia del dominio y nos responde
4 consultamos a nuestro servidor local por el mismo dominio y no obtenemos respuesta

Comprobamos en el log del servicio que se ha generado un nuevo evento de chequeo de lista y que lo ha encontrado en una de las listas, como se muestra a continuación.

# journalctl -u luids-ludns
....
ago 17 08:21:57 luids-test ludns[1888]: linux/amd64, go1.14.3,
ago 17 08:24:02 luids-test ludns[1888]: [INFO] plugin/xlisthole: [::1]:36056 check '100.1qingdao.com' response: true 'found in 'blocklist.site-malware''

Consolidación servicio DNS

Ya tenemos un servidor DNS funcionando pero en un puerto no estándar, así que debemos cambiarlo al puerto que le corresponde. Sin embargo, aquí puede surgir un pequeño problema: puede existir un servidor DNS ya corriendo en dicho puerto.

Esto se debe a que muchas distribuciones optan por poner un pequeño servidor DNS funcionando por defecto para resolver las peticiones locales. Los más habituales son systemd-resolved y dnsmasqd. En el caso de una distribución Ubuntu server 20.04, si comprobamos si hay algún proceso escuchando en el puerto 53, obtenemos el siguiente resultado.

$ sudo ss -lunp | grep :53
UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=564,fd=12))

Podremos desactivar dicho servicio y definir que el resolver local utilice nuestro servicio DNS ejecutando como administrador los siguientes comandos.

## deshabilito systemd-resolved
systemctl disable systemd-resolved.service
systemctl stop systemd-resolved.service

## borro symlink
sudo rm -f /etc/resolv.conf

## creo nuevo resolv.conf que use el servidor dns local
cat >/etc/resolv.conf <<EOF
nameserver 127.0.0.1
options edns0
EOF

Modificaremos la configuración de nuestro servidor DNS con la configuración definitiva.

Contenido de /etc/luids/dns/Corefile
. {
	idsapi
	xlisthole
	cache
	forward . 8.8.8.8 8.8.4.4
}

Reiniciaremos y habilitaremos el servicio al inicio.

sudo systemctl restart luids-ludns
sudo systemctl enable luids-ludns

¡Ya tenemos configurado nuestro sumidero DNS!.