tuto:ipasserelle:web:dansguardian

DansGuardian

Dansguardian est un proxy HTTP filtrant très puissant. Il ne se contente pas d'une liste noire (comme SquidGuard par exemple), mais est aussi capable d'analyser le contenu des pages, et d'en bloquer l'accès selon un nombre très important de critères. Une contrib pour SME est disponible.

Pas très compliqué:

yum --enablerepo=smecontribs install smeserver-dansguardian

La configuration elle, est un peu plus velue:

La première chose à faire après avoir installé dansguardian est de configurer l'adresse de la page de blocage, ainsi que la langue. Ces réglages se trouvent dans le fichier de configuration principal de Dansguardian /etc/dansguardian/dansguardian.conf:

HOSTNAME=$(db configuration get SystemName)
DOMAINNAME=$(db configuration get DomainName)
sed -i -e "s|YOURSERVER.YOURDOMAIN|$HOSTNAME.$DOMAINNAME|g" -e "s|ukenglish|french|g" /etc/dansguardian/dansguardian.conf

Lorsque Dansguardian analyse le contenue des pages Web, il attribue une note à différents éléments (mots clefs, expression régulières etc…). Si la somme de ces notes dépasse la limite de pondération, alors l'accès à la page est bloqué. Par défaut, cette limite est de 50, ce qui est un peu faible, nous allons le remonter à 180 par exemple. Ce réglage se fait dans le fichier /etc/dansguardian/dansguardianf1.conf (qui correspond au groupe de filtrage par défaut. Nous verrons par la suite qu'il est possible de définir plusieurs groupes avec des limites de pondération différentes).

sed -i -e "s|naughtynesslimit = .*|naughtynesslimit = 180|g" /etc/dansguardian/dansguardianf1.conf

Par défaut, dansguardian bloque pas mal d'extensions et de types MIME, ce qui rend son utilisation plutôt pénible. Dans la plupart des cas, on pourra désactiver tout ces blocages en éditant /etc/dansguardian/lists/bannedextensionlist et /etc/dansguardian/lists/bannedmimetypelist et en commentant ce que l'on souhaite autoriser

Dansguardian peut soumettre l'ensemble du trafic http (pas https bien évidemment) à un scanner AV (clamd). Pour l'activer:

Il faut d'abord faire pointer dansguardian sur la configuration de clamav (Dansguardian peut utiliser d'autres moteurs d'AV

sed -i -e "s|#contentscanner = '/etc/dansguardian/contentscanners/clamdscan.conf'|contentscanner = '/etc/dansguardian/contentscanners/clamdscan.conf'|" \
/etc/dansguardian/dansguardian.conf

Puis il faut configurer le plugin clamav, pour qu'il utilise le socket de clamd:

sed -i -e "s|clamdudsfile = .*|clamdudsfile = '/var/clamav/clamd.socket'|" \
/etc/dansguardian/contentscanners/clamdscan.conf

On pourra ensuite tester l'efficacité du scanner en essayant de télécharger le faux virus eicar sur http://www.eicar.org. Kaspersky fournit également une page de test d'antivirus: http://support.kaspersky.com/fr/viruses/avtest

Il est possible de rajouter une blacklist. Une très complète peut être télécharger depuis le site http://urlblacklist.com/?sec=download Cette blacklist doit être installée dans /etc/dansguardian/lists/blacklists

wget -O /tmp/bigblacklist.tar.gz "http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist"
tar xvzf /tmp/bigblacklist.tar.gz -C /etc/dansguardian/lists/

Cette archive contient plusieurs sous-répertoire correspondant à des catégories différentes (porno, warez, jeux etc…). Il suffit ensuite d'éditer les fichiers /etc/dansguardian/lists/bannedsitelist et /etc/dansguardian/lists/bannedurllist et de dé-commenter les catégories que l'on souhaite bloquer (le fichier contient des exemples assez explicites):

#Remove the # from the following and edit as needed to use a stock
#squidGuard/urlblacklist blacklists collection.
.Include</etc/dansguardian/lists/blacklists/adult/urls>
.Include</etc/dansguardian/lists/blacklists/aggressive/urls>
#.Include</etc/dansguardian/lists/blacklists/audio-video/urls>
#.Include</etc/dansguardian/lists/blacklists/chat/urls>
#.Include</etc/dansguardian/lists/blacklists/drugs/urls>
#.Include</etc/dansguardian/lists/blacklists/entertainment/urls>
#.Include</etc/dansguardian/lists/blacklists/frencheducation/urls>
.Include</etc/dansguardian/lists/blacklists/gambling/urls>
#.Include</etc/dansguardian/lists/blacklists/government/urls>
#.Include</etc/dansguardian/lists/blacklists/hacking/urls>
#.Include</etc/dansguardian/lists/blacklists/jobsearch/urls>
#.Include</etc/dansguardian/lists/blacklists/kidstimewasting/urls>
#.Include</etc/dansguardian/lists/blacklists/mail/urls>
#.Include</etc/dansguardian/lists/blacklists/news/urls>
.Include</etc/dansguardian/lists/blacklists/porn/urls>
#.Include</etc/dansguardian/lists/blacklists/proxy/urls>
#.Include</etc/dansguardian/lists/blacklists/publicite/urls>
#.Include</etc/dansguardian/lists/blacklists/redirector/urls>
#.Include</etc/dansguardian/lists/blacklists/violence/urls>
.Include</etc/dansguardian/lists/blacklists/virusinfected/urls>
.Include</etc/dansguardian/lists/blacklists/warez/urls>
# You will need to edit to add and remove categories you want

FIXME: ajouter mise à jour automatique de la blacklist

C'est pas tout, mais maintenant que dansguardian est configuré, il faut qu'il soit utilisé. Pour l'instant, il faut que les clients spécifient manuellement le proxy dans leur navigateur (port 8080). Il est possible de l'utiliser de façon transparente:

/etc/init.d/dansguardian restart
db configuration setprop squid TransparentPort 8080 Transparent yes
db configuration setprop dansguardian portblocking yes
expand-template /etc/squid/squid.conf
squid -k reconfigure
expand-template /etc/rc.d/init.d/masq
/etc/rc.d/init.d/masq adjust

Il faut ensuite vérifier que:

  • le proxy fonctionne
  • le filtrage soit bien effectif (on peut regarder les logs d'accès /var/log/dansguardian/access.log)

Maintenant que tout est en place, nos clients demandent à dansguardian une page, ce dernier transmet la requête à squid, qui récupère la page. Le problème, c'est que pour squid, toutes les requêtes viennent de 127.0.0.1. Nous allons modifier cela pour que l'adresse d'origine apparaisse dans les logs (l'adresse d'origine pourra aussi être utilisée pour les ACL, mais attention, cette astuce utilise l'entête X-Forwarded-For, qui n'est pas très fiable car facilement forgeable):

mkdir -p /etc/e-smith/templates-custom/etc/squid/squid.conf
cat <<"HERE" > /etc/e-smith/templates-custom/etc/squid/squid.conf/96xForwardedFor
acl localhost src 127.0.0.1
follow_x_forwarded_for allow localhost
forwarded_for off
header_access X-Forwarded-For deny all
HERE
expand-template /etc/squid/squid.conf
squid -k reconfigure

En bonus, la ligne header_access X-Forwarded-For deny all permet de supprimer l'entête X-Forwarded-For à la sortie de Squid, ainsi, les sites externes n'auront pas l'adresse IP d'origine de la requêtes.

Dans la plupart des cas, le filtrage par défaut conviendra, mais dans d'autres cas, il faut pouvoir ajuster les paramètres de filtrage de façon différentes pour certaines personnes. Une des façon de reconnaître la personne à l'origine de la requête est d'utiliser une authentification sur Squid. Mais ce n'est pas très pratique, notamment car le mode transparent est incompatible avec l'authentification (il faudrait donc configurer le proxy en dur sur tout les postes).

Une autre méthode, moins fiable certes, mais beaucoup plus pratique, est d'utiliser l'adresse IP source de la requête.

Cela se déroule en plusieurs étapes:

Déclarer le nombre de groupes

Dansguardian doit connaitre le nombre total de groupe de filtrage. Ce paramètre s'inscrit dans le fichier principal /etc/dansguardian/dansguardian.conf. Par exemple:

sed -i -e "s|filtergroups = .*|filtergroups = 2|" /etc/dansguardian/dansguardian.conf
cp -a /etc/dansguardian/dansguardianf1.conf /etc/dansguardian/dansguardianf2.conf

NOTE: pour chaque groupe existant, un fichier correspondant /etc/dansguardian/dansguardianfN.conf doit exister. On peut se baser sur le fichier primaire /etc/dansguardian/dansguardianf1.conf comme dans cet exemple.

Définir les groupes

Maintenant, il faut donner à dansguardian les critères de sélection du groupe. Puisque nous sommes partie pour utiliser l'adresse IP source, il faut:

  • activer le pluginq d'authentification par IP:
sed -i -e "s|#authplugin = '/etc/dansguardian/authplugins/ip.conf'|authplugin = '/etc/dansguardian/authplugins/ip.conf'|" \
/etc/dansguardian/dansguardian.conf
  • Définir les IP (ou plages d'IP) en éditant le fichier /etc/dansguardian/lists/authplugins/ipgroups

Configurer les paramètres de filtrage pour chaque groupe

Maintenant que nos requêtes sont classées dans le groupe qui va bien en fonction de la source, il ne reste plus qu'à personnaliser le fichier /etc/dansguardian/dansguardianfX.conf selon ne besoins.

  • tuto/ipasserelle/web/dansguardian.txt
  • Dernière modification: 13/07/2012 10:45
  • de dani