Dnsmasq : blacklist et page de blocage

DnsmasqDeuxième partie de l’article sur Dnsmasq. Nous abordons ici la mise en place d’une blacklist pour interdire automatiquement l’accès à des domaines malveillants. La liste de ces domaines peut être obtenue sur des sites spécialisés. Nous allons installer la liste de MVPS. Elle est régulièrement mise à jour et semble tenir la route. Dans un deuxième temps, nous allons rediriger les requêtes DNS bloquées vers une page web personnalisée.

Récupération de la liste hosts

Téléchargez le fichier hosts.zip

http://www.mvps.org/winhelp2002/hosts.zip

Installation sur la machine Dnsmasq

Décompressez le fichier hosts dans /var/local/blacklist/

Indiquez à Dnsmasq l’emplacement de ce fichier avec le paramètre addn-hosts:

# vi /etc/dnsmasq.conf

addn-hosts=/var/local/blacklist/hosts

Redémarrer Dnsmasq

# /etc/init.d/dnsmasq restart

et enfin, on peut faire un test de résolution DNS vers un site présent sur la blacklist, par exemple :

# dig yads.zedo.com

yads.zedo.com.        0    IN    A    127.0.0.1

le domaine est bien blacklisté et renvoie vers l’adresse locale.

Mise en place d’une page de blocage

Maintenant, en cas d’accès à un site bloqué, l’utilisateur se retrouve devant une page d’erreur, indiquant que la connexion a échoué. C’est normal, car sur son IP locale, il n’y a pas, en règle générale, de service web pour répondre. On va rediriger le blocage vers une page personnalisée.

Modification du fichier blacklist/hosts

Par défaut, le fichier hosts de notre blacklist est adapté à une utilisation locale : tout site malveillant est associé à l’adresse 127.0.0.1. Nous allons modifier le fichier pour renvoyer vers l’interface eth0 de notre machine Dnsmasq (192.168.0.1).

Editez le fichier hosts, n’importe quel éditeur de texte fait l’affaire pour remplacer 127.0.0.1 par 192.168.0.1, par exemple avec vi :

# vi /var/local/blacklist/hosts

:%s/127.0.0.1/192.168.0.1/

Il faut également supprimer la ligne présente en tête de fichier qui renvoie vers localhost:

127.0.0.1 localhost

Avant :

127.0.0.1 localhost

#start of lines added by WinHelp2002
# [Misc A – Z]
127.0.0.1  fr.a2dfp.net
127.0.0.1  m.fr.a2dfp.net
127.0.0.1  ad.a8.net
127.0.0.1  asy.a8ww.net …

Après modification :

#start of lines added by WinHelp2002
# [Misc A – Z]
192.168.0.1  fr.a2dfp.net
192.168.0.1  m.fr.a2dfp.net
192.168.0.1  ad.a8.net
192.168.0.1  asy.a8ww.net …

Mise en place de la page de blocage

On va d’abord installer sur notre machine Dnsmasq un serveur web, par exemple Apache2

# apt-get install apache2

Installer le support ssl par defaut, ca permettra de gérer les adresses en https  :

# a2enmod ssl
# a2ensite default-ssl

Editer le fichier de configuration des pages d’erreur:
vi /etc/apache2/conf.d/localized-error-pages
et rediriger les erreurs 404 vers la page index.html :
ErrorDocument 404 /index.html

Redémarrer Apache :
# /etc/init.d/apache2 restart

Il ne reste plus qu’à éditer la page /var/www/index.html et à personnaliser le message de blocage. On dispose maintenant d’une machine faisant du cache DNS et du filtrage web avec page de blocage. Ce type de dispositif associé à un filtrage sur navigateur comme Adblock  Plus vous offre un accès confortable au web et permet d’éviter pas mal de sites douteux.

Mise à jour automatique de la blacklist

Vous pouvez ajouter des blocages personnels dans la blacklist. Mettez vos blocages perso dans un fichier /var/local/blacklist/perso.txt. On va ensuite l’intégrer automatiquement à la blacklist Dnsmasq. Il suffit de respecter la syntaxe :

192.168.0.1 Domaine_A_Bloquer

Pour automatiser la mise à jour de la blacklist, créez le script suivant : /var/local/scripts/blacklist_maj.sh

 #!/bin/sh
 cd /var/local/blacklist/
 rm hosts.txt
 wget http://www.mvps.org/winhelp2002/hosts.txt
 #integration des blocages perso
 cat perso.txt > hosts
 # ajout de la blacklist
 sed -e 's/^.*localhost//' hosts.txt|sed -e "s/127.0.0.1/192.168.0.1/g" >> hosts
 #redemarrage de Dnsmasq
 /etc/init.d/dnsmasq restart

Rendez le executable :

chmod 755 /var/local/scripts/blacklist_maj.sh

Ensuite, planifiez un lancement hebdomadaire dans cron.weekly :

ln -s /var/local/scripts/blacklist_maj.sh /etc/cron.weekly/blacklist_maj/pre>

Améliorations possibles

On fait une mise à jour forcée de la blacklist chaque semaine, même si MVPS n’a pas fait de mise à jour. On pourrait faire un check sur la date de la blacklist en ligne et effectuer la mise à jour si besoin.

Publicités

Une réflexion au sujet de « Dnsmasq : blacklist et page de blocage »

  1. Bonjour. Super article! (et déterrage!)
    Tu pourras peut-être m’aiguiller: si je veux bloquer facebook et que je le mets en blacklist dans mon fichier de blacklists, je tape facebook.com dans la barre d’adresses et le site est bien bloqué. Par contre si je lance la recherche avec google et que je clique sur le lien, l’accès à Facebook.com est autorisé…
    Si je mets une redirection directement dans dnsmasq.conf avec
    address=/facebook.com/ ma_page_d_erreur
    ça bloque bien, même si on tente l’accès via Google. (il faut vider le cache etc… du navigateur avant de refaire le test)

    Est-ce que vous auriez une idée du pourquoi et comment faire pour que la blacklist soit fiable à 100% svp?
    Merci,

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s