Le DNS, c'est un peu la tuyauterie planquée d'Internet. Tout le monde l'utilise, mais personne ne regarde vraiment ce qui se passe dans les tuyaux... jusqu'à ce que ça pète ou qu'un petit con s'en serve pour exfiltrer des données. Et là, bon courage pour fouiller dans les logs en mode brutasse pour comprendre qui a fait quoi sur votre réseau.
En fait, pour ceux qui se demandent encore qu'est-ce que le DNS (Domain Name System), c'est simplement l'annuaire qui traduit les noms de domaine comme korben.info en adresses IP. Sans lui, on serait tous en train de mémoriser des suites de chiffres à la con.
Et il y a quelques jours, j'ai reçu un mail de Denis, un fidèle lecteur (qui traîne sur le blog depuis 2005, ça nous rajeunit pas !) qui m'a écrit pour me présenter son projet sur lequel il bosse depuis 5 ans :
DNS-collector
.
DNS-collector, c'est un outil écrit en Go qui sert de "chaînon manquant" entre vos serveurs DNS et votre pile de données. En gros, il capture le trafic DNS, le nettoie, l'enrichit et l'envoie là où vous en avez besoin. C'est l'outil parfait pour ceux qui ont la flemme de se palucher des fichiers PCAP de 4 Go à la main ou de debugger des flux DNStap illisibles.
Le point fort de DNS Collector, c'est sa flexibilité. Côté entrées, ça avale tout : du DNStap via socket Unix ou TCP (le protocole standard utilisé par BIND, Unbound ou PowerDNS), du sniffing réseau classique avec AF_PACKET ou même XDP pour la très haute performance. Attention quand même, pour XDP, apparemment le kernel Linux doit être récent (version 5.x minimum) et les drivers réseau doivent suivre, sinon ça va faire pshitt. Ensuite, par défaut, le bousin écoute pépouze sur le port UDP/6000 en attendant ses flux.
Mais là où ça devient vraiment balaise, c'est dans le traitement des données. DNS-collector embarque des "Transformers" (rien à voir avec Optimus Prime hein ^^) qui font tout le boulot ingrat à votre place dans le pipeline de traitement. Hop, ça normalise les noms de domaine en minuscules (le fameux qname-lowercase dans le fichier de config), ça ajoute la géolocalisation via GeoIP (genre MaxMind ou IP2Location), et on peut même détecter les trucs louches.
Il peut aussi détecter le tunneling DNS ou les domaines générés par algorithme (DGA) qui sont souvent les signes d'une infection sur une machine. Petit bémol cependant, pour la géolocalisation, pensez à télécharger vos bases GeoIP au préalable (fichiers .mmdb), sinon l'outil va vous faire une petite grimace au démarrage.
Vous pouvez aussi protéger la vie privée de vos utilisateurs en anonymisant les adresses IP via un hachage SHA1 ou du masquage. C'est propre, ça respecte le RGPD, et ça permet de garder des stats utiles (genre le top des ASN consultés) sans fliquer tout le monde. Les données sortent proprement en JSON ou en Protobuf, prêtes à être ingérées.
Une fois que vos données sont propres, vous les envoyez où vous voulez. J'ai choisi de vous citer ClickHouse ou InfluxDB car c'est parfait pour stocker des millions de requêtes sans mettre votre serveur à genoux, mais la liste est longue : Prometheus pour les métriques, ElasticSearch, Kafka, Redis, ou même Slack via des webhooks pour être alerté en temps réel quand un domaine louche pointe le bout de son nez.
Alors si ça vous chauffe, comment récupérer cet outil et le mettre en place ?
Hé bien c'est hyper fastoche comme d'hab puisque le projet est dispo en binaire ou via Docker. Ensuite, vous lancez la commande ./dnscollector -config config.yml, vous branchez vos sources, et roule ma poule. Taaadaaaa ! DNS-collector s'occupera du reste sans vous bouffer toute votre RAM (contrairement à certaines usines à gaz Java qui demandent un sacré paquet de mémoire vive ^^).
Voilà, perso, je trouve l'approche très saine. C'est léger, modulaire et ça répond à un vrai besoin pour les admins sys qui veulent enfin "voir" ce qui transite par leurs serveurs. Le bousin encaisse des milliers de requêtes par seconde sans broncher... enfin sauf si votre serveur est une patate de 2012, là je garantis rien.
Mortecouille, c'est quand même mieux d'avoir des logs lisibles avec un simple tail -f /var/log/syslog, non ? Et d'ailleurs, le projet est déjà adopté par pas mal d'acteurs de la sécu, donc vous pouvez y aller sereinement.
Le service DNS4EU est déjà opérationnel. Pour en profiter, il suffit de modifier les paramètres DNS de votre appareil en remplaçant ceux fournis par défaut (souvent ceux de votre FAI) par les adresses suivantes :
Installer un serveur perso chez soi, sur un Raspberry Pi 5 ou un Pi 500+, c’est à la portée de tout maker… à condition de suivre la bonne méthode. Dans cet article, on va poser YunoHost sur un SSD NVMe, faire la post-installation, installer une première appli (WordPress), puis rendre le serveur accessible depuis l’extérieur […]
Joyeux Noël ! L’occasion pour vous d’ouvrir plein de cadeaux et pour moi de vous souhaiter de joyeuses fêtes, ainsi qu’à l’avance mes meilleurs vœux professionnels — qui arrivent décidément très tôt désormais… On n’a jamais été aussi près, finalement :)
Un DNS (Domain Name System) est un service essentiel d’Internet chargé de traduire les noms de domaine (ex. google.fr) en adresses IP (ex. 216.58.198.195). Sans cette étape de résolution, impossible d’accéder à un site web à partir de son adresse habituelle : les navigateurs auraient besoin d’une IP précise pour établir la connexion. Par défaut, … Lire la suite
Ceux qui me côtoient savent que la préservation de ma vie privée m’importe, notamment la numérique : pas de réseau social, PC/tablettes et smartphones sous VPN ou proxy voire Tor, auto-hébergement autant que possible des services que j’utilise (ou de leurs alternatives), gestion de mes caméras et tout le toutim. Et j’utilise des navigateurs qui ne se paient pas sur mon dos, à savoir en ce moment Librewolf & Safari. Et à chaque page chargée, ils envoient l’info que j’utilise Windows, Linux, Android ou macOS, en anglais ou en français etc.
À la maison, c’est très simple, pour le WiFi/Ethernet : tout passe par mon serveur AdGuardHome, qui sert de serveur DNS et filtre les requêtes et réponses, qui lui-même passe par à Unbound, qui est un résolveur DNS avec un cache, le tout avec une petite couche de Redis, qui sert de cache.
Le but ? Améliorer la rapidité des réponses en les mettant en cache. Vu qu’on interroge très souvent les mêmes sites (joindre un moteur de recherche, consulter les emails, services de mises à jour etc), on gagne quelques millisecondes et ça fait moins travailler AGH, donc la machine qui l’héberge, puisqu’il trouve de suite ses réponses à nos requêtes DNS. Ce n’est que de la logique, exprimée par de la technique.
Alors c’est simple, si vous avez un minimum de connaissances en Linux ou envie de chercher/apprendre un peu, avez une machine sous Linux qui tourne 24/7 et souhaitez maîtriser votre Internet en bloquant pubs, traqueurs, porno, réseaux sociaux, etc.
Il faut d’abord une IP dédiée (192.168.0.64 chez moi) sur le réseau pour le résolveur DNS, qui sera ensuite à configurer sur tous les PCs, smartphones, tablettes, serveurs, consoles, TVs, etc ou, plus simple, à configurer sur la box FAI ou sur un routeur, de cette manière on évite de configurer chaque équipement de la maison. Chez Free je pouvais mettre ce DNS dans la box mais avec Orange, j’ai dû ajouter un routeur qui gère mon réseau…
Dans la configuration de base fournie avec ce Docker, vous pouvez par exemple commencer par décommenter les DNS de DNS4all, Quad9 et Yandex. IPv4 et/ou v6 selon l’Internet que vous avez chez vous.
Voici les stats depuis mon dernier reset de cet été.
Je ne vais pas détailler la configuration d’AdGuardHome puisqu’il suffit de lire. Voici les listes que j’utilise (qui se mettent dans le fichier de configuration AdGuardHome.yaml).
Quant aux smartphones, en ce moment nous sommes sur iPhone, on peut filtrer efficacement de 2 manières mais dans tous les cas en passant par un VPN. Soit en installant un serveur VPN à la maison, qui utilise le DNS local et en mettant le client sur smartphone soit en utilisant un VPN « commercial » qui permet de filtrer les DNS. Ayant un compte AirVPN (lien sponso) depuis des années je me contente d’utiliser ce dernier, avec ces filtres DNS (à configurer chez eux)
Pour l’utiliser il faut créer un profil Wireguard et l’installer/activer après avoir installé Wireguard.
Des clients me demandaient souvent comment filtrer le surf de leurs enfants. Si cette solution de serveur DNS hébergé permet de filtrer au mieux l’accès aux réseaux sociaux, porno etc, rien n’est 100% sécurisé ni fiable. On le sait tous, il n’y a rien de plus simple que d’accéder à du contenu porno par Internet : chats, messageries, forums, blogs, galeries etc. Sans compter que désactiver un VPN sur un smartphone n’est pas impossible même si des outils de contrôle parental peuvent le compliquer. Et on sait tous qu’en discutant à droite à gauche on a vite fait d’obtenir des infos pour passer outre les blocages.
J’informais mes clients que ces solutions sont seulement contraignantes mais absolument pas pérennes, selon l’âge et la maturité des bambins.
Bonus : quelques extensions Librewolf liées à cette thématique :
Sponsorblock pour bloquer pubs et passages de sponsoring sur YouTube
Quand vous achetez un domaine, vous le faites auprès d'un registry. Les registrars sont les sociétés et structures qui gèrent directement les TLD (.net, .com, .fr...), proposés à travers un registry pour une somme établie. Et ces TLD peuvent avoir été achetés une fortune par certains registrars, d'autant que de nouveaux seront proposés dès l'un prochain.
kdig est un utilitaire en ligne de commande issu de la suite Knot DNS, développé par le registre CZ.NIC. Il se présente comme une alternative moderne au traditionnel dig (issu de BIND9). Son intérêt principal réside dans la prise en charge des protocoles DNS sécurisés (DNSSEC, DoT, DoH) et une sortie en JSON facilitant l’automatisation. […]
Un mémo pour mettre en place un serveur DNS pour un réseau local uniquement en IPv4 avec support DNS-over-HTTPS (DoH) et DNS-over-TLS (DoT) en utilisant BIND9 comme backend et DNSdist comme proxy sous Debian Trixie avec certificat auto-signé Installation et configuration de BIND9 et DNSdist Architecture du système BIND9 : Serveur DNS autoritaire sur port […]