[squid-users] Squid + SquidGuard : static block page not working
Nicolas Kovacs
info at microlinux.fr
Wed Mar 14 12:43:41 UTC 2018
Le 14/03/2018 à 13:39, Nicolas Kovacs a écrit :
> Yes, I do. Because this is part of a step-by-step course about
> SquidGuard, which worked perfectly under Slackware Linux. And my
> filtering rules are becoming increasingly complex.
FYI, this is the course. It's a HOWTO in simple text format.
I'm currently trying to adapt this to CentOS 7.
Niki
--
Microlinux - Solutions informatiques durables
7, place de l'église - 30730 Montpezat
Site : https://www.microlinux.fr
Blog : https://blog.microlinux.fr
Mail : info at microlinux.fr
Tél. : 04 66 63 10 32
-------------- next part --------------
================
SquidGuard HOWTO (c) Nicolas Kovacs <info at microlinux.fr>
================
Dernière révision : 5 mai 2015
Ce HOWTO décrit la mise en place du redirecteur SquidGuard pour un serveur
proxy Squid sous Slackware.
* Généralités et prérequis
* Installation
* La page explicative
* Une redirection simple
* Récupérer les listes noires et blanches
* Un filtre simple pour contenus problématiques
* Automatiser les opérations
Généralités et prérequis
------------------------
SquidGuard est un plug-in pour Squid. On doit donc disposer d'une installation
fonctionnelle de ce dernier.
Installation
------------
Installer le paquet 'squidGuard' depuis le dépôt de paquets MLES.
La page explicative
-------------------
Lorsque SquidGuard refuse l'accès à une page, c'est toujours une bonne idée
d'expliquer les raisons de ce refus aux utilisateurs. Pour commencer, on va
donc mettre en place une page d'avertissement, qui sera hébergée sur le
serveur lui-même.
Le répertoire 'template/squidguard/html/' propose un modèle de page
explicative.
Pour la configuration d'une page web locale, voir le Apache-HOWTO.
Une redirection simple
----------------------
Nous n'avons pas encore de listes noires et blanches ni de base de données,
mais nous pouvons déjà faire un premier test de redirection :
1. la machine 192.168.2.2 n'est pas filtrée
2. toutes les autres machines du réseau local sont bloquées
SquidGuard se configure par le biais du fichier de configuration
'/etc/squidguard/squidguard.conf'. Sauvegardez le fichier de configuration
d'origine :
# cd /etc/squidguard
# mv squidguard.conf squidguard.conf.orig
Éditez un fichier de configuration minimal comme ceci :
--8<---------- /etc/squidguard/squidguard.conf -------------------------------
dbhome /var/lib/squidguard
logdir /var/log/squidguard
src admin {
ip 192.168.2.2
}
acl {
admin {
pass any
}
default {
pass none
redirect http://squidguard.nestor/avertissement.html
}
}
--8<--------------------------------------------------------------------------
> La directive 'dbhome' indique à SquidGuard où trouver la base de données
des listes (que nous n'avons pas encore).
> La directive 'logdir' spécifie l'endroit où l'on désire récupérer les
logs.
> Les sources définissent les groupes de clients. Ici, nous définissons une
seule adresse IP.
> Les 'acl' ou "Access Control Lists" permettent de définir quelle source
peut aller ou ne pas aller vers quelle(s) destination(s).
> Lorsqu'une destination n'est pas autorisée, la directive 'redirect' permet
de servir une page explicative au client.
À présent, il faut configurer Squid pour qu'il utilise SquidGuard. Éditer le
fichier '/etc/squid/squid.conf' et ajouter cette stance à la fin du fichier :
--8<---------- /etc/squid/squid.conf -----------------------------------------
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidguard.conf
url_rewrite_children 5
--8<--------------------------------------------------------------------------
Recharger la configuration de Squid :
# /etc/rc.d/rc.squid reload
Vérifier si la modification a bien été prise en compte :
# ps aux | grep squid | grep -v grep
root 5043 ... /usr/sbin/squid -F
nobody 5045 ... (squid) -F
nobody 5068 ... (squidGuard) -c /etc/squidguard/squidguard.conf
nobody 5069 ... (squidGuard) -c /etc/squidguard/squidguard.conf
nobody 5070 ... (squidGuard) -c /etc/squidguard/squidguard.conf
nobody 5071 ... (squidGuard) -c /etc/squidguard/squidguard.conf
nobody 5072 ... (squidGuard) -c /etc/squidguard/squidguard.conf
Maintenant, on peut essayer de naviguer sur Internet :
1. avec la machine 192.168.2.2
2. avec une machine dont l'adresse IP n'est pas 192.168.2.2
Récupérer les listes noires et blanches
---------------------------------------
Dans les exemples présentés ci-dessous, nous utiliserons les listes noires et
blanches maintenues par le Centre de Ressources Informatiques de l'Université
de Toulouse. Ces listes ne font pas partie de SquidGuard. On peut les
récupérer manuellement comme ceci :
# cd /var/lib/squidguard
# wget -c ftp://ftp.ut-capitole.fr/blacklist/blacklists.tar.gz
# tar xvzf blacklists.tar.gz
# cd blacklists
Chacun des répertoires correspond à une catégorie (ou "destination") du Web :
# ls -l | awk '{print $9, $10, $11}'
ads -> publicite
adult
aggressive -> agressif
agressif
arjel
astrology
audio-video
bank
bitcoin
blog
cc-by-sa-4-0.pdf
celebrity
chat
child
cleaning
cooking
dangerous_material
dating
drogue
drugs -> drogue
educational_games
filehosting
financial
forums
gambling
games
global_usage
hacking
jobsearch
...
On peut également récupérer les listes avec l'outil 'rsync'. Cette méthode est
même recommandée, étant donné que 'rsync' ne téléchargera que la différence
entre les arborescences distante et locale lors d'une mise à jour :
# cd /var/lib/squidguard
# rm -rf blacklists*
# rsync -rv rsync://ftp.ut-capitole.fr/blacklist/ .
# cd dest
La seule différence par rapport au téléchargement avec 'wget', c'est que nous
retrouvons nos destinations dans un répertoire 'dest/' et non 'blacklists/'.
Repérez le fichier 'global_usage' et jetez un oeil dedans. Il s'agit d'un
fichier explicatif sur le contenu des listes.
Un filtre simple pour contenus problématiques
---------------------------------------------
Dans ce deuxième exemple, nous allons filtrer les sites à contenu
manifestement problématique (porno, violence, drogues) pour toutes les
machines du réseau local.
Dans un premier temps, nous allons adapter la directive 'dbhome' à ce que nous
venons de télécharger un peu plus haut :
--8<---------- /etc/squidguard/squidguard.conf -------------------------------
dbhome /var/lib/squidguard/dest
logdir /var/log/squidguard
...
--8<--------------------------------------------------------------------------
Les sources sont là pour spécifier les groupes de clients. Nous allons définir
tout le réseau local "à la louche" :
--8<---------- /etc/squidguard/squidguard.conf -------------------------------
...
src microlinux {
ip 192.168.2.0/24
}
--8<--------------------------------------------------------------------------
Les destinations définissent des ensembles de domaines, d'URL ou d'expressions
régulières à appliquer aux URLs. Ici, nous allons définir trois destinations :
--8<---------- /etc/squidguard/squidguard.conf -------------------------------
...
# Des sites adultes allant de l'érotique à la pornographie dure
destination adult {
domainlist adult/domains
urllist adult/urls
log adult
}
# Quelques sites racistes, antisémites et incitant à la haine
destination agressif {
domainlist agressif/domains
urllist agressif/urls
log agressif
}
# Drogues
destination drogue {
domainlist drogue/domains
urllist drogue/urls
log drogue
}
--8<--------------------------------------------------------------------------
Les ACLs ("Access Control Lists") permettent de définir quelle source peut
aller ou ne pas aller vers quelle destination :
--8<---------- /etc/squidguard/squidguard.conf -------------------------------
...
acl {
microlinux {
pass !adult
pass !agressif
pass !drogue
redirect http://squidguard.nestor/avertissement.html
}
default {
pass none
redirect http://squidguard.nestor/avertissement.html
}
}
--8<--------------------------------------------------------------------------
> Le point d'exclamation '!' équivaut à une négation.
Au total, notre configuration ressemblera donc à ceci :
--8<---------- /etc/squidguard/squidguard.conf -------------------------------
dbhome /var/lib/squidguard/dest
logdir /var/log/squidguard
src microlinux {
ip 192.168.2.0/24
}
# Des sites adultes allant de l'érotique à la pornographie dure
destination adult {
domainlist adult/domains
urllist adult/urls
log adult
}
# Quelques sites racistes, antisémites et incitant à la haine
destination agressif {
domainlist agressif/domains
urllist agressif/urls
log agressif
}
# Drogues
destination drogue {
domainlist drogue/domains
urllist drogue/urls
log drogue
}
acl {
microlinux {
pass !adult
pass !agressif
pass !drogue
redirect http://squidguard.amandine/avertissement.html
}
default {
pass none
redirect http://squidguard.amandine/avertissement.html
}
}
--8<--------------------------------------------------------------------------
Avant d'aller plus loin, nous devons régler quelques permissions.
Rappelons-nous que le proxy cache Squid tourne avec les droits de
l'utilisateur 'nobody' et du groupe 'nobody' :
--8<---------- /etc/squid/squid.conf -----------------------------------------
...
cache_effective_user nobody
cache_effective_group nobody
...
--8<--------------------------------------------------------------------------
L'arborescence '/var/lib/squidguard' doit être accessible en lecture/écriture
pour Squid :
# chown -R nobody:nobody /var/lib/squidguard/
# ls -ld /var/lib/squidguard/
drwxr-xr-x 3 nobody nobody 4096 nov. 2 08:56 /var/lib/squidguard/
Au cas où le répertoire des logs n'existe pas, il faut le créer :
# mkdir -v /var/log/squidguard
mkdir: création du répertoire « /var/log/squidguard »
Là aussi, il faut ajuster les permissions :
# chown -R nobody:nobody /var/log/squidguard/
# ls -ld /var/log/squidguard/
drwxr-xr-x 2 nobody nobody 4096 nov. 2 11:08 /var/log/squidguard/
Pour pouvoir fonctionner rapidement, SquidGuard n'utilise pas les fichiers
texte, mais des bases de données au format Berkeley. Ces bases de données
n'existent pas encore, et nous devons les construire :
# squidGuard -C all
Si tout s'est bien passé, on obtient quelque chose comme ceci :
# cat /var/log/squidguard/squidGuard.log
2014-11-02 11:09:39 [3897] New setting: dbhome: /var/lib/squidguard/dest
2014-11-02 11:09:39 [3897] New setting: logdir: /var/log/squidguard
2014-11-02 11:09:39 [3897] init domainlist
/var/lib/squidguard/dest/adult/domains
2014-11-02 11:09:52 [3897] create new dbfile
/var/lib/squidguard/dest/adult/domains.db
2014-11-02 11:09:53 [3897] init urllist /var/lib/squidguard/dest/adult/urls
2014-11-02 11:09:53 [3897] create new dbfile
/var/lib/squidguard/dest/adult/urls.db
2014-11-02 11:09:54 [3897] init domainlist
/var/lib/squidguard/dest/agressif/domains
2014-11-02 11:09:54 [3897] create new dbfile
/var/lib/squidguard/dest/agressif/domains.db
2014-11-02 11:09:54 [3897] init urllist /var/lib/squidguard/dest/agressif/urls
2014-11-02 11:09:54 [3897] create new dbfile
/var/lib/squidguard/dest/agressif/urls.db
2014-11-02 11:09:54 [3897] init domainlist
/var/lib/squidguard/dest/drogue/domains
2014-11-02 11:09:54 [3897] create new dbfile
/var/lib/squidguard/dest/drogue/domains.db
2014-11-02 11:09:54 [3897] init urllist /var/lib/squidguard/dest/drogue/urls
2014-11-02 11:09:54 [3897] create new dbfile
/var/lib/squidguard/dest/drogue/urls.db
2014-11-02 11:09:54 [3897] squidGuard 1.4 started (1414922979.731)
2014-11-02 11:09:54 [3897] db update done
2014-11-02 11:09:54 [3897] squidGuard stopped (1414922994.459)
Quelques mises en garde s'imposent ici :
1. SquidGuard est une application assez pointue, pour ne pas dire une
véritable usine à gaz. La moindre faute de frappe dans un des fichiers de
configuration se solde généralement par un échec. Il est donc nécessaire de
porter une grande attention à la syntaxe.
2. Les bases de données (fichiers '*.db' en-dessous de l'arborescence
'/var/lib/squidguard/dest/') doivent être construites *après* avoir écrit le
fichier de configuration, car seules les destinations définies dans ce
fichier seront compilées. Autrement dit, si vous devez ajouter une
destination par la suite (malware, tricheur, etc.) il va falloir penser à
compiler les bases de données correspondantes.
3. En règle générale, ça ne fonctionne que rarement du premier coup. Dans ce
cas, jetez un oeil dans les logs, notamment 'squidGuard.log'. Ce dernier
vous sera d'un grand secours, car il vous avertira de tous les problèmes de
configuration.
Étant donné que la commande 'squidGuard -C all' a été invoquée par root, les
fichiers générés par cette commande appartiennent à ce dernier :
# ls -l /var/lib/squidguard/dest/adult/
total 66704
-rw-r--r-- 1 nobody nobody 17977204 nov. 1 11:02 domains
-rw-r--r-- 1 root root 44773376 nov. 2 11:09 domains.db
-rw-r--r-- 1 nobody nobody 0 nov. 1 11:02 expressions
-rw-r--r-- 1 nobody nobody 1959494 nov. 1 11:02 urls
-rw-r--r-- 1 root root 3584000 nov. 2 11:09 urls.db
-rw-r--r-- 1 nobody nobody 17 nov. 1 11:02 usage
...
# ls -l /var/log/squidguard/
total 4
-rw-r--r-- 1 root root 0 nov. 2 11:09 adult
-rw-r--r-- 1 root root 0 nov. 2 11:09 agressif
-rw-r--r-- 1 root root 0 nov. 2 11:09 drogue
-rw-r--r-- 1 root root 1316 nov. 2 11:09 squidGuard.log
On va donc devoir rectifier le tir une deuxième fois pour les permissions :
# chown -R nobody:nobody /var/lib/squidguard/
# chown -R nobody:nobody /var/log/squidguard/
Recharger la configuration :
# /etc/rc.d/rc.squid reload
À présent, naviguer sur le Web et tester le filtrage de quelques sites
potentiellement problématiques :
* http://www.nichons.com
* http://www.whitehonor.com
* http://www.cannabizz.com
Si tout se passe bien, les pages ne s'affichent pas, et l'utilisateur se
trouve confronté à la page explicative. Non content de cela, sa tentative est
enregistrée dans le fichier log correspondant à la catégorie de site prohibé,
par exemple :
# tail -f /var/log/squidguard/adult
2014-11-02 11:28:42 ... http://www.nichons.com/ 192.168.2.3/- - GET REDIRECT
2014-11-02 11:28:42 ... http://www.nichons.com/favicon.ico 192.168.2.3/- ...
2014-11-02 11:28:42 ... http://www.nichons.com/favicon.ico 192.168.2.3/- ...
Automatiser les opérations
--------------------------
Je fournis un script 'blacklist.sh' dans le répertoire 'template/squidguard/',
qui automatise la plupart des tâches répétitives. Copier ce script dans un
endroit approprié, par exemple '/usr/local/sbin/', et le rendre exécutable. Il
se charge de :
1. récupérer les listes noires et blanches
2. mettre à jour les listes déjà téléchargées
3. construire les bases de données Berkeley
4. rectifier les permissions
5. relancer Squid pour prendre en compte les modifications
------------------------------------------------------------------------------
# vim: syntax=txt
More information about the squid-users
mailing list