[squid-users] Squid + SquidGuard : static block page not working

Amos Jeffries squid3 at treenet.co.nz
Wed Mar 14 13:42:16 UTC 2018


On 15/03/18 01:43, Nicolas Kovacs wrote:
> 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
> 
> 

I have added some "Best Practice" config changes inline below:

> SquidGuard-HOWTO.txt
> 
> 
> ================
> 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<--------------------------------------------------------------------------
> 

In squid.conf:

  acl admin src 192.168.2.2
  http_access allow admin

  acl redirect src all
  deny_info 302:http://squidguard.nestor/avertissement.html redirect
  http_access deny redirect

No URL-rewrite use.


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

Add:
  url_rewrite_access deny CONNECT


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

squid.conf:
  acl microlinux src 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
> }
> 

squid.conf:
  acl adult_domains dstdomain "/var/lib/squidguard/dest/adult/domains"
  acl adult_urls url_regex "/var/lib/squidguard/dest/adult/urls"
  acl adult any-of adult_domains adult_urls

(or files in a location other than "lib/squidguard/".)

Note: Squid can handle regex files up to several hundred entries easily.
If they get into thousands OR are very frequently changed urldbguard can
become worth using.


The below agressif and drogue definitions can be done using the same
pattern as the adult lines above.


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

squid.conf:

 acl redirect src all
 deny_info 302:http://squidguard.amandine/avertissement.html redirect
 http_access allow microlinux !adult !agressif !drogue
 http_access deny redirect


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

Remove entirely. Pre-packaged Squid should be built with the appropriate
user account in --with-default-user= such that these do not need setting
at all.

> 
> 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
> 
> 
> 
> _______________________________________________
> squid-users mailing list
> squid-users at lists.squid-cache.org
> http://lists.squid-cache.org/listinfo/squid-users
> 


More information about the squid-users mailing list