test
Installer un "Contrôle parental" pour le réseau sur Raspberry Pi

Attention : ceci est une ébauche !!



Remarque : la 1ère version de de tutoriel utilisait un NAS Synology; bien que ce dispositif fonctionne à merveille depuis plusieurs années, il est apparu que l'installation est peu reproductible sur des modèles Synology différents. A l'inverse, le Raspberry Pi héberge un "vrai" Linux, ce qui rend l'installation totalement standard et reproductible.

Définition : le but est d'installer un contrôle parental, c'est à dire un dispositif pour filtrer les sites à caractère pornographique, violent, raciste,  anti-sémite...

Description : Le filtrage décrit ici permet de sécuriser la globalité du réseau, et pas seulement un ordinateur. Il utilise le même mécanisme qui est utilisé dans les établissements scolaire de l'Education Nationale. Il utilise pour cela , un Raspberry Pi 2, choisi pour ses performances et sa faible consommation en énergie électrique.


Information sur :  le contrôle parental
Il n'est pas nécessaire de préciser que les parents souhaitent protéger leurs enfants des contenus inapropriés que l'on peut rencontrer par inadvertance sur internet.

voir l'article sur Wikipedia

Pour un établissement qui recoit du public mineur, ce type de filtrage est une obligation légale. (cf. la circulaire MEN N°2004-035 du 18/02/2004)

Remarque : les choix de filtrage indiqués dans ce tutoriel ne le sont qu'à titre d'exemple; il vous appartient de sélectionner ce que vous voulez filtrer ou non, dans le respect de la loi.


Information sur :  le Raspberry Pi
Le Raspberry Pi est un ordinateur monocarte à faible coût; il embarque un processeur ARM à 2 ou 4 coeurs : ses performances sont suffisantes pour la plupart des applications domestiques.

Sa consommation électrique de l'ordre de 2-3 W est très raisonnable...


Information sur :  Squid3, Squidguard
Squid3 est un logiciel proxy; son rôle est d'optimiser l'utilisation de la bande passante de la connexion internet, en faisant office de cache et de mandataire.

Squidguard est le complément naturel de Squid : il ajoute le filtrage des sites en interdisant l'accès aux contenus inapropriés

ClamAV est l'antivirus intégré dans ce système, il détecte les virus en provenance d'internet


SOMMAIRE
  1. Préparation du Raspberry Pi
  2. Préparation de l'infrastructure du réseau
  3. Installation des logiciels requis
  4. Configuration de squidguard
  5. Perfectionnements et maintenance


Chapitre 1.

Ce chapitre traite des prerequis à ce tutoriel
Préparation du Raspberry Pi



Installation du Raspberry Pi

testé avec Raspbian "Jessie" (squid 3.4.8) et Raspbian "Wheezy" (squid 3.1.20).

Voir le tutoriel sur ce site.

La configuration se fait à distance, depuis un poste Windows ou Linux; connecte-toi (en tant que root) au Raspberry Pi :

 1) avec WinSCP (pour l'édition de fichiers)
 2) avec Putty (pour les commandes)



Configurer le réseau du Raspberry Pi

La configuration est un peu particulière car on a besoin de 2 adresses IP sur le Raspi

L'exemple donné ci-contre suppose que :
- la box (routeur) internet a pour adresse : 192.168.1.1
- qu'elle fait office de serveur DNS

La commande "ifconfig" permet de vérifier l'interface eth0 et l'interface eth0:1 ont les bonnes adresses

Remarque : la configuration décrite ici est valable pour Raspbian "Jessie"; si tu utilises Raspbian "Wheezy", les deux interfaces eth0 et eth0:1 peuvent être configurées dans /etc/network/interfaces

Ouvre le fichier "/etc/dhcpcd.conf" depuis WinSCP et ajoute/modifie ces lignes :

# Custom static IP address for eth0.
interface eth0
static ip_address=192.168.1.200/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Enregistrer les changements



Ouvre le fichier "/etc/network/interfaces" depuis WinSCP et ajoute/modifie ces lignes :

auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
address 10.10.10.254
netmask 255.255.255.0

Enregistrer les changements

reboot

ifconfig




Conclusion :
Le Raspberry Pi est prêt pour l'installation du système


Chapitre 2.

Ce chapitre explique comment obliger toutes les requêtes internet à passer via le Raspberry Pi
Préparation de l'infrastructure du réseau


Nous allons créer un point de passage obligatoire entre la "box" et les ordinateurs/tablettes/smartphones de la maison.

C'est ce qu'illustre le schéma ci-contre;

