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.

  • idsevent: se encargará de la integración con el sistema de eventos.

  • resolvarchive: se encargará de almacenar en el archivo las peticiones de resolución.

  • 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-advanced-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.

Una vez hecho esto, 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
  idsevent {
    service event-notify
    waitdups 200
  }
  resolvarchive {
    service dnsutil-archive
    server-ip 192.168.0.254
  }
  xlisthole {
    service xlist-check
    listed-domain merge log=true,dns=nxdomain
    unlisted-domain log=false,dns=check
    listed-cname merge log=true,dns=nxdomain
    listed-ip merge log=true,dns=nxdomain
    #on-error log=true,dns=return
  }
  cache
  forward . 8.8.8.8 8.8.4.4
}

Hay que iniciar el servidor.

systemctl start luids-ludns

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

# dig @localhost +short -p 1053 www.google.com (1)
216.58.215.132
# 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 resonde
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
...
dic 21 07:42:15 luids-router ludns[14335]: linux/amd64, go1.14.3,
dic 21 07:43:54 luids-router ludns[14335]: [INFO] plugin/xlisthole: [::1]:50797 check '100.1qingdao.com' response: true
'domain-malware: found in 'blocklist.site-malware''

También podemos comprobar en nuestra interfaz de archivado el nuevo evento producido junto con las resoluciones realizadas.

archiveui-events
Figura 1. Listado de eventos en archiveui

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

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.

Modificaremos la configuración del servidor DNS con la configuración definitiva, eliminando la escucha en el puerto 1053 para pasar a escuchar en el puerto por defecto.

sed -i 's/:1053//g' /etc/luids/dns/Corefile

Reiniciaremos y habilitaremos el servicio al inicio.

systemctl restart luids-ludns
systemctl enable luids-ludns

¡Ya tenemos configurado nuestro sumidero DNS!.