Configuración del servicio dns

En esta sección realizaremos el despliegue del del sistema caché de resoluciones, del servidor DNS y realizaremos la integración con el resto de componentes del sistema.

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-whitehole-nfqueue/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 resolvcache

Para este servicio no hay que hacer ninguna configuración, ya que la configuración por defecto es suficiente.

Iniciaremos y habilitaremos el servicio.

sudo systemctl start luids-resolvcache
sudo systemctl enable luids-resolvcache

Publicación de los servicios de caché

Con el servidor de caché ya configurado, publicaremos los servicios en apiservices.json para que el resto de servicios los puedan utilizar.

Contenido de /etc/luids/apiservices.json
[
  {
    "id": "xlist-whitelist",
    "api": "luids.xlist.v1.Check",
    "endpoint": "tcp://127.0.0.1:5801"
  },
  {
    "id": "resolvcache",
    "api": "luids.dnsutil.v1.ResolvCollect",
    "endpoint": "tcp://127.0.0.1:5891"
  },
  {
    "id": "resolvcheck",
    "api": "luids.dnsutil.v1.ResolvCheck",
    "endpoint": "tcp://127.0.0.1:5891",
    "cache": true,
    "opts": { "ttl": 60, "negativettl": 10 }
  }
]
Se introduce una caché en el cliente de resolución para optimizar las consultas.

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 {
    service xlist-whitelist
    listed-domain dns=return,log=false
    unlisted-domain dns=nxdomain,log=true
  }
  resolvcache
  cache
  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-12-28 16:04:09 CET; 13s ago
   Main PID: 1467 (ludns)
      Tasks: 6 (limit: 2281)
     Memory: 2.1M
     CGroup: /system.slice/luids-ludns.service
             └─1467 /usr/local/bin/ludns -conf /etc/luids/dns/Corefile

dic 28 16:04:09 luids-router systemd[1]: Started ludns luIDS service.
dic 28 16:04:09 luids-router ludns[1467]: .:1053
dic 28 16:04:09 luids-router ludns[1467]: CoreDNS-1.7.0
dic 28 16:04:09 luids-router ludns[1467]: linux/amd64, go1.14.3,

Para poder probar, agregaremos a alguna de nuestras listas información. Como administradores podemos ejecutar lo siguiente.

cd /var/lib/luids/xlist/local
echo "domain,sub,archive.ubuntu.com" >>software-updates.xlist
echo "domain,sub,security.ubuntu.com" >>software-updates.xlist
echo "domain,sub,archive.canonical.com" >>software-updates.xlist
echo "domain,plain,ntp.ubuntu.com" >>software-updates.xlist

Ahora, transcurridos unos segundos, llevaremos a cabo las pruebas del servicio utilizando para ello el comando dig.

$ dig @localhost +short -p 1053 www.google.com (1)
$ dig @localhost +short -p 1053 ntp.ubuntu.com (2)
91.189.89.198
91.189.89.199
91.189.91.157
91.189.94.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

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 28 16:18:46 luids-router ludns[1671]: [INFO] plugin/xlisthole: [::1]:40013 check 'www.google.com' response: false
 ''

También comprobaremos que se está almacenando las consultas en la caché.

# cat /var/lib/luids/dns/cache-trace.log
20201228161848,collect,127.0.0.1:42496,::1,ntp.ubuntu.com,91.189.89.198,91.189.89.199,91.189.91.157,91.189.94.4,

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 {
    service xlist-whitelist
    exclude 127.0.0.0/8
    listed-domain dns=return,log=false
    unlisted-domain dns=nxdomain,log=true
  }
  resolvcache
  cache
  forward . 8.8.8.8 8.8.4.4
}
Podemos agregar a la directiva exclude a todas las direcciones de red que queramos excluir del sumidero.

Reiniciaremos y habilitaremos el servicio al inicio.

systemctl restart luids-ludns
systemctl enable luids-ludns

Ya tenemos configurado la caché de resoluciones y nuestro sumidero DNS