Utiliser unbound pour cacher et bloquer des requêtes DNS

J'ai cet objectif mais à cause d'un arret du programm unbound-checkconf à cause du manque de mémoire sur la machine (il met en mémoire toutes les adrresses et vérifie qu'il n'y a pas de ligne en double…), cet outil ne m'a donc pas convenu. Je suis du coup passé avec dnsmasq.

Installation

Nous aurons donc besoin du paquet correspondant :

apt install unbound

Caching

Sécurité

include: “/etc/unbound/unbound.conf.d/*.conf”

use-syslog: yes logfile: /var/log/unbound.log

cache-min-ttl: 3600 cache-max-ttl: 86400

hide-identity: yes hide-version: yes

000tristanprod.free.fr

Blocking

Cette partie concerne le paquet Debian dont la version d'Unbound est supérieure à 1.6.0.

Voici le script qui va permettre de récupérer les domaines que l'on ne souhaite pas résoudre :

nano /etc/unbound/get_dns_blacklists.sh
get_dns_blacklists.sh
#!/bin/sh
 
TMPFILE=$( mktemp get_dns_blacklists-XXXXXXXXX )
trap 'rm -f $TMPFILE; exit 1' EXIT KILL INT QUIT TERM
 
(
 curl -s https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | grep ^0.0.0.0 | awk '{ print $2 }'
 curl -s http://mirror1.malwaredomains.com/files/justdomains
 curl -s http://sysctl.org/cameleon/hosts | grep ^127.0.0.1 | awk '{ print $2 }'
 curl -s https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
 curl -s https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
 curl -s https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
 curl -s https://hosts-file.net/ad_servers.txt | grep ^127.0.0.1 | awk '{ print $2 }'
 curl -s https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt | awk '{ print $1 }'
) | tr -d "\r" | tr 'A-Z' 'a-z' | sed -e 's/\.$//' |
 grep -v -e '^#' | grep '\.' | sort -u |
 while read domain; do
    echo local-zone: \"$domain\" redirect
    echo local-data: \"$domain. A 0.0.0.0\"
done > $TMPFILE
 
mv $TMPFILE /etc/unbound/unbound.conf.d/ad-blacklist.conf
 
/etc/init.d/unbound restart
chmod u+x /etc/unbound/get_dns_blacklists.sh

Ainsi lorsqu'une requête sera adressé au serveur, celui-ci répondra par l'IP 0.0.0.0 soit une absence de résolution.

Automatisons la regénération du fichier de blockage dans une table cron :

crontab -e
* * */7 * * /bin/bash /etc/unbound/get_dns_blacklists.sh

Ainsi le serveur écoute sur le port 53 et prêt à répondre au client.