Blocky : un ad-blocker léger pour votre NAS Synology
Sommaire
I. Présentation
Vous avez un NAS Synology et vous cherchez une solution légère pour bloquer les publicités et les sites malveillants sur tous les appareils de votre réseau ? Vous devriez regarder du côté de Blocky, une application qui remplie parfaitement cette mission.
Cette solution écrite en Go, déjà présentée dans un autre article, représente une alternative à des solutions populaires comme Pi-Hole et AdGuard Home. Elle se configure à partir d'un fichier de configuration YAML et peut filtrer les requêtes DNS des clients de votre réseau via la technique DNS sinkhole (DNS menteur).
Elle mise avant tout sur la simplicité et l'efficacité : peu de ressources consommées, pour de très bonnes performances. Son principal point négatif, c'est qu'il n'y a pas d'interface web pour la configuration ou le reporting. Mais, après tout, cela n'est pas si grave si vous n'êtes pas allergique aux fichiers de configuration au format texte.
Dans ce tutoriel, nous verrons comment déployer Blocky sur un NAS Synology à l'aide de Container Manager (Docker).
II. Créer le container Blocky
À partir de l'interface de DSM, créez un nouveau répertoire dédié au projet Blocky dans le partage docker. Créez l'arborescence suivante :
- docker
- blocky
- config
- blocky
Dans le dossier config, vous devez créer (ou déposer) le fichier de configuration config.yml de l'application.

Voici un exemple de configuration (similaire à celle présentée dans l'autre article Blocky, mais légèrement ajustée), que vous pouvez utiliser :
# Serveurs DNS en amont pour la résolution de noms
upstreams:
groups:
default:
# DNS over HTTPS upstreams
- https://cloudflare-dns.com/dns-query
- https://dns.google/dns-query
- https://dns.quad9.net/dns-query
# Selectionner les deux serveurs upstreams les plus rapides
strategy: parallel_best
timeout: 2s
# Connectivité IPv4 uniquement (nécessaire pour Docker), sinon : v6, dual
connectIPVersion: v4
# Redirecteur conditionnel pour le domaine local
# Résoudre it-connect.local via le serveur 192.168.14.201
conditional:
mapping:
it-connect.local: 192.168.14.201
# Déclarer les listes, ici des "denylists" = liste de blocage
# ads : liste de Steven Black pour les publicités
# porn : liste de Steven Black pour la pornographie
blocking:
denylists:
ads:
- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
porn:
- https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn-only/hosts
# Groupes de clients
# Groupe par défaut, appliquer la liste "ads"
# Groupe avec l'adresse IP 192.168.14.100, appliquer les listes "ads" et "porn"
clientGroupsBlock:
default:
- ads
192.168.14.100:
- ads
- porn
# Bloquer en retournant 0.0.0.0 comme IP
blockType: zeroIp
blockTTL: 1m
loading:
refreshPeriod: 6h
downloads:
timeout: 60s
attempts: 5
cooldown: 10s
concurrency: 16
# Répondre aux requêtes DNS dès le démarrage
strategy: fast
maxErrorsPerSource: 5
# Précharger les requêtes DNS populaires
# Pendant 24h (prefectExpires), à partir de 3 requêtes sur un nom (prefectTheshold)
# maxItemsCount - Limiter à 500 éléments en cache (utile pour limiter la consommation en RAM, sinon 0 pour illimité)
# prefetchMaxItemsCount - Limiter à 500 éléments à précharger (requêtes "hot")
caching:
maxItemsCount: 500
prefetching: true
prefetchExpires: 24h
prefetchThreshold: 3
prefetchMaxItemsCount: 500
# Résoudre les noms des serveurs upstreams
bootstrapDns:
- https://8.8.8.8/dns-query
# Log du service Blocky
# Journaliser les erreurs uniquement, par défaut "info"
log:
level: error
Cette configuration va notamment :
- Résoudre les noms DNS en utilisant le protocole DNS-over-HTTPS grâce aux serveurs déclarés sous
upstreams. - Bloquer les publicités + les malwares pour tous les clients en utilisant les données de la liste de Steven Black
- Bloquer les publicités + les malwares + les sites pornographiques uniquement pour le client avec l'adresse IP 192.168.14.100 (vous pouvez mettre une adresse réseau)
Ensuite, à l'aide de Container Manager, vous devez créer un nouveau projet.
Nommez ce projet "blocky", sélectionnez le chemin "/docker/blocky" puis choisissez l'option "Créer un fichier docker-compose.yml".

Précisez le code suivant :
services:
blocky:
image: spx01/blocky
container_name: blocky
restart: unless-stopped
hostname: it-connect-blocky
ports:
- "53:53/tcp"
- "53:53/udp"
environment:
- TZ=Europe/Paris
volumes:
- /volume1/docker/blocky/config/config.yml:/app/config.yml
Ce conteneur va utiliser l'image spx01/blocky et il sera en écoute sur le port 53, correspondant au DNS par défaut. Le fichier de configuration précédemment créé sera mappé dans le container.
Poursuivez jusqu'à la fin et lancez la création du projet... Vous obtenez un projet avec un seul conteneur, comme le montre l'image ci-dessous.

Le déploiement de Blocky s'arrête là, puisqu'il n'y a pas d'interface web. La suite consiste à tester l'efficacité de Blocky.
III. Vérifier le fonctionnement de Blocky
Vous devez utiliser votre NAS comme serveur DNS, et c'est l'application Blocky qui va traiter les requêtes DNS de votre appareil. Avant d'envisager une modification de votre serveur DHCP (que ce soit sur votre box ou ailleurs) pour distribuer l'adresse IP du NAS comme DNS, testez sur un seul équipement. Pour cela, modifiez l'adresse IP du serveur DNS dans les paramètres de la carte réseau.

Quand c'est fait, naviguez sur Internet ! En principe, les publicités ne doivent plus se charger ! Elles doivent laisser place à des encarts vides ou blancs, puisque Blocky va bloquer les requêtes DNS. Ici, nous avons utilisé les listes de blocage disponibles sur le dépôt Steven Black et qui ont une bonne réputation.
IV. Conclusion
En moins de 10 minutes, vous pouvez déployer Blocky sur votre NAS Synology et bénéficier d'un bloqueur de publicités sur votre réseau local. Au-delà de bloquer les publicités (qui restent vitales pour certains sites web comme IT-Connect), vous pouvez bloquer certaines catégories de sites web ou les sites malveillants. Tout dépend des listes que vous utilisez avec Blocky : vous pouvez donc l'adapter à différents usages.
Ce qui me plait avec Blocky, c'est sa légèreté et son efficacité. Sur un NAS, même avec peu de ressources, vous pouvez l'exécuter dans un container. Sur mon NAS, il consomme 36 Mo de RAM et 0.03% de CPU...

Pour approfondir la configuration de l'outil :


Bonjour,
interessant ce petit Blocky. J’adore ces projets « alternatifs » aux solutions deja bien en place .
En ce qui concerne le sujet, personnellement, j’ai besoin d’un bon reporting afin de pouvoir agir en amont en cas d’abus. Gageons que Blocky va s’ameliorer dans le temps.
Chris