{{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