[[tutoriel:comment_mettre_en_place_un_controle_parental]]
Piste: » comment_mettre_en_place_un_controle_parental
Comment mettre en place un contrôle parental ?
Cette page vous explique comment mettre relativement simplement un contrôle parental pour les accès WEB pour un PC seul connecté à Internet (pas de réseau local)
Objectifs
- Restreindre l'accès au WEB pour certains thèmes
Procon latte
Sous ce nom horrible se cache un contrôle parental sous forme d'extension pour Firefox.
Cette extension est plutôt efficace et surtout très simple d'installation. Bien sûr, elle ne convient qu'aux utilisateurs de Firefox !
Installation
Rien de plus simple, il suffit de se rendre à cette adresse avec Firefox et de cliquer sur Installer.
Afin d'empêcher la désactivation facile de Procon latte via le menu des modules complémentaires :
1- cliquer sur le bouton "Choisir un mot de passe" pour protéger l'accès à la modification des Préférences
2- cocher toutes les options des paramètres principaux, et notamment l'option "empêcher la désactivation ou la désinstallation"
Deux remarques :
Le blocage d'accès via la liste blanche ne marche pas pour certains sites, par ex. fr.youtube.com. Dans ce cas, ajouter le nom du site (youtube) à la liste des données explicites du Filtre principal dans la colonne "sites bloqués"
L'extension Public Fox disponible cette adresse permet d'aller plus loin en bloquant l'accès aux modules complémentaires, mais elle ne fonctionne pas avec l'occurence "Modules complémentaires" du menu Options de Firefox 3.0, ce qui oblige à installer un autre module de paramétrage du menu Options, comme par ex. Tools Menu Organiser disponible à cette adresse
Configuration
Inconvénients
- Simple à contourner.
- Ne protège que Firefox.
Squidguard
Pré-requis
Les logiciels utilisés pour mettre en œuvre ce contrôle parental sont :
Configuration de Squid
Le fichier de configuration est : /etc/squid/squid.conf
Tout d'abord, sauvegardez ce fichier avec la commande :
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.orig
Maintenant, éditez ce fichier avec l'éditeur de votre choix en ayant les droits administrateurs. Insérez-y les lignes suivantes :
# ----------------------------------------------------------- cache_effective_user proxy cache_effective_group proxy # ----------------------------------------------------------- visible_hostname none # ----------------------------------------------------------- # ----------------------------------------------------------- acl all src 0.0.0.0/0.0.0.0 acl localhost src 127.0.0.1/255.255.255.255 acl manager proto cache_object acl serveur src 192.168.0.1 acl poste src 192.168.0.50 acl multipostes src 192.168.0.100-192.168.0.125 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 20 # ftp-data acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # ssl acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT http_access allow all redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf redirect_children 10 http_port 3128 transparent
Configuration d'un filtre uniquement par Squid
Squid permet, à lui seul, de mettre en place toute une série de filtres.
Dans le cas qui nous intéresse, le contrôle parental, on peut utiliser les filtres suivants:
- Autoriser l'accès uniquement à une liste de sites (liste blanche).
- Bloquer l'accès à une série de domaines (liste noire).
- Bloquer les pages dont l'URL contient un mot interdit.
La configuration a lieu en deux temps. On crée d'abord les acl correspondants :
acl whitelist dstdomain "/etc/squid/whitelist" acl blacklist dstdomain "/etc/squid/blacklist" acl filtre_reg url_regex -i ^.*sex.*$ ^.*porn.*$ ^.*hack.*$ ^.*crack.*$ ^.*drug.*$ ^.*felation.*$
Puis on lui applique les filtres :
http_access allow whitelist http_access deny blacklist http_access deny filtre_reg
Squid applique les filtres dans l'ordre. Le premier filtre vérifié s'applique et pas les suivants. Il faut donc prendre garde à l'ordre dans lequel on les écrit.
Ici, le filtrage pour la whitelist est placé avant celui de la blacklist. Ainsi, si un domaine se trouve dans les deux listes, le site ne sera pas bloqué car squid appliquera le premier filtre.
Pour finir, si aucune des règles n'est vérifiée on autorise l'accès :
http_access allow localhost
(avec localhost un acl du type acl localhost src 127.0.0.1/32)
Pour une référence plus complète des règles que l'on peut mettre en place dans Squid, on peut se référer au document : [www.visolve.com/squid/squid30/squid30.pdf]
Configuration de SquidGuard
SquidGuard est une sorte de greffon à Squid qui joue le rôle de redirecteur. En fait si une requête du navigateur n'est pas conforme à ce qui a été défini dans sa configuration il affiche une autre page web que celle demandée.
Les listes noires
Pour ce qui est du filtrage des sites, on ne va bien sûr pas entrer les adresses à la main, des listes noires existent sur le net. Voici une adresse de blacklist : ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
Voici les commandes à faire pour les installer :
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz sudo tar zxvf blacklists.tar.gz -C /var/lib/squidguard/db/ sudo su cd /var/lib/squidguard/db mv blacklists/* . rm -rf blacklists
C'est à partir de cette liste noire que la base de données va être créée pour Squidguard. Si vous regardez le répertoire /var/lib/squidguard/db, vous verrez pleins de sous-répertoires de thèmes pour les listes noires (gambling, radio, webmail, porn, adult, etc.). Ce sont ces thèmes qu'il faudra définir dans le fichier de configuration de Squidguard
Mise à jour hebdomadaire automatique des listes noires
Pour mettre automatiquement à jour, chaque semaine, les listes noires de SquidGuard, il suffit de créer une tâche cron. Créez le fichier /etc/cron.weekly/squidguard_blacklists :
sudo gedit /etc/cron.weekly/squidguard_blacklists
et inscrivez-y les lignes suivantes :
#!/bin/sh # # Fichier /etc/cron.weekly/squidguard_blacklists # # Télécharge chaque semaine les listes noires pour SquidGuard # et met à jour les bases de ce dernier. if [ -d /var/lib/squidguard ]; then wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz -O /var/lib/squidguard/blacklists.tar.gz tar zxvf /var/lib/squidguard/blacklists.tar.gz -C /var/lib/squidguard/ rm -rf /var/lib/squidguard/db mkdir /var/lib/squidguard/db || true mv -f /var/lib/squidguard/blacklists/* /var/lib/squidguard/db/ chmod 2770 /var/lib/squidguard/db rm -rf /var/lib/squidguard/blacklists /var/lib/squidguard/blacklists.tar.gz /usr/bin/squidGuard -C all chown -R proxy:proxy /etc/squid /var/log/squid /var/spool/squid /usr/lib/squid /usr/sbin/squid /var/lib/squidguard /etc/init.d/squid restart fi
Rendez ce fichier exécutable :
sudo chmod +x /etc/cron.weekly/squidguard_blacklists
Si vous le désirez, vous pouvez le tester (attention, il est long à rendre la main, à cause de la mise à jour des bases de squidGuard) :
sudo /etc/cron.weekly/squidguard_blacklists
Le fichier de configuration
Le fichier de configuration est : /etc/squid/squidGuard.conf
De même sauvegardez ce fichier avec la commande :
sudo cp /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf.orig
Maintenant, éditez ce fichier avec l'éditeur de votre choix en ayant les droits administrateurs.
remplacer le ficher avec les lignes suivantes :
#
# CONFIG FILE FOR SQUIDGUARD
#
dbhome /var/lib/squidguard/db
logdir /var/log/squid
# ------------------------------------------------------------
# Définition de la base de données de filtrage utilisée
# ------------------------------------------------------------
dest adult {
domainlist adult/domains
urllist adult/urls
}
dest publicite {
domainlist publicite/domains
urllist publicite/urls
}
dest warez {
domainlist warez/domains
urllist warez/urls
}
dest porn {
domainlist porn/domains
urllist porn/urls
}
dest violence {
domainlist violence/domains
urllist violence/urls
}
# ajoutez ici les thèmes supplémentaires de votre choix présents dans la blacklist de la façon suivante :
# dest <nom du thème> {
# domainlist <nom du thème>/domains
# urllist <nom du thème>/urls
# }
# ------------------------------------------------------------
# Définition des ACL
# ------------------------------------------------------------
acl {
default {
# les thèmes supplémentaires sont à ajouter avant le mot-clé all par !<nom du thème>
pass !porn !adult !publicite !warez !violence all
redirect http://roozeec.free.fr/interdiction.html
}
}
# ------------------------------------------------------------
Maintenant il faut générer la base de données avec la commande suivante :
sudo squidGuard -C all
Patientez un peu car ça peut être long.
Vous aurez compris ici que SquidGuard va rediriger toutes les pages qui sont non conformes à la règle pass vers la page web : http://roozeec.free.fr/interdiction.html
Configuration de IPTABLES
Maintenant que tout est fait pour ce qui est du proxy, il faut aussi que les requêtes du navigateur soit redirigées vers le proxy Squid que nous venons de configurer. Pour cela, il faut d'abord trouver l'identifiant de l'utilisateur proxy (UID) avec la commande :
grep proxy /etc/passwd proxy:x:13:13:proxy:/bin:/bin/sh
Ici la réponse est 13, donc nous allons créer la règle iptables suivante (13 est ici la valeur donnée précédemment) :
sudo iptables -t nat -A OUTPUT -m owner ! --uid-owner 13 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
De façon à lancer cette commande au démarrage du PC, il suffit de la mettre dans le fichier /etc/rc.local, juste avant la commande exit 0 (13 est ici la valeur donnée précédemment) :
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. iptables -t nat -A OUTPUT -m owner ! --uid-owner 13 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 exit 0
Démarrage de Squid
Maintenant que tout est prêt, il suffit de lancer Squid, mais avant tout il va falloir lancer quelques commandes pour bien définir les droits des fichiers :
sudo chown -R proxy:proxy /etc/squid /var/log/squid /var/spool/squid /usr/lib/squid /usr/sbin/squid /var/lib/squidguard
Lancer maintenant la commande :
sudo squid -z
Maintenant le démarrage proprement dit :
sudo /etc/init.d/squid start
Et la réponse doit être : Starting Squid HTTP proxy squid [ok]
DansGuardian
Deux autres solutions sont d'utiliser DansGuardian via une passerelle tel qu'expliqué sur cette page ou d'utiliser DansGuardian directement sur le pc naviguant sur le net (solution plus simple à mettre en place).
OpenDNS
- www.opendns.com - (en anglais)
La technique est différente, il s'agit ici d'utiliser le service DNS qui transforme une adresse ( ex "http://ubuntu-fr.org" en adresse machine : "80.125.12.55" ). Du coup PAS DE LOGICIEL à installer sur l'ordi, aucune baisse de performances. La démarche est simplement de rajouter ce DNS à votre configuration réseau. Il faut bien sûr que le compte de l'enfant ne lui permette pas d'aller modifier ce réglage.
Ci-dessous la traduction en français
Ubuntu
- Faites un clic-droit sur l' "icône réseau"(situé en haut à droite, par défaut) et cliquez sur "Modification des Connexions" pour ouvrir le Gestionnaire des connexions réseau.
- Choisissez le type de connexion dont vous disposez. Pour cet exemple, nous allons utiliser "Filaire".
- Sous "Filaire", sélectionnez "Auto Etho 'et cliquez sur " Modifier ".
- Dans la fenêtre 'Modification Auto Etho', cliquez sur l'onglet «Paramètres IPv4".
- Sous "Paramètres IPv4", changer la méthode 'Adresses automatiques uniquement (DHCP)".
- Mettez ces adresses comme Serveurs DNS : 208.67.222.222, 208.67.220.220
- Cliquez sur "OK" et redémarrez votre machine. Vous pouvez ensuite visiter http://welcome.opendns.com pour confirmer que vous utilisez OpenDNS.
Pour éviter que vos réglages soient révoqués après redémarrage, ou après des périodes d'inactivité, il peut être nécessaire de faire les modifications suivantes par l'intermédiaire de la ligne de commande :
$ sudo cp /etc/resolv.conf /etc/resolv.conf.auto $ gksudo gedit /etc/dhcp3/dhclient.conf # Ajoutez la ligne suivante au document prepend domain-name-servers 208.67.222.222,208.67.220.220; # enregistrez et quittez $ sudo ifdown eth0 && sudo ifup eth0
Il peut être nécessaire de changer eth0 pour votre propre interface réseau si elle utilise un nom non-standard.
OpenDNS et adresse IP dynamique
Une fois que vous avez créé un compte sur OpenDNS, il faut associer à ce compte votre adresse IP. Si vous avez une adresse IP dynamique la mise à jour automatique de cette association peut se faire :
via une simple requête WEB lancée automatiquement toutes les 10 minutes
$ sudo crontab -e # Ajoutez la ligne suivante au document (voir doc vi ou nano) */10 * * * * wget -O - -q --http-user=opendnslogin --http-passwd=opendnspassword https://updates.opendns.com/nic/update # enregistrez et quittez (voir doc vi ou nano)
« opendnslogin » est à remplacer par le login de votre compte OpenDNS
« opendnspassword » est à remplacer par le mot de passe de votre compte OpenDNS
avec ddclient
Installez les paquets ddclient.
éditez le fichier /etc/ddclient.conf
# /etc/ddclient.conf ssl=yes # use ssl-support use=web, web=whatismyip.org protocol=dyndns2 server=updates.opendns.com login=opendnslogin password='opendnspassword' home
« opendnslogin » est à remplacer par le login de votre compte OpenDNS « opendnspassword » est à remplacer par le mot de passe de votre compte OpenDNS
éditez le fichier /etc/default/ddclient
# Configuration for ddclient scripts # generated from debconf on mardi 22 décembre 2009, 18:06:36 (UTC+0100) # # /etc/default/ddclient # Set to "true" if ddclient should be run every time a new ppp connection is # established. This might be useful, if you are using dial-on-demand run_ipup="true" # Set to "true" if ddclient should run in daemon mode run_daemon="true" # Set the time interval between the updates of the dynamic DNS name in seconds. # This option only takes effect if the ddclient runs in daemon mode. daemon_interval="600"
Vérifiez que run_daemon est bien sur true
vous pouvez tester le client avec
sudo ddclient -v
et relancer le daemon
sudo /etc/init.d/ddclient restart
OpenDNS et session utilisateur
Il est possible de faire en sorte que le filtrage ne s’applique que si la session d'un utilisateur bien défini est ouverte.
Pour cela il faut créer un script bash et deux fichiers DNS (resolv), un pour les utilisateurs non restreints et un pour l’utilisateur à restreindre.
Dans l’exemple ci-dessous le script s’appelle « opendns », le fichier DNS non restreint « resolv.adult » et restreint « resolv.child »
Créer le fichier /etc/resolv.child :
$ sudo gedit /etc/resolv.child
avec les lignes suivantes :
# generated by opendns - resolv.child # /usr/sbin/opendns # /etc/resolv.child # /etc/resolv.adult # link /etc/NetworkManager/dispatcher.d/opendns # line opendns in crontab as root (sudo crontab -e) # line ALL ALL=NOPASSWD:/usr/sbin/opendns in /etc/sudoers (sudo visudo) nameserver 208.67.222.222 nameserver 208.67.220.220
Propriétaire : root via chown ; Permissions : 644 via chmod
$ sudo chown root:root /etc/resolv.child $ sudo chmod 644 /etc/resolv.child
Créer le fichier /etc/resolv.adult :
$ sudo gedit /etc/resolv.adult
Avec les lignes suivantes :
# generated by opendns - resolv.adult # /usr/sbin/opendns # /etc/resolv.child # /etc/resolv.adult # link /etc/NetworkManager/dispatcher.d/opendns # line opendns in crontab as root (sudo crontab -e) # line ALL ALL=NOPASSWD:/usr/sbin/opendns in /etc/sudoers (sudo visudo) nameserver x.x.x.x nameserver y.y.y.y
x.x.x.x et y.y.y.y sont à remplacer par les DNS de votre FAI
Propriétaire : root via chown ; Permissions : 644 via chmod
$ sudo chown root:root /etc/resolv.adult $ sudo chmod 644 /etc/resolv.adult
Créer le fichier /usr/sbin/opendns :
$ sudo gedit /usr/sbin/opendns
avec les lignes suivantes :
#!/bin/bash # /usr/sbin/opendns # /etc/resolv.child # /etc/resolv.adult # link /etc/NetworkManager/dispatcher.d/opendns # line opendns in crontab as root (sudo crontab -e) # line ALL ALL=NOPASSWD:/usr/sbin/opendns in /etc/sudoers (sudo visudo) if users | grep -c "child" > /dev/null ; then wget -O - -q --http-user=opendnslogin --http-passwd=opendnspassword https://updates.opendns.com/nic/update cp /etc/resolv.child /etc/resolv.conf else cp /etc/resolv.adult /etc/resolv.conf fi
A la ligne
if users | grep -c "child" > /dev/null ; then
"child" est a remplacer par le nom de l'utilisateur que vous souhaitez restreindre (garder les guillemets)
« opendnslogin » est à remplacer par le login de votre compte OpenDNS
« opendnspassword » est à remplacer par le mot de passe de votre compte OpenDNS
Ce script remplacera les DNS normaux par les DNS de OpenDNS si la session « child » est ouverte et mettra à jour votre adresse IP (dynamique) sur OpenDNS. Si la session « child » est inactive les DNS seront ceux de votre FAI et il n’y aura pas de mise à jour de votre adresse IP sur OpenDNS.
Propriétaire : root via chown ; Permissions : 755 via chmod
$ sudo chown root:root /usr/sbin/opendns $ sudo chmod 755 /usr/sbin/opendns
Il faut ensuite permettre aux utilisateurs de lancer le script en tant que root sans avoir à taper le mot de passe :
$ sudo visudo # Ajoutez la ligne suivante au document (voir doc vi ou nano) : ALL ALL=NOPASSWD:/usr/sbin/opendns # enregistrez et quittez (voir doc vi ou nano)
Ajouter un lien dans /etc/NetworkManager/dispatcher.d/ pour que le script s'exécute à chaque changement d'état du réseau avec la commande :
$ sudo ln /usr/sbin/opendns /etc/NetworkManager/dispatcher.d/opendns
Ajouter la ligne dans le cron pour que le script s'exécute toute les 10 minutes :
$ sudo crontab -e # Ajoutez la ligne suivante au document (voir doc vi ou nano) */10 * * * * /usr/sbin/opendns # enregistrez et quittez (voir doc vi ou nano)
Dans ce cas, le script opendns effectuant lui-même la mise à jour de l’adresse IP sur OpenDNS, il n’est plus nécessaire de mettre la ligne d’update automatique dans le crontab décrite plus haut (OpenDNS et adresse IP dynamique).
Vous pouvez aussi mettre "sudo opendns" dans les programmes de démarrage de la session « child » (que « child » pourrait quand même désactiver, c'est pour cela que l’on utilise aussi le crontab)
Voir aussi
- Nanny : le contrôle parental simplifié avec interface graphique.
—-
Contributeurs : Roozeec, Boris Le Hachoir, Fabien26, Furious-therapy, sensouci.
Le contenu de ce wiki est sous licence : CC BY-SA v3.0


