{{tag>netadmin sysadmin proxy web squid squidguard todo}}
====== Filtrage du web avec SquidGuard ======
:TODO_DOCUPDATE:
Squidguard est un plugin de filtrage d'URL à associer au programme Squid. Il faut installer et paramétrer le proxy Squid en premier lieu. La procédure est détaillé dans le wiki [[netadmin:proxy:squid:installer-squid3]].
Dans cette note, SquidGuard est installé sur une Debian 12 (bookworm).
===== Installation =====
apt install -y squidguard{,-doc}
/usr/bin/squidGuard -v
SquidGuard: 1.6.0 Berkeley DB 5.3.28: (September 9, 2013)
===== Configuration =====
==== Configuration Squid ====
Modifier le fichier de configuration de Squid ''/etc/squid/squid.conf'' pour qu'il utilise SquidGuard:
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
url_rewrite_children 10 startup=0 idle=1 concurrency=0
Valider la syntaxe après modification :
squid -k parse
==== Configuration SquidGuard ====
C'est dans le fichier de configuration **/etc/squidguard/squidGuard.conf** qu'on va déclarer :
* les plages horaires (''time'') ;
* les **sources** (''src'') : des adresse IP d’hôtes, de réseaux ou des utilisateurs (si Squid fonctionne en demandant aux utilisateurs de s’authentifier). Désigne les clients du service ;
* les **listes** (''dest'') : regroupe les domaines, URL et mots clé.
Via les ACLs va pouvoir utiliser les précédentes déclarations pour contrôler l'accès aux différentes listes.
Syntaxe de déclaration d'une plage horaire :
time workhours {
weekly mtwhf 08:00 - 16:30
date *-*-01 08:00 - 16:30
}
Un exemple de déclaration de source
src admin {
ip 1.2.3.4 1.2.3.5
user root foo bar
within workhours
}
Un exemple de liste
dest adult {
domainlist BL/adult/domains
urllist BL/adult/urls
expressionlist BL/adult/expressions
redirect http://admin.foo.bar.de/cgi-bin/blocked.cgi clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
log adult-access.log
}
Déclarer les ACL mettant en relation les sources et des destinations autorisées:
Lorsque une ressource destination non autorisée est demandée, la directive **redirect** est utilisée par squiGuard. On peut alors rediriger la requête vers une page statique ou dynamique en spécifiant des variables. Des fichiers cgi d'exemples sont disponibles sous **/usr/share/doc/squidguard/examples**. Pour servir ces fichiers cgi, un serveur web doit être installé/fonctionnel. Pour ces modestes besoins lighttpd a été installé.
Ci dessous les variables disponibles lors de la redirection:
^ %a | Adresse IP du client. |
^ %i | Identifiant utilsateur (RFC931, LDAP or mySQL) ou "unknown" |
^ %n | nom de domaine du client ou "unknown" |
^ %p | URI de la requête |
^ %s | source group du client ou "unknown" |
^ %t | target group: la destination évaluée or "unknown". |
^ %u | URL |
===== Redirection =====
# Installation du serveur web
apt install -y apache2
# activer les support des scripts CGI
a2enmod cgi
systemctl restart apache2.service
On utilise le script CGI fournit en exemple :
mkdir -p /srv/proxy/cgi
cp /usr/share/doc/squidguard/examples/squidGuard-simple.cgi /srv/proxy/cgi
chmod a+x /srv/proxy/cgi/squidGuard-simple.cgi
Exemple de message de redirection :
La ressource demandée n'est pas accessible depuis ce réseau car elle est associée à une catégorie non appropriée.
Après modification du fichier de configuration de SquidGuard, recharger la configuration du service Squid et vérifier les logs
systemctl reload squid.service
tail /var/log/squidguard/squidGuard.log
===== Mise à jour des listes =====
On peut mettre à jour les fichiers .db à l'aide de fichiers .diff
On déclanche le processus de mises à jour des fichiers .db via l'arugment **''-u''** :
# L'option -b affiche la barre de progression
squidguard -u -b
===== Script de mise à jour des listes =====
Le script:
* Récupère les liste maintenues par l'académie sous forme d'archive.
* Décompresse l'archive et donne les droit a l'utilisateur proxy.
* Lance la construction des bases Berkeley DB
===== Configuration des clients =====
Les fichiers pac, à placer sur un serveur web permettent de configurer automatiquement le proxy sur le navigateur demandant l'URL (javascript).
function FindProxyForURL(url, host) {
if (
isInNet(myIpAddress(), "127.0.0.0", "255.0.0.0") ||
isInNet(myIpAddress(), "192.168.0.0", "255.255.255.0")) {
return "DIRECT";
} else {
if (shExpMatch(url, "http:*"))
return "PROXY 192.168.1.28:3128" ;
if (shExpMatch(url, "https:*"))
return "PROXY 192.168.1.28:3128" ;
return "DIRECT";
}
}
Le mime-type associé au fichiers .pac doit être modifié si nécessaire dans la configuration du serveur web:
application/x-ns-proxy-autoconfig .pac;
===== Références =====
* https://www.mighty-studio.net/mes-tuto/squid-et-squidguard-filtre-les-acces-au-net/
* https://doc.ubuntu-fr.org/squid
* https://doc.ubuntu-fr.org/squid#configuration
* http://irp.nain-t.net/doku.php/220squid:060_squidguard
* http://stackoverflow.com/questions/2601400/squidiptables-how-do-i-allow-https-to-pass-through-and-bypassing-squid
* http://www.pihomeserver.fr/2015/09/01/un-controle-parental-grace-au-raspberry-pi-squid-et-squidguard/
* http://squidguard.org/Doc/redirect.html
* https://dsi.ut-capitole.fr/documentations/cache/squidguard.html
* https://memo-linux.com/installer-un-proxy-squid-et-un-filtrage-avec-squidguard-sous-debian/
* [[https://wiki.ncad.fr/index.php?title=SquidGuard|Filtrage web avec SquidGuard (ncad.fr)]]
* https://httpd.apache.org/docs/current/fr/howto/cgi.html