From fe92817d7d4459a01fcaeb850495e9723c286d92 Mon Sep 17 00:00:00 2001 From: jdubois Date: Tue, 22 Sep 2020 10:31:13 +0200 Subject: [PATCH] =?UTF-8?q?Bloquer=20des=20domaines=20ind=C3=A9sirables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoUnbound.md | 75 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/HowtoUnbound.md b/HowtoUnbound.md index fa2a7cdd..f0e68450 100644 --- a/HowtoUnbound.md +++ b/HowtoUnbound.md @@ -159,6 +159,81 @@ statistics-interval: 300 Voir [HowtoBind#dnstop]() +## Bloquer des domaines indésirables + +Unbound peut être utilisé pour renvoyer une réponse `NXDOMAIN` pour des domaines spécifiques. + +Le script [unbound-adblock](https://www.geoghegan.ca/unbound-adblock.html) est un script personnalisable, qui se lance périodiquement, et qui permet de bloquer les publicités et autres domaines indésirables à partir de sources URL de fichiers `hosts`, que le script parse et rend compatible au format d'unbound. + +### Installation de unbound-adblock + +Sous Debian ou OpenBSD : + +* Avoir unbound configuré et fonctionnel en tant que serveur DNS récursif local +* Télécharger le script : `wget https://geoghegan.ca/pub/unbound-adblock/0.4/unbound-adblock.sh` +* Créer un utilisateur "_adblock" : ` useradd -s /sbin/nologin _adblock` +* Installer le script avec les permissions appropriées : `install -m 755 -o root -g bin unbound-adblock.sh /usr/local/bin/unbound-adblock.sh` +* Créer le fichier "/etc/unbound/adblock.conf" : + * Sous Debian : `install -m 640 -o _adblock /dev/null /etc/unbound/adblock.conf` + * Sous OpenBSD : `install -m 640 -o _adblock -g wheel /dev/null /var/unbound/etc/adblock.conf` +* Donner les permissions nécessaires à l'utilisateur "_adblock" : + * Sous Debian avec `visudo` : `_adblock ALL=(root) NOPASSWD: /bin/systemctl restart unbound` + * Sous OpenBSD en éditant `/etc/doas.conf` : `permit nopass _adblock cmd rcctl args reload unbound` +* Ajouter l'inclusion de la configuration dans "unbound.conf" (**avant** la section de forward s'il en existe une) : `include: /etc/unbound/adblock.conf` +* Éditer la crontab de l'utilisateur "_adblock" pour lancer quotidiennement le script, avec `crontab -u _adblock -e` : + * Sous Debian : `@midnight /bin/sh /usr/local/bin/unbound-adblock.sh -linux` + * Sous OpenBSD : `@midnight /bin/sh /usr/local/bin/unbound-adblock.sh` +* Lancer une première fois le script manuellement : + * Sous Debian : `sudo -u _adblock sh /usr/local/bin/unbound-adblock.sh -linux` + * Sous OpenBSD : `doas -u _adblock sh /usr/local/bin/unbound-adblock.sh` + +### Configuration supplémentaire optionnelle sous OpenBSD + +Google impose l'utilisation de ses propres serveurs DNS dans de nombreuses applications et services. De nombreux appareils utilisent également des DNS Google codés en dur et qui ne peuvent pas être modifiés. + +Il est possible de contourner ça avec [HowtoOpenBSD/PacketFilter]() en rajoutant la règle suivante dans `/etc/pf.conf` pour forcer l'utilisation de notre résolveur DNS : + +~ +# Remplacer $adblock_server par l'adresse IP de la machine qui heberge le service unbound +pass in quick to {8.8.8.8, 8.8.4.4} rdr-to $adblock_server + +# Ou, de façon plus globale +pass in quick proto {tcp udp} to port 53 rdr-to $adblock_server +~ + +Puis recharger la configuration : `# pfctl -f /etc/pf.conf`. + +### Liste de sources de fichiers hosts + +Les listes doivent obligatoirement être dans un format de fichier `hosts` pour fonctionner. + +Par défaut, l'URL est fournie comme seule source. +Des versions plus complètes provenant du même projet peuvent être trouvées sur le README du github (bloquant par exemple tous les réseaux sociaux, les sites de fake news, …) : . + +L'URL peut être rajoutée comme seconde source, plus complète et plus agressive. + +### Whitelister des domaines bloqués + +Si un domaine présent dans une des listes a besoin d'être autorisé, il peut être whitelisté. Pour cela, il faut éditer le script, et ajouter dans la fonction whitelist(), à l'intérieur du grep, le domaine en question : + +~ +whitelist() { + grep -E -v 'example\.com|example\.org' +} +~ + +Attention : Il ne faut pas ajouter une commande grep mais bien ajouter le domaine à la liste actuelle. Une nouvelle commande grep ne sera pas prise en compte. + +### Bloquer des domaines personnalisés + +Il est tout à fait possible de bloquer n'importe quel domaine souhaité sans forcément utiliser le script ci-dessus, ou même en complément du script. + +Pour cela, il suffit d'ajouter un autre fichier de configuration à inclure à `unbound.conf`, et d'y ajouter manuellement les entrées à bloquer souhaitées, en respectant ce format, avec un domaine par ligne : + +~ +local-zone: "example.com" always_nxdomain +~ + ## FAQ ### Vider le cache pour un domaine particulier