Squidguard est un plugin qui se greffe sur un serveur Squid. Il permet la gestion plus poussée des ACL par le biais notamment de la gestion de blacklists compilées. SquidGuard permet également de gérer des accès horaires, des conditions plus poussées et la modification de la page par une autre page.
Pour installer SquidGuard rien de plus simple:
aptitude install squidguard
Sous FreeBSD:
cd /usr/ports/www/squidguard
make install clean
Ensuite modifiez le fichier de configuration principal de squid pour intégrer les lignes suivantes (ou décommentez les): Versions 3.1 et antérieures
redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_children 10
Version 3.2 et supérieures:
url_rewrite_program /usr/local/bin/squidGuard -c /etc/squidguard/squidguard.conf
url_rewrite_children 10 startup=4 idle=2 concurrency=0
Squid est désormais lié à squidGuard. Il lancera 10 processus simultanés de squidGuard pour filtrer. Maintenant nous allons installer une blacklist (celle de l’université de Toulouse 1). Version Linux
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
tar xvzf blacklists.tar.gz
chown -R squid:squid /etc/squidguard/blacklists
rm blacklists.tar.gz
Version BSD
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
tar xvzf blacklists.tar.gz
chown -R _squid:_squid /etc/squidguard/blacklists
rm blacklists.tar.gz
Ouvrez le fichier /etc/squid/squidGuard.conf Configurez tout d’abord le répertoire de base de données de SquidGuard avec la directive dbhome.
dbhome /etc/squidguard/blacklists
Ensuite tapez squidGuard -C all pour configurer les blacklists créées (squidGuard -f /etc/squidguard/squidguard.conf -C all pour BSD) SquidGuard utilise un mécanisme de sources et de destinations pour définir les blacklists. Voici un exemple de sources
source localnet {
ip 10.0.0.0/8
192.168.0.0/16
}
et voici une destination, ici en l’occurence une blacklist de sites pornographiques
destination porno {
domainlist porn/domains
urllist porn/urllist
expressionlist porn/expressions
}
La valeur porn/domains définit le dossier porn et fichier domains.db dans celui-ci. Attention, on ne peut pas mettre plusieurs domainlist, urllist et expressionlist, seule la dernière sera prise en compte. La dernière directive principale à connaître est la directive ACL. Celle-ci définit les règles de filtrage que squidGuard va appliquer. On définit la source, et ce qui va passer.
acl {
localnet {
pass !porno
redirect http://localhost/403.html
}
admin {
pass all
}
invites {
pass none
redirect http://localhost/403.html
}
}
Ces acl définissent que la source localnet peut accéder à tout sauf les sites et URLS de la liste porno, la source admin peut accéder à n’importe quoi et les invités n’ont aucun accès. Il est possible de pousser plus loin la chose en déclarant également des plages horaires. Par exemple, les sites de réseaux sociaux sont autorisés lors des pauses et refusés autrement. La définition d’une plage horaire se fait au moyen de la directive time.
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat
time personnel-pause {
weekly s 00:00 - 23:59
weekly mtwhfa 12:00 - 14:00
}
L’ACL s’applique ensuite en se greffant sur une source de la manière suivante:
acl {
personnel within personnel-pause {
pass !common-blacklist
} else personnel {
pass !common-blacklist !social-networks
}
}
Pour faire une mise à jour automatique de la blacklist créez le bash suivant pour mettez le dans le cron Version Linux
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
tar xvzf blacklists.tar.gz
chown -R squid:squid /etc/squidguard/blacklists
rm blacklists.tar.gz
squidGuard -C all
Version BSD
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
tar xvzf blacklists.tar.gz
chown -R _squid:_squid /etc/squidguard/blacklists
rm blacklists.tar.gz
squidGuard -f /etc/squidguard/squidguard.conf -C all
Nous allons créer une whitelist afin de pouvoir facilement autoriser un site. Tapez la suite de commandes suivante:
mkdir /etc/squidguard/blacklists/exceptions/
touch /etc/squidguard/blacklists/exceptions/domains
touch /etc/squidguard/blacklists/exceptions/urllist
Ensuite ouvrez le fichier de configuration de squidGuard et créez l’ACL suivante:
destination exceptions {
domainlist exceptions/domains
urllist exceptions/urllist
}
et appliquez la ensuite à un ensemble, par exemple:
acl {
personnel within personnel-pause {
pass exceptions !common-blacklist
} else personnel {
pass exceptions !common-blacklist !social-networks
}
}
Pour l’utiliser, il suffit d’aller dans /var/firewall/blacklists/exceptions. Ajoutez ensuite une ligne par domaine à autoriser dans le fichier domains. Par exemple:
linkedin.com
linkedin.fr
viadeo.com
Ensuite fermez le fichier et tapez ceci: Version Linux:
squidGuard -C exceptions
killall squidGuard
Version BSD:
/usr/local/sbin/squidGuard -f /etc/squidguard/squidguard.conf -C exceptions
pkill squidGuard
Cela aura pour effet de régénérer les fichiers de la “blacklist” exceptions et de tuer les processus squidGuard lancés par squid. Squid relancera lui même les processus manquants.