le Pi prend le rôle de DHCP ce qui lui permet de s'imposer comme "passerelle par défaut" pour tous les clients, PC, tablettes, etc..

Il peut de ce fait intercepter et filtrer les requêtes internet

Remarque : le point d'accès WiFi sera idéalement séparé de la box, mais ce n'est strictement obligatoire
synoptique_reseau_squid


Désactiver la fonction DHCP sur la "box" internet.

La méthode dépend du type de "box". Ici le cas d'une "SFR box"

Tout le réseau sera désormais géré par le DHCP du Raspberry Pi

Attention : certaines box "n'apprécient" pas qu'on désactive le DHCP
  - nécessite de configurer le module TV manuellement ??
  - la dernière SFRBox ne laisse pas passer les trames DHCP du PI !! il faut donc un AP Wifi séparé
sfr_dhcp_off


Installer IPTABLES sur le RPi

iptables est le logiciel indispensable pour la redirection "transparente" et pour le NAT (masquage d'adresse) car certaines "box" ne supportent pas le routage des adresses locales.

note : sur certaines versions de iptables-persistent, la commande est : /etc/init.d/netfilter-persistent save
apt-get install iptables-persistent

iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE

/etc/init.d/iptables-persistent save


Configurer le réseau du Raspberry Pi:

 
  - activer le routage (ip_forward)

 
Après avoir effecté ces modifications, redémarrer le RPi

Ouvre le fichier "/etc/rc.local" depuis WinSCP et ajoute/modifie ces lignes :

#!/bin/sh

echo 1 > /proc/sys/net/ipv4/ip_forward

exit 0
Enregistrer les changements

reboot


Installer la fonction DHCP sur le RPi.

La plage d'IP attribuée par le Pi :
- 10.10.10.1 à 10.10.10.100;

La nouvelle passerelle des clients internet de la maison est le Pi à l'adresse 10.10.10.254

L'exemple donné ci-contre suppose que :
- la box (routeur) internet a pour adresse : 192.168.1.1
- qu'elle fait office de serveur DNS
apt-get install  isc-dhcp-server

nano /etc/dhcp/dhcpd.conf

ci-dessous le contenu à ajouter ou modifier dans le fichier dhcpd.conf

# option definitions common to all supported networks...
option domain-name "myhome.lan";
option domain-name-servers 192.168.1.1;
option routers 10.10.10.254;
option subnet-mask 255.255.255.0;

shared-network myhomenet {

subnet 10.10.10.0 netmask 255.255.255.0 {
  range
10.10.10.1 10.10.10.100;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
}
}
pour enregistrer les changement taper = Ctrl+"O" ; puis Ctrl+"X" pour sortir

reboot

/etc/ini /etc/init.d/iptables-persistent savet.d/iptables-persistent save /etc/init.d/iptables-persistent save


Conclusion Le réseau est maintenant géré par le RPi. C'est lui qui attribue les paramètres IP aux machines qui se connectent.

Toutes les communications internet passent désormais par lui; cependant, pour le moment, il ne filtre rien


Chapitre 3.

Ce chapitre explique comment installer les logiciels requis pour le fonctionnement de SquidGuard
Installation des logiciels requis pour le filtrage


Introduction
L'installation du filtrage requiert l'installation de plusieurs logiciels
  - Squid3
  - Squidguard


Création d'un cache pour Squid3

(source : idée trouvée sur homepiserver.net)
mkdir /cache

Ouvre le fichier "/etc/fstab" depuis WinSCP et ajoute cette ligne :

tmpfs /cache tmpfs defaults,noatime,nosuid,size=200m 0 0

Enregistrer les changements

reboot




Installation de Squidguard et configuration de Squid3


apt-get install squid3

apt-get install squidguard

service squid3 stop

Ouvre le fichier "/etc/squid3/squid.conf" depuis WinSCP et ajoute/modifie ces lignes :

acl LocalNet  src 10.10.10.0/24

#modifier cette ligne pour débloquer les accès :
#placer juste avant
: "http_access  deny all"
http_access  allow  LocalNet

http_port 3128

#http_port 3129 intercept

dns_nameservers 8.8.8.8

url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf

url_rewrite_children 10

cache_dir ufs /cache 160 16 100

Enregistrer les changements

squid3 -z

service squid3 start



Conclusion Nous avons installé les 2 logiciels nécessaires au filtrage
le proxy squid3 est déjà opérationel, mais le filtrage n'est pas configuré


Chapitre 4.

Ce chapitre explique comment Configurer squidGuard
Configuration de squidGuard


Introduction

Ouvrir le fichier "/etc/squidguard/squidGuard.conf"


  Repère et ouvre le fichier depuis la session WinSCP


Configuration des filtres

Tu peux copier/coller la configuration ci-contre dans ton fichier squidGuard.conf

dest adult {
    domainlist    blacklists/adult/domains
    urllist        blacklists/adult/urls
    expressionlist    blacklists/adult/expressions
}

dest agressif {
    domainlist    blacklists/agressif/domains
    urllist    blacklists/agressif/urls
}
dest arjel {
    domainlist    blacklists/arjel/domains
}
dest astrology {
    domainlist    blacklists/astrology/domains
    urllist    blacklists/astrology/urls
}
dest audio-video {
    domainlist    blacklists/audio-video/domains
    urllist    blacklists/audio-video/urls
}
dest bank {
    domainlist    blacklists/bank/domains
}
dest blog {
    domainlist    blacklists/blog/domains
    urllist    blacklists/blog/urls
}
dest celebrity {
    domainlist    blacklists/celebrity/domains
    urllist    blacklists/celebrity/urls
}
dest chat {
    domainlist    blacklists/chat/domains
    urllist    blacklists/chat/urls
}
dest child {
    domainlist    blacklists/child/domains
    urllist    blacklists/child/urls
}
dest cleaning {
    domainlist    blacklists/cleaning/domains
    urllist    blacklists/cleaning/urls
}
dest cooking {
    domainlist    blacklists/cooking/domains
}
dest dangerous_material {
    domainlist    blacklists/dangerous_material/domains
    urllist    blacklists/dangerous_material/urls
}
dest dating {
    domainlist    blacklists/dating/domains
    urllist    blacklists/dating/urls
}
dest drogue {
    domainlist    blacklists/drogue/domains
    urllist    blacklists/drogue/urls
}
dest filehosting {
    domainlist    blacklists/filehosting/domains
    urllist    blacklists/filehosting/urls
}
dest financial {
    domainlist    blacklists/financial/domains
    urllist    blacklists/financial/urls
}
dest forums {
    domainlist    blacklists/forums/domains
    urllist    blacklists/forums/urls
}
dest gambling {
    domainlist    blacklists/gambling/domains
    urllist    blacklists/gambling/urls
}
dest games {
    domainlist    blacklists/games/domains
    urllist    blacklists/games/urls
}
dest hacking {
    domainlist    blacklists/hacking/domains
    urllist    blacklists/hacking/urls
}
dest jobsearch {
    domainlist    blacklists/jobsearch/domains
}
dest lingerie {
    domainlist    blacklists/lingerie/domains
}
dest liste_bu {
    domainlist    blacklists/liste_bu/domains
    urllist    blacklists/liste_bu/urls
}
dest malware {
    domainlist    blacklists/malware/domains
    urllist    blacklists/malware/urls
}
dest manga {
    domainlist    blacklists/manga/domains
    urllist    blacklists/manga/urls
}
dest marketingware {
    domainlist    blacklists/marketingware/domains
    urllist    blacklists/marketingware/urls
}
dest mixed_adult {
    domainlist    blacklists/mixed_adult/domains
    urllist    blacklists/mixed_adult/urls
}
dest mobile-phone {
    domainlist    blacklists/mobile-phone/domains
    urllist    blacklists/mobile-phone/urls
}
dest phishing {
    domainlist    blacklists/phishing/domains
    urllist    blacklists/phishing/urls
}
dest press {
    domainlist    blacklists/press/domains
    urllist    blacklists/press/urls
}
dest publicite {
    domainlist    blacklists/publicite/domains
    urllist    blacklists/publicite/urls
}
dest radio {
    domainlist    blacklists/radio/domains
    urllist    blacklists/radio/urls
}
dest reaffected {
    domainlist    blacklists/reaffected/domains
    urllist    blacklists/reaffected/urls
}
dest redirector {
    domainlist    blacklists/redirector/domains
    urllist    blacklists/redirector/urls
}
dest remote-control {
    domainlist    blacklists/remote-control/domains
    urllist    blacklists/remote-control/urls
}
dest sect {
    domainlist    blacklists/sect/domains
    urllist    blacklists/sect/urls
}
dest sexual_education {
    domainlist    blacklists/sexual_education/domains
    urllist    blacklists/sexual_education/urls
}
dest shopping {
    domainlist    blacklists/shopping/domains
    urllist    blacklists/shopping/urls
}
dest social_networks {
    domainlist    blacklists/social_networks/domains
    urllist    blacklists/social_networks/urls
}
dest sports {
    domainlist    blacklists/sports/domains
}
dest strict_redirector {
    domainlist    blacklists/strict_redirector/domains
    urllist    blacklists/strict_redirector/urls
}
dest strong_redirector {
    domainlist    blacklists/strong_redirector/domains
    urllist    blacklists/strong_redirector/urls
}
dest tricheur {
    domainlist    blacklists/tricheur/domains
    urllist    blacklists/tricheur/urls
}
dest warez {
    domainlist    blacklists/warez/domains
    urllist    blacklists/warez/urls
}
dest webmail {
    domainlist    blacklists/webmail/domains
    urllist    blacklists/webmail/urls
}


Création d'une ACL

Dans le fichier squidGuard.conf,

Créer une ACL pour obtenir quelque chose comme ca =>

tu choisis quelles catégories tu veux interdire; il y en a beaucoup plus que sur l'exemple ci-contre !

"redirect" est l'URL de la page Web qui apparaitra quand une requête aura été rejettée : à personaliser !
src localNetwork {
    ip    192.168.0.0/16
    ip    10.10.10.0/24
    log    blocked.log
}

acl {
    localNetwork {
        pass    !adult  !mixed_adult  all
        redirect    http://www.google.fr
    }
    default {
        pass    none
        redirect    http://www.google.fr
    }

 log    block
}


Installation des "blacklists"

(Patience : cette opération peut être assez longue!)
cd /var/lib/squidguard/db/

wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz

tar xzf blacklists.tar.gz

chown -R proxy:proxy blacklists

sudo -u proxy squidGuard -c /etc/squidguard/squidGuard.conf -C all



Application des modifications Après l'opération précedente, il faut vérifier que tout  s'est bien passé en consutant le fichier /var/log/squidguard/squidguard.log.

Les dernières lignes du fichier doivent ressembler à ceci :

2016-03-22 18:16:31 [3485] INFO: squidGuard 1.5 started (1458666684.135)
2016-03-22 18:16:31 [3485] INFO: db update done
2016-03-22 18:16:31 [3485] INFO: squidGuard stopped (1458666991.299)

si ce n'est pas le cas, corriger en tenant compte du message d'erreur, puis relancer "sudo -u proxy squidGuard -c /etc/squidguard/squidGuard.conf -C all"

Quand il n'y a plus de message d'erreur faire
squid3 stop
squid3 start


Conclusion
A ce stade, le filtrage est opérationnel, uniquement si tu spécifies dans les paramètres du navigateur internet du PC le proxy :

 - adresse :  l'adresse ip du Rpi
 - port : 3128

Ou bien, sur un smartphone/tablette Android il faut aller sur les paramètre "wifi" => "modifier le réseau" => "Avancés" => "proxy manuel " et entrer les paramètres comme iindiqué ci-dessus.


Chapitre 5.

Ce chapitre explique comment améliorer le système
Perfectionnements et maintenance


Introduction
Perfectionnement  :
  - mise en place du proxy transparent pour éviter d'avoir à configurer pc et tablettes clients

Maintenance :
  - Mise à jour des listes de sites "filtrés"


Mise en place du proxy transparent :

redirection iptables


Nous ajoutons une règle dans le fichier rc.local pour rediriger les requêtes à destination du serveur web (port 80) vers le service squid (port 3128)


Note : bien que cela fonctionne, il est préférable, quand c'est possible (ex : paramètre "wifi" sur Android) de configurer le proxy de façon explicite sur la machine cliente.

iptables -t nat -A PREROUTING  -p tcp  --dport 80 -s 192.168.1.0/24 -j ACCEPT

iptables -t nat -A PREROUTING  -p tcp  --dport 80 -s 10.10.10.254  -j ACCEPT

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j REDIRECT --to-port 3129

/etc/init.d/iptables-persistent save


Mise en place du proxy transparent :

configuration de squid
(optionnel)

Il faut modifier une ligne du fichier /etc/squid3/squid.conf :

décommentes la ligne contenant le mot "intercept ", comme ceci :

http_port 3129  intercept


Mise à jour des "blacklist"

Information
Les listes dites "de Toulouse" sont disponibles à cette adresse : http://dsi.ut-capitole.fr/blacklists/

Pour mettre à jour, reprendre la section "installation des blacklists"


Conclusion
Le filtrage est opérationnel pour tous les postes du réseau, sans qu'aucune configuration manuelle ne soit nécessaire sur ceux-ci.

Les listes de sites filtrés peut être mis à jour en téléchargeant la "liste de Toulouse"