SquidGuard
| Fiche express | |
|---|---|
| Domaine | Filtrage des accès Web (redirecteur d'URL pour Squid) |
| Paquet Debian/Ubuntu | squidguard
|
| Config principale | /etc/squid/squidGuard.conf
|
| Voir aussi | Squid · Squid authentification · Passerelle internet linux |
SquidGuard est un module complémentaire de Squid : un redirecteur d'URL qui vient s'attacher au proxy pour filtrer les accès Web avant que la requête ne soit traitée par le cache. Il ne remplace pas Squid, il vient étendre ses capacités de contrôle d'accès — Squid seul ne sait filtrer que sur IP, port, horaire ou méthode HTTP, pas sur le contenu des URLs demandées.
(à vérifier) le projet SquidGuard est peu maintenu depuis le début des années 2010. Pour un déploiement neuf, comparer avec des alternatives plus actives comme e2guardian avant de s'engager dessus.
Fonctionnalités
- Filtrage par liste blanche (seuls les sites listés sont autorisés)
- Filtrage par liste noire (tout le Web est autorisé sauf les sites listés)
- Filtrage par mots-clés présents dans l'URL
- Blocage des accès effectués directement en adresse IP (contournement de nom de domaine)
- Redirection vers une page d'information lorsqu'un site est bloqué
- Redirection des bannières publicitaires vers une image locale vide
- Règles d'accès différenciées selon les jours et les horaires
- Maintenance de listes noires par catégories (mises à jour périodiques)
Installation
apt-get install squidguard
Les listes noires ne sont pas fournies avec le paquet : le répertoire
/var/lib/squidguard/db/ est vide après installation. Plusieurs blacklists libres
existent, dont celle maintenue par l'Université Toulouse 1 Capitole (UT1), une référence
francophone régulièrement mise à jour et largement utilisée en établissement scolaire :
cp /chemin/vers/blacklists.tar.gz /var/lib/squidguard/db/
cd /var/lib/squidguard/db/
tar -xvzf blacklists.tar.gz
Mise à jour automatique hebdomadaire via un script cron
(/etc/cron.weekly/maj_squidguard_blacklists) :
#!/bin/sh
# Télécharge chaque semaine les listes noires pour SquidGuard et met à jour les bases
if [ -d /var/lib/squidguard ]; then
wget URL_DE_VOTRE_SOURCE_DE_BLACKLISTS -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 squid:squid /etc/squid /var/log/squid /var/spool/squid /var/lib/squidguard
systemctl restart squid
fi
Intégration à Squid
Déclarer le redirecteur dans squid.conf :
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_children 5
url_rewrite_children définit le nombre de processus redirecteurs lancés en
parallèle : trop peu et le processus principal de Squid attend un redirecteur libre ; trop et
la mémoire est gaspillée (chaque redirecteur consomme de l'ordre de 1 Mo). Squid plafonne de
toute façon ce nombre à 32.
Important : ne redémarrer Squid qu'une fois SquidGuard entièrement configuré, sinon le service refusera de démarrer sur une configuration de redirecteur incomplète.
La page de blocage affichée aux utilisateurs est généralement un script CGI, ce qui nécessite un serveur HTTP (Apache par exemple) sur la machine :
apt-get install apache2
cp /usr/share/doc/squidguard/examples/squidGuard.cgi.gz /usr/lib/cgi-bin/
gunzip /usr/lib/cgi-bin/squidGuard.cgi.gz
chmod +x /usr/lib/cgi-bin/squidGuard.cgi
Configuration
Structure générale
dbhome /var/lib/squidguard/db
logdir /var/log/squid
Indique à SquidGuard où trouver les listes noires et où écrire ses propres logs.
Plages horaires
# abréviations des jours : s=dim, m=lun, t=mar, w=mer, h=jeu, f=ven, a=sam
time horaires_ouverture {
weekly mtwhf 09:00 - 17:05
date *-*-01 09:00 - 17:05
}
Sources (groupes de clients)
Un groupe se définit par plage(s) d'adresses IP, ou par utilisateur si une authentification est déjà en place côté Squid (voir Squid authentification) :
src administrateurs {
ip 192.168.1.20
}
src enfants {
ip 192.168.1.30-192.168.1.40
}
src adultes {
ip 192.168.2.0/24
}
Classes de destination
Généralement une classe par liste noire :
dest good {
}
dest adulte {
domainlist adulte/domains
urllist adulte/urls
expressionlist adulte/expressions
redirect http://proxy.exemple.local/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
}
(corrigé) les exemples historiquement diffusés pour ce bloc contiennent souvent une
parenthèse fermante en trop (}) au lieu de }) — une simple faute de
frappe qui suffit à rendre la syntaxe invalide et le filtrage inopérant (SquidGuard laisse
alors tout passer par défaut).
ACL : qui a accès à quoi
acl {
administrateurs {
pass any
}
adultes within horaires_ouverture {
pass good !adulte any
} else {
pass any
}
default {
pass none
redirect http://proxy.exemple.local/cgi-bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+targetclass=%t+url=%u
}
}
Chaque groupe (source) peut se voir attribuer une période d'accès, des classes de destination interdites, une éventuelle réécriture d'URL, et une redirection vers une page expliquant le blocage.
Exemple minimal
Un fichier réduit à une seule source et une seule ACL : seule l'adresse IP déclarée a accès au Web, toute autre est redirigée.
dbhome /var/lib/squidguard/db
logdir /var/log/squid
src administrateur {
ip 192.168.1.20
}
acl {
administrateur {
pass any
}
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
}
}
Reconstruire les bases et recharger
Toute modification des listes ou du fichier de configuration nécessite de reconstruire les bases de données puis de signaler le changement à Squid :
su squid -s /bin/sh -c "squidGuard -C all"
squid -k reconfigure
Le fichier squidGuard.conf n'est pas permissif dans son interprétation : la
moindre erreur de syntaxe est sanctionnée par un filtrage inopérant (SquidGuard laisse tout
passer par défaut si sa configuration ne peut pas être chargée). De même, si une règle de
redirection pointe vers une destination injoignable, SquidGuard laisse le site initialement
demandé accessible plutôt que de bloquer.
Voir aussi
- Squid — le proxy sur lequel SquidGuard s'attache
- Squid authentification — combiner filtrage et authentification par utilisateur
- Passerelle internet linux — mise en place dans le contexte d'une passerelle complète
- Blacklists UT1 (Toulouse Capitole) — listes noires francophones maintenues