Zerohosts : filtrer les pubs sans addon
Sur les ordinateurs, le fichier /etc/hosts
peut contenir une liste pré-remplie par l'administrateur associant un nom de domaine à son adresse IP. Cela permet de ne pas avoir besoin d'un résolveur de nom de domaine qui indiquera à votre ordinateur d'aller à l'IP 91.198.174.92
lorsque vous entrez l'adresse de wikipedia dans votre navigateur. C'est souvent votre FAI qui se charge de ça. (Cela permet aussi de ne pas avoir à installer de résolveur de noms si on n'en n'a pas envie dans un réseau local.)
Pourquoi voudrait-on résoudre le nom de domaine des publicités et autres nuisances alors qu'on ne veut même pas les afficher ?
On va donc pré-remplir le fichier /etc/hosts
avec des noms de domaines connus pour être nuisibles et les associer à une adresse IP non routable de laquelle on ne récupérera aucune donnée (0.0.0.0).
Cela comporte plusieurs avantages :
- Ça réduit considérablement la quantité de données téléchargées.
- C'est plus rapide qu'un bloqueur de pub comme ublock. : Il n'y a pas de délai de résolution des noms de domaines, ni le chargement des publicités.
- C'est indépendant du navigateur utilisé.
J'ai rassemblé plusieurs listes de domaines malveillants pour plus d'efficacité. Le script zerohosts permet de créer un fichier /etc/hosts
à partir (entre autre) des listes suivantes :
https://adaway.org/hosts.txt https://someonewhocares.org/hosts/zero/hosts https://hosts-file.net/ad_servers.txt https://www.malwaredomainlist.com/hostslist/hosts.txt http://winhelp2002.mvps.org/hosts.txt https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext https://mirror.cedia.org.ec/malwaredomains/justdomains https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt https://zeustracker.abuse.ch/blocklist.php?download=baddomains
À l'heure où j'écris ces lignes, cela consiste en 134000 domaines malveillants.
Ajoutez vos propres règles ou résolutions de domaine si vous le souhaitez en passant en argument le chemin vers un fichier texte avec le contenu à intégrer dans votre fichier /etc/hosts
. Exemple :
zerohosts /var/myhosts.include > /etc/hosts
Je propose aussi la liste en téléchargement libre si vous voulez vous servir ;)
- zerohosts.sh
#!/bin/sh # prx -- prx@si3t.ch. # Idea from https://sebsauvage.net/wiki/doku.php?id=dns-blocklist # block evil domains. Works for IPv4 and IPv6 # Licence: MIT # Script to generate a /etc/hosts file to blacklist ads # Add you entries passing in a file as argument # zerohosts include.txt # # CHANGELOG: # 1.2 : added more sources, # better include of user submitted file # improved filtering with grep, # removed host last modification time check # remove domain list usage # add -e flag to alert if a list become unavailable # remove echos : call script and redirect to stdout # add description at top of file # 1.3 : simplified awk call, # use hardcoded localhost # 1.4 : updated lists set -e # DOWNLOADER (to standard output) #D="wget -O-" # mosts linux D="curl -L --compressed" # with curl #D="ftp -m -o-" # OpenBSD VERSION=1.4 DESCR="Generated with zerohosts" URL="https://si3t.ch/w/doku.php/code:zerohosts" HOSTSSRC=" https://someonewhocares.org/hosts/zero/hosts https://adaway.org/hosts.txt https://urlhaus.abuse.ch/downloads/hostfile/ https://winhelp2002.mvps.org/hosts.txt https://dbl.oisd.nl/basic/ https://gist.githubusercontent.com/Ewpratten/a25ae63a7200c02c850fede2f32453cf/raw/f0778c8ff53345e6dbf8fe2987e70f4a6a8aacd6/hosts-yt-ads https://hostfiles.frogeye.fr/firstparty-only-trackers-hosts.txt https://justdomains.github.io/blocklists/lists/easylist-justdomains.txt https://justdomains.github.io/blocklists/lists/easyprivacy-justdomains.txt https://justdomains.github.io/blocklists/lists/adguarddns-justdomains.txt https://justdomains.github.io/blocklists/lists/nocoin-justdomains.txt https://paulgb.github.io/BarbBlock/blacklists/hosts-file.txt https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext&useip=0.0.0.0 https://raw.githubusercontent.com/AdAway/adaway.github.io/master/hosts.txt https://raw.githubusercontent.com/FadeMind/hosts.extras/master/UncheckyAds/hosts https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.2o7Net/hosts https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Dead/hosts https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Risk/hosts https://raw.githubusercontent.com/FadeMind/hosts.extras/master/add.Spam/hosts https://raw.githubusercontent.com/PolishFiltersTeam/KADhosts/master/KADhosts.txt https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts https://raw.githubusercontent.com/bigdargon/hostsVN/master/option/hosts-VN https://raw.githubusercontent.com/davidonzo/Threat-Intel/master/lists/latestdomains.piHole.txt https://raw.githubusercontent.com/mitchellkrogza/Badd-Boyz-Hosts/master/hosts https://raw.githubusercontent.com/notracking/hosts-blocklists/master/dnscrypt-proxy/dnscrypt-proxy.blacklist.txt https://raw.githubusercontent.com/shreyasminocha/shady-hosts/main/hosts https://raw.githubusercontent.com/tiuxo/hosts/master/ads https://blocklistproject.github.io/Lists/phishing.txt https://blocklistproject.github.io/Lists/ransomware.txt https://blocklistproject.github.io/Lists/tracking.txt https://dl.red.flag.domains/red.flag.domains.txt " cat << EOF # zerohost version ${VERSION} # ${DESCR} # see ${URL} $(date '+# %Y-%m-%d %H:%M:%S') # 127.0.0.1 localhost 127.0.0.1 localhost.localdomain 127.0.0.1 local ::1 localhost ::1 ip6-localhost ::1 ip6-loopback 255.255.255.255 broadcasthost ff00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts 0.0.0.0 0.0.0.0 :: :: # ENDOFHEADER EOF test -f "${1}" && cat "${1}" # download list, # ignore lines with comments # keep lines with actual domain but not local # add redirection to non routable addr ( for U in ${HOSTSSRC}; do ${D} "${U}" | awk ' /^#/ { next } $2 ~ /.*\..*/ { printf "0.0.0.0 %s\n", $2 } ' done ) | sort -u exit 0