Publié le: 2012-09-10

Squid blacklists (fr)

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.

Installation et configuration ## Installation

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

Configuration

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

Mise à jour automatique

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

Ajouter des exceptions

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.