Filtrer le web avec Dansguardian

Sous Linux/Ubuntu,
mettre en place le trio Dansguardian~Tinyproxy~Iptables pour protéger le "surf" des enfants.

Préliminaires

Toutes les opérations "console" sont à mener en tant que root.
Ajouter au système l'utilisateur tiny...
adduser --system --no-create-home --disabled-password --disabled-login tiny

Les outils

Télécharger Dansguardian et Tinyproxy...
apt-get install tinyproxy dansguardian
L'installation de Dansguardian devrait avoir créé un utilisateur dansguardian...
grep dansguard /etc/passwd
dansguardian:x:115:115:DansGuardian User,,,:/var/log/dansguardian:/bin/sh

Configuration

Tinyproxy

Editer le fichier de configuration de Tinyproxy...
nano /etc/tinyproxy/tinyproxy.conf
Décommenter le cas échéant et modifier les variables suivantes...
User tiny
Port 8080
Listen 127.0.0.1

Relancer Tinyproxy...
/etc/init.d/tinyproxy restart
Tester Tinyproxy...
w3m -o http_proxy='http://127.0.0.1:8080' http://easy.open.and.free.fr
Tinyproxy

Dansguardian

Editer le fichier de configuration de Dansguardian...
nano /etc/dansguardian/dansguardian.conf
Modifier les paramètres suivants...
language = 'french'
filterip = 127.0.0.1
filterport = 8888
proxyip = 127.0.0.1
proxyport = 8080

Commenter le tag 'UNCONFIGURED'
#UNCONFIGURED
Démarrer Dansguardian...
/etc/init.d/dansguardian start
Tester Dansguardian...
w3m -o http_proxy='http://127.0.0.1:8888' http://easy.open.and.free.fr/TinyDansguard/test.html
Dansguardian

Iptables

Le principe est simple: forcer le passage par Dansguardian.
Déterminer l'interface utilisée pour sortir sur le net...
route | grep default
default www.routerlogin 0.0.0.0 UG 0 0 0 eth0
Interdire le web pour tous...
iptables -A OUTPUT -o eth0 -p tcp --dport http -j REJECT --reject-with tcp-reset
Tester la règle...
w3m -no-proxy http://easy.open.and.free.fr
w3m: Can't load http://easy.open.and.free.fr.
Autoriser tout de même les utilisateurs tiny, root et papa*...
iptables -I OUTPUT -o eth0 -p tcp --dport http -m owner --uid-owner papa* -j ACCEPT
iptables -I OUTPUT -o eth0 -p tcp --dport http -m owner --uid-owner root -j ACCEPT
iptables -I OUTPUT -o eth0 -p tcp --dport http -m owner --uid-owner tiny -j ACCEPT

Root est ajouté pour les futures mises à jour du système.
Tester...
w3m -o http_proxy='http://127.0.0.1:8080' http://easy.open.and.free.fr
Tinyproxy
Répéter les règles précédentes pour le web sécurisé...
iptables -A OUTPUT -o eth0 -p tcp --dport https -j REJECT --reject-with tcp-reset
iptables -I OUTPUT -o eth0 -p tcp --dport https -m owner --uid-owner papa* -j ACCEPT
iptables -I OUTPUT -o eth0 -p tcp --dport https -m owner --uid-owner tiny -j ACCEPT

N'autoriser que l'utilisateur dansguardian à utiliser Tinyproxy...
iptables -A OUTPUT -o lo -p tcp --dport webcache -m owner ! --uid-owner dansguardian -j REJECT --reject-with tcp-reset
Tester la dernière règle...
w3m -o http_proxy='http://127.0.0.1:8080' http://easy.open.and.free.fr
w3m: Can't load http://easy.open.and.free.fr.
Cependant, les règles seront perdues à l'extinction du système.
Il faut donc les sauver pour pouvoir ensuite les restaurer au démarrage du système.
Sauver les règles...
iptables-save > /etc/webfilter.conf
Restaurer les règles au démarrage...
echo -e '#!/bin/bash\niptables-restore < /etc/webfilter.conf && echo " * Starting web filter..."' > /etc/init.d/webfilter
chmod +x /etc/init.d/webfilter
update-rc.d webfilter start 19 2 .

Le navigateur

Ouvrir une session fiston* et lancer le navigateur sur http://easy.open.and.free.fr ...
Echec de connexion
Modifier les paramètres de connexion (préférences du navigateur) pour utiliser le proxy 127.0.0.1:8080 et réessayer...
Erreur proxy
Modifier à nouveau les paramètres de connexion pour cette fois utiliser Dansguardian (127.0.0.1:8888)...
Paramètres de connexion
Pointer le navigateur sur http://easy.open.and.free.fr/TinyDansguard/test.html ...
Dansguardian
Et voila!

Tuning

Pour les enfants en bas âge...
L'age de glace
Remplacer le modèle de Dansguardian par la page et relancer Dansguardian...
wget -O /etc/dansguardian/language/french/template.html http://easy.open.and.free.fr/TinyDansguard/template.html
/etc/init.d/dansguardian restart

Forges et documentation

Dansguardian: http://dansguardian.org/
Tinyproxy: http://tinyproxy.sourceforge.net/
Proxy: http://fr.wikipedia.org/wiki/Proxy
Netfilter: http://www.netfilter.org/
Iptables: http://fr.wikipedia.org/wiki/Iptables

 

Ce Qu'il Fallait Documenter.
Pascal dot Parent at Free dot Fr