Association Bordelaise des Utilisateurs de Logiciels libres
Contrôle parental avec Dansguardian et Squid
Objectif
Le but recherché est de pouvoir autoriser un enfant ou adolescent, préalablement formé à l’utilisation raisonnée d’Internet, à y avoir accès pour les loisirs ou des recherches pédagogiques.
On souhaite cependant éviter qu’il accède à des contenus inappropriés de manière fortuite ou volontaire, sans se reposer sur une surveillance parentale constante de ses faits et gestes qui serait la solution idéale sur le papier (quoiqu’au point de vue de l’autonomie de l’enfant cela soit discutable) mais qui est dans la pratique irréaliste.
Configuration
L’enfant dispose d’un ordinateur personnel sous Debian Lenny avec son compte préconfiguré et un accès Internet fonctionnel.
Le filtrage s’effectuera entièrement sur son poste, sans passage par une passerelle d’accès qui procèderait au filtrage.
Choix du filtrage de contenu
Le logiciel retenu ici est Dansguardian, un logiciel de filtrage de contenu.
Ce logiciel analyse le contenu des sites consultés et leur attribue un score en fonction duquel il permettra ou non la lecture.
Cette approche d’analyse de contenu paraît plus pertinente et efficace qu’une méthode de filtrage basée sur des listes noires de sites, car il paraît impossible de répertorier l’ensemble du Web au contenu inapproprié pour des enfants.
Comment ça marche ?
En bref : à l’issue de cette configuration, toutes les requêtes http du navigateur seront passées à Dansguardian, qui en analyse une première fois le contenu, puis les retransmet à Squid, en reçoit le contenu des pages demandées et l’analyse, et décide ou pas d’en autoriser l’accès par le navigateur.
Pour plus d’infos voir ici
Installation de Dansguardian et Squid
aptitude install dansguardian squid
Configuration de Squid
Sous Debian Lenny, Squid est fonctionnel sans configuration particulière, il écoute sur le port 3128.
Configuration de Dansguardian
On va éditer le fichier /etc/dansguardian/dansguardian.conf
– On supprime la ligne UNCONFIGURED - Please remove this line after configuration
– on modifie la ligne language = 'ukenglish'
en language = 'french'
– pour éviter d’avoir un proxy ouvert sur l’extérieur on limite les requêtes vers dansguardian au poste local :
filterip = 127.0.0.1
– on ajuste le score selon l’âge de l’enfant en éditant le fichier /etc/dansguardian/dansguardianf1.conf
# 50 is for young children, 100 for old children, 160 for young adults.
naughtynesslimit = 100
FACULTATIF : suppression de quelques faux positifs
– pour éviter quelques faux positifs (dus à une partie du terme « google-analytics » ... ) on va rajouter dans /etc/dansguardian/lists/exceptionphraselistanalytics
– de même dans /etc/dansguardian/lists/exceptionsitelist (on pourra whitelister des sites entiers dans ce fichier)google-analytics.com
– on pourra whitelister une url seule d’un domaine dans /etc/dansguardian/lists/exceptionurllist
– on rajoute pour les publicités Canal Plus dans /etc/dansguardian/lists/exceptionregexpurllistcanal
– on édite lists/phraselists/safelabel/banned et on commente :<meta name="Rating" content="General">
en # <meta name="Rating" content="General">
– on peut configurer les paramètres de recherche de Google à : Filtrage strict (Filtrer les images et le texte à contenu adulte)
Rapports par courriel (facultatif)
Pour recevoir un courriel de chaque violation des règles de filtrage on modifie les valeurs suivantes dans /etc/dansguardian/dansguardianf1.conf :
usesmtp = on
mailfrom = 'dansguardian@MONDOMAINE'
contentadmin = 'MONEMAIL'
notifycontent = on
violations = 1
Règles iptables dans /etc/rc.local pour établir un proxy transparent
Pour éviter d’avoir à configurer les navigateurs, on va mettre en place deux règles iptables dans /etc.rc.local (avant la partie exit 0
), qui seront exécutées au démarrage de la machine.
# mise en place d'un proxy transparent
# Cette règle redirige toutes les requêtes http autres que celle du proxy squid (grep proxy /etc/passwd) vers le port 8080 de dansguardian
iptables -t nat -A OUTPUT -m owner ! --uid-owner 13 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
# on empêche la connexion directe à squid non filtré
iptables -t filter -I OUTPUT -d 127.0.0.1 -p tcp --dport 3128 -m owner ! --uid-owner dansguardian -j DROP
Ou, si on veut filtrer un seul compte (celui de l’enfant) :
on recherche son identifiant :
grep compteenfant /etc/passwd
compteenfant:x:1000:1000:compteenfant:/home/compteenfant:/bin/bash
# on filtre toutes les requêtes http de son compte :
iptables -t nat -A OUTPUT -m owner --uid-owner 1000 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
# on empêche la connexion directe à squid non filtré
iptables -t filter -I OUTPUT -d 127.0.0.1 -p tcp --dport 3128 -m owner ! --uid-owner dansguardian -j DROP
Limites de la solution
Le filtrage des sites https est (techniquement) impossible, de même des sites Internet sur des ports non conventionnels du type http://www.site.com:8080 ne sont pas filtrés.