SquidGuard

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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