Hormis les plugins bloqueurs de publicités comme Ublock Origin au niveau du navigateur, il est aussi possible d’agir au niveau DNS. Je pense que les 2 méthodes sont complémentaires. Le blocage au niveau du DNS permet d’agir sur tout les ordinateurs l’utilisant (par exemple tous les ordinateurs de votre réseau local). C’est à dire que le blocage va fonctionner aussi sur les iMachines, iTéléphones et Androphones plutot réticents à ce que vous bloquiez les publicités qui rapportent des brouzoufs à leur éditeurs.
Si vous avez un DNS local tel que Unbound, c’est très simple à mettre en place. L’idée est télécharger une liste de domaines connus pour fournir uniquement de la publicité ou des traqueurs et de mentir sur leur adresse IP. Votre DNS va dire que ces domaines sont inaccessibles.
On commence par télécharger la liste de domaines à bloquer sur le site de StevenBlack et la convertir au format Unbound :
# cd /etc/unbound/unbound.conf.d
# wget -O- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | grep '^0\.0\.0\.0' | grep -v '^0\.0\.0\.0 0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\"\nlocal-data: \""$2" AAAA ::\""}' > adslist
On ajoute la prise en charge de cette liste de domaines à bloquer dans notre fichier de configuration d’Unbound :
#Ads blocking
include: "/etc/unbound/unbound.conf.d/adslist"
On redémarre le service:
# systemctl start unbound
Et voila, simple !
J’ai fait pour vous un petit test sur le site web http://www.jeuxvideo.com/
C’est assez parlant ;-)
Sans bloquage au niveau du DNS (temps de chargement 10 secondes):
Après bloquage au niveau du DNS (temps de chargement 1 seconde):
Je vous invite à suivre mon tutorial pour installer Unbound sur Debian. Ca vous permet également d’accéder à tout le web et échapper à la censure par bloquage DNS.
Merci pour le tuto, actuellement j’ai la même chose avec pi Hole et ça va plutôt bien, je ne connaissais pas unbound :-)
Joli tuto, bien pratique.
Ça m’a l’air moins simple sur Bind9 malheureusement (faut créer des zones et tout).
Mais effectivement c’est pratique quand t’as des appareils sur lesquels tu ne peux pas mettre d’adblocker (genre ceux qui sont pas rootés).
ok pour les ordis ça peut être bien, je vais essayer…
sinon pour iOS il existe des bloqueurs de contenu, j’en utilise 2 :
Focus
Refine
Dans l’os c’est fait de telle manière que ceux-ci n’on pas accès à ma navigation, ils ont juste le droit de fournir la liste des trucs a bloquer.
Aussi on peut les désactiver temporairement quand certains sites le demandent ;p en appuyant longtemps sur le bouton « recharger la page » un menu apparaît : « Recharger sans les blogueurs de contenu ».
Quoi qu’on en dise, Apple défend le mieux qu’elle puisse ces clients…
pourquoi utiliser le fichier adslist_tmp ?
on peut raccourcir la commande en :
wget -O- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' > adslist
Merci azawa pour l’astuce !
J’ai mis à jour l’article en prenant ta solution.
@Chris : C’est en lisant par hasard un article sur PiHole que je me suis dit « Hey, c’est pas mal. Je dois pouvoir faire ca aussi même sans raspberry » :-)
merci,
ca marche au top
pour ceux qui utilisent dnsmasq :
dans dnsmasq.conf ajouter :
addn-hosts=/etc/dnsmasq.hosts (pensez a adapter le chemin a votre conf)
wget -O- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts –no-check-certificate > /etc/dnsmasq.hosts (problème de certificat ???)
le format est déjà tout bon :-)
un petit restart du service dnsmasq
et enjoy!
Une bonne liste pour SquidGuard !
moi j’ai pas bien compris, si j’installe Unbound, ça va l’installer sur le pc X où je fais la manip non? Donc si admettons je n’est pas de bloqueur de pub installé sur mes autres machines (droid, autres pc), et que la machine X avec Unbound est éteinte, j’aurais de la pub sur mes autres machines? ça fait que mes autres machines serait dépendante de la machine X?
Merci bien
Au passage, je suis d’accord sur « Quoi qu’on en dise, Apple défend le mieux qu’elle puisse ces clients… ». Mais bon c’est peut être juste pour bien continuer à les enfler… Ils réinvente la roue tout les 6 mois et tout le monde trouve ça formidable.
Je n’ai pas bien compris ton commentaire. Tu peux te documenter sur DHCP pour mieux comprendre quel DNS est utilisé sur les machines de ton reseau.
Et oui, si ton serveur/relay DNS est eteint, il faudra bien en fournir un autre à tes machines si tu veux qu’elles resolvent les noms de domaines.
Quand à Apple, ils protegent surtout leur business (pas de concurrence sur l’app store ni le materiel). Ce qui fait du sens. Le hasard fait que contrairement à facebook, google et maintenant microsoft, leur business model n’est (pas encore) axé sur les données personelles.
Merci pour l’astuce. J’utilise déjà unbound comme DNS local et ça fonctionne. Par contre, j’ai un petit souci quand j’applique ton tuto.
Je récupère bien le fichier adslist formaté pour unbound dans /etc/unbound/unbound.conf.d :
local-zone: « exemple.com » redirect
local-data: « exemple.com A 0.0.0.0 »
Par contre, si j’insère la ligne
include: « /etc/unbound/unbound.conf.d/adslist »
à la fin de mon fichier unbound.conf dans /etc/unbound, j’ai un problème après redémarrage du service. Mon navigateur me renvoie alors une erreur d’adresse introuvable à toute tentative de connexion. Si je commente la ligne, je n’ai aucun souci de connexion.
Une idée ? Merci
T’as bien mis les bons guillemets?
@Tuxicoman : oui oui « », erreur copier/coller dans mon commentaire précédent
Merci bien de ta réponse, je vais me renseigner sur tout ça. Et pour la Pomme, étant fervent adepte de linux et du monde du libre que je trouve admirable, je ne peux pas m’empêcher de dire quelque chose…
Sinon, sed, c’est bon, mangez-en ;-D (Pour curl ou wget, je ne suis pas capable de dire s’il y a des raisons d’utiliser un plutôt que l’autre…)
curl https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | sed -ne ‘s/^\(0\.0\.0\.0\) \([^ ]*\)/local-zone: « \2 » redirect\nlocal-data: « \2 A 0.0.0.0\ »/p’ – > adslist
Ça évite d’appeler grep pour rien.
On peut aussi faire la même chose avec awk :
wget -O- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | awk ‘/^0\.0\.0\.0/{print « local-zone: \ » »$2″\ » redirect\nlocal-data: \ » »$2″ A 0.0.0.0\ » »}’ > adslist
@Antoine : En fait, il faut ajouter « server: » au début du fichier pour que ça marche chez moi (Debian Jessie, unbound 1.4.22), par exemple en faisant un script (car directement en crontab, c’est lourd…) :
#!/bin/sh
(
echo « server: »
curl -s « https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts » |
sed -ne ‘s/^\(0\.0\.0\.0\) \([^ ]*\)/local-zone: « \2 » redirect\nlocal-data: « \2 A 0.0.0.0\ »/p’ –
) > /etc/unbound/unbound.conf.d/adsfilter
/bin/systemctl restart unbound.service
Voilà !
Et merci pour la bonne idée, je n’avais que du filtrage dans mon navigateur pour le moment (uMatrix + uBlock origin).
Il faut mettre la ligne include dans la section « server ».
@David_5.1 : merci ça fonctionne avec « server: » au début du fichier adslist
@Tuxicoman : en fait les guillemets sont modifiés entre la saisie du texte dans la zone « Comment: » et le texte affiché sur le site après ajout du commentaire.
Bonjour,
Dans ma configuration je n’autorise que mon localhost ainsi :
interface: 127.0.0.1
et j’ai comme Antoine le même problème lorsque je veux ajouter cette liste, et que je relance unbound j’ai ceci dans mes logs :
Failed to start (null).
Dependency failed for Host and Network Name Lookups.
Unit unbound.service entered failed state.
Esce que c’est du faite que le redirect est pour le Ads pointe vers 0.0.0.0 car celui ci dans mon fichier conf unbound est en mode « refuse »
bien à vous
RE,
en utilisant unbound-checkconf j’ai pu voir que c’était une erreur concernant la duplication de Ads car j’avais laisser quelques unes des adresses encore dans mon fichier .conf, donc fausse alerte !! ça fonctionne.
encore merci pour le tuto @++
Un petit script/cron pour mettre à jour le fichier hosts serait top ;)
Pour faire la même chose en local sur ta machine? Je ne pense pas qu’on puisse inclure de fichier dans le /etc/hosts donc ce serait pénible à maintenir. Installe unbound en local sur ta machine et voilà !
unbound est installé mais il faut bien mettre à jour le fichier hosts téléchargé sur https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts non ? et je suppose qu’il est mis à jour régulièrement… ou alors j’ai rien compris :D
ben met la ligne de commande avec wget dans ton crontab…
Hello,
mon fichier adlist est dans : /etc/unbound/unbound.conf.d/
J’avais pour la mise à jour manuel fait un petit fichier update.sh dans le même répertoire comme ça :
###
#!/bin/bash
echo « Supprimer adslist ? »
read
rm /etc/unbound/unbound.conf.d/adslist
echo » adlist supprimé !!! »
sleep 2
echo « Mise à jour de la nouvelle liste ? »
read
wget -O- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | grep ‘^0\.0\.0\.0’ | awk ‘{print « local-zone: \ » »$2″\ » redirect\nlocal-data: \ » »$2″ A 0.0.0.0\ » »}’ > adslist
echo « Téléchargement de la liste avec succès !!! »
sleep 2
echo « Redémarrage Unbound serveur ? »
read
/etc/init.d/unbound restart
echo « Unbound a redémarré correctement !!! »
sleep 2
echo quittez ?
read
echo « Bye »
exit 0
##############
un petit chmod +x update.sh ensuite
./update.sh et faire « enter » pour chaque étape !
biensur si c’est pour le mettre dans CRON en automatique il faut alors dans le scripts laisser que les commandes rm fichier adlist, le wget complèt et le restart de unbound dans le fichier sh et ensuite mettre /etc/unbound/unbound.conf.d/update.sh dans CRON a la suite du choix d’execution de la commande !!
@+
Ping Comment bloquer les publicités avec un Raspberry Pi
Ya mieux. uBlock ou Adguard. ^^
C’est complémentaire, dans les cas où tu ne peux pas installer ublock dans le logiciel qui diffuse la pub.
J’ai installé Unbound, le fichier adslist et inséré include dans le fichier de configuration. Le status et drill me disent qu’Unbound tourne correctement, mais rien ne dit s’il utilise effectivement adslist. Y a-t-il un moyen de voir ce qu’il fait?
Merci
j’ai cette alerte
Connexion à raw.githubusercontent.com (raw.githubusercontent.com)|151.101.192.133|:443… connecté.
Erreur : le certificat de « raw.githubusercontent.com » n’est pas de confiance.
une petite explication ??
Pirater un compte snapchat gratuitement accéder les photos et messages d’un compte Snapchat
Super. J’utilisais une liste plus réduite (celle de yoyo, au format conf Unbound) jusqu’à présent. Mais ce que tu proposes est bien meilleur ! Merci beaucoup, ainsi qu’à Steven Black !
Ah, j’ai juste fait une petite modif à ton script, pour supprimer les deux premières lignes de adslist et qui mappent inutilement 0.0.0.0 sur 0.0.0.0.
Il suffit de remplacer:
grep ‘^0\.0\.0\.0’
par:
grep ‘^0\.0\.0\.0’ | grep -v ‘^0\.0\.0\.0 0\.0\.0\.0’
Merci encore!
@shlublu : merci, j’ai intégré ta contribution :-)