Squid et SquidGuard : Filtrer les accès au net !
Pré requis
Cette article décrit les différentes étapes de configuration pour mettre en place un serveur mandataire (proxy) avec filtrage de contenu. J’ai utilisé la distribution DEBIAN SARGE pour réaliser cette article.
Pour mener à bien l’installation, vérifier que vous êtes bien ROOT pour disposer de tous les accès et autorisations nécessaires.
Vous devez aussi avoir 2 interfaces ethernets configurées :
- une pour recevoir les demandes du réseau local
- une autre pour aller sur Internet
Il est aussi possible de n’utiliser qu’une seule interface en utilisant des régles de routages avec iptables.
Il vous faut aussi disposer d’un serveur Apache configuré et fonctionnel pour permettre à squidGuard de signaler les pages non autorisées.
Installation de Squid
Pour installer le serveur proxy squid, on utilise la commande :
apt-get install squid
Voilà l’installation est faite et squid est déjà lancé sur votre système.
Pour vérifier taper :
ps x
Cette commande vous donnera la liste des processus en cours d’execution dont squid qui apparaît comme ceci :
PID TTY STAT TIME COMMAND
989 ? Ss 0:00 /usr/sbin/squid -D -sYC
Configuration Basique de Squid
La configuration de squid est un jeu d’enfant et ne nécessite l’ajout que de 3 lignes !
Ouvrez le fichier de configuration de squid :
pico /etc/squid/squid.conf
Vous pouvez utiliser vi selon vos habitudes.
Maintenant il va falloir trouver les lignes acl (Access Control List) et ajouter les informations pour permettre à squid d’identifier le réseau à gérer. Après la dernière ligne des acl, ajouter :
acl mon_reseau src 192.168.0.0/255.255.255.0
Mon réseau de test à pour adresse 192.168.0.0 et un masque 255.255.255.0 qui correspond à des postes ayant pour adresses IP 192.168.0.1, 192.168.0.2, …
Ensuite il faut autoriser squid à fournir un accès aux ressources Internet. Pour cela, il faut rechercher à la suite des acl, la partie http_access.
Juste avant :
http_access deny all
Ajouter :
http_access allow mon_reseau
On autorise tout ce qui arrive de mon réseau définit plus haut à se connecter à Internet.
Voilà la première étape de configuration est terminée !
Pour tester, entrer dans votre navigateur favoris les paramétres de votre serveur proxy à savoir son adresse ip et son port qui est par défaut 3128.
Configuration Avancée de Squid
Vous souhaitez authentifier les utilisateurs qui accédent à Internet ?
2 méthodes d’authentification existent :
- par un annuaire LDAP (Niveau Experimenté)
- par base mysql (Niveau Moyen)
- par un simple fichier (Niveau Débutant)
L’interêt de mettre en place une authentification est de n’autoriser que certaines personnes à utiliser Internet mais aussi à savoir qui accéde à quoi. Ces informations sont conservées dans les fichiers journaux (.log) suivants :
/var/log/squid/cache.log
/var/log/squid/access.log
ATTENTION : Si vous mettez en place cette solution en entreprise, le personnel doit en être informé car il permet de tracer un utilisateur, savoir ce qu’il a fait, etc. (Plus d’information sur le site de la CNIL)
Ces fichiers peuvent donc faire l’objet d’une déclaration préalable à la CNIL.
Des utilitaires permettent d’analyser ces logs et construisent des statisques d’accès pour voir quels sont les ressources les plus souvent sollicitées, le temps passé sur Internet par utilisateurs, …
Authentification par fichier
Pour mettre en place cette authentification, on va créer un fichier qui va contenir les utilisateurs et leurs mots de passe avec la commande :
touch /etc/squid/users
Pour créer les utilisateurs on utilise la commande :
htpasswd -b /etc/squid/users
Un couple nom d’utilisateur, mot de passe est alors ajouté dans le fichier /etc/squid/users sous cette forme :
julien:r5vy7DrQWreG2
Maintenant il faut que squid charge le modulepermettant d’authentifier les utilisateurs.
Pour cela, on ajoute les lignes suivantes dans le fichier /etc/squid/squid.conf :
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users
- Squid utilisera 5 instances pour authentifier les utilisateurs (children 5),
- la boite de dialogue aura pour nom “Squid proxy-caching web server” (realm),
- le module à utiliser pour authentifier est “/usr/lib/squid/ncsa_auth” suivi par l’emplacement du fichier contenant les utilisateurs “/etc/squid/users” (program)
Maintenant, il faut redémarrer le serveur pour prendre en compte les modifications avec la commande :
/etc/init.d/squid restart
Pour vérifier le bon fonctionnement de squid vous pouvez taper :
ps aux
Cette commande vous affichera tous les processus tournant sur votre machine :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
proxy 998 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 999 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 1000 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 1001 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 1002 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
On distingue bien les 5 instances lancées par squid pour l’authentification.
Il ne reste plus qu’à tester avec un navigateur internet ayant les paramètres du proxy. Si tout ce passe bien une fenêtre, vous demandant un nom d’utilisateur et un mot de passe devrait apparaître. Une fois logué, vous pouvez surfer tranquilement sur internet.
Authentification par MySQL
TO DO
Authentification par LDAP
TO DO
Configuration de SquidGuard
Voici les paquets à installer pour squidGuard :
apt-get install squidguard db4.2
Lors de l’installation, il est demandé de choisir le type de base de données à utiliser. Choississez DB4.1. ou plus récent puis demandez que les bases soient reconstruites.
Une mise à jour des listes noires est néanmoins fortement recommandée.
Les listes noires françaises sont maintenues par l’université de Toulouse accessible ici :
ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
Pour mettre à jour vos listes noires à jour, allez dans le repertoire des bases de données :
cd /var/lib/squidguard/db
Puis lancer le téléchargement de l’archive :
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
Il faut maintenant décompresser l’archive :
tar xzvf blacklists.tar.gz
La décompression va créer un répertoire blacklists contenant toutes les bases par catégories de filtres : jeux, adultes, warez, …
Nous allons pour l’exemple ne filtrer que les sites dédiés aux jeux contenus dans la base gambling.
Pour cela, il faut configurer squidGuard.conf qui se trouve dans :
/etc/squid/squidGuard.conf
Attention à la casse des caractéres, sous linux, elle est très importante !
Premierement, on indique le chemin des bases de données :
dbhome /var/lib/squidguard/db
logdir /var/log/squid
Puis on crée un groupe source, c’est à dire les personnes visées par cette régle :
ip 192.168.0.0/24
}
- “src” indique que l’on définit une source
- “lan” est le nom de la source sous squidGuard
- “ip” est affecté par l’adresse du réseau suivi par son masque en CIDR (24 pour un masque 255.255.255.0)
Ensuite on définit la base contenant les URI de jeux :
dest jeux {
urllist gambling/urls
domainlist gambling/domains
}
- “dest” définit un groupe de destination
- “jeux” le nom du groupe de destination
- “urllist” et “domainlist” indique l’emplacement des fichiers contenant les URI dans les bases
Ensuite on crée les ACL pour donner les consignes à appliquer pour le filtrage :
lan {
pass !jeux
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
}
default {
pass none
redirect http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
}
}
- “acl” définit la liste des consignes
- pour la source “lan” tout ceux qui ne passe pas jeux (! exprime la négation) donc qui consulte une page interdite sont redirigés vers http://127.0.0.1/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
J’ai aussi ajouté une régle default par sécurité.
Par défaut, on bloquera tout utilisateur qui ne correspond à aucune règle pour plus de sécurité.
Assurez vous maintenant que apache est installé et correctement configuré pour pouvoir utiliser le fichier squidGuard.cgi fournit par squidGuard en cas de blocage d’un utilisateur.
Pour installer le cgi taper les commandes suivantes :
zcat /usr/share/doc/squidguard/examples/squidGuard.cgi.gz > /usr/lib/cgi-bin/squidGuard.cgi
chown www-data /usr/lib/cgi-bin/squidGuard.cgi
chmod 700 /usr/lib/cgi-bin/squidGuard.cgi
On déclare squidGuard dans squid pour qu’il puisse l’utiliser. Pour cela, on ajoute dans /etc/squid/squid.conf la ligne suivante :
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
On redémarre le serveur pour prendre en compte les modifications :
/etc/init.d/squid restart
On peut verifier que squid a bien redemarré en tappant :
ps aux
Concernant notre proxy, on trouvera les informations suivantes :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
proxy 992 0.0 3.6 7344 4696 ? S 10:34 0:01 (squid) -D -sYC
proxy 993 0.0 0.6 2912 872 ? Ss 10:34 0:00 (squidGuard) -c /etc/squid/squidGuard.conf
proxy 994 0.0 0.6 2912 872 ? Ss 10:34 0:00 (squidGuard) -c /etc/squid/squidGuard.conf
proxy 995 0.0 0.6 2912 872 ? Ss 10:34 0:00 (squidGuard) -c /etc/squid/squidGuard.conf
proxy 996 0.0 0.6 2912 872 ? Ss 10:34 0:00 (squidGuard) -c /etc/squid/squidGuard.conf
proxy 997 0.0 0.6 2912 872 ? Ss 10:34 0:00 (squidGuard) -c /etc/squid/squidGuard.conf
proxy 998 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 999 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 1000 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 1001 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
proxy 1002 0.0 0.3 2164 456 ? Ss 10:34 0:00 (ncsa_auth) /etc/squid/users
Pour tester le proxy avec filtrage, essayez dans un navigateur de taper l’adresse http://www.pogo.com .
Si tout va bien le proxy va afficher une page informant l’utilisateur qu’il n’a pas le droit de visiter cette adresse.