Skip to Content

Installation de Squid et SquidGuard sur une Debian ETCH

But de ce document

Ce document me sert de mémo pour installer Squid et SquidGuard sur une Debian ETCH. Je le diffuse en espérant qu’il puisse servir à d’autres personnes.

Pré-requis

Avoir installé une Debian de Base :

  •  cf mon autre document sur ce sujet : http://www.coagul.org/article.php3 ?id_article=158

    Installation Squid

    Paquet à installer :

    # aptitude install squid

    Configuration de Squid

    Fichier de configuration de Squid :

    /etc/squid/squid.conf

    Le fichier de configuration de Squid comporte de nombreuses pages (surtout des commentaires), mais il y a très peu de choses à changer pour le faire fonctionner.

    Personnellement, j’ai supprimé les commentaires après avoir fait une copie de sauvegarde du fichier d’origine :

    # cd /etc/squid/
    # mv squid.conf squid.conf.sav
    # cat squid.conf.sav | grep -v ^# | grep -v ^$ > squid.conf

    Rechercher la partie concernant la déclaration des acl et ajouter une ligne correspondante à la configuration du réseau :

    acl VotreDomaine src 192.168.0.0/255.255.255.0

    Ensuite, quelques lignes plus bas avant la dernière ligne « http_access deny all » ajouter la ligne suivante :

    http_access allow  VotreDomaine

    Redémarrer le serveur pour prendre en compte les modifications :

    /etc/init.d/squid restart

    Configuration du poste client

    Dans la partie configuration du proxy, il faut indiquer le nom ou l’adresse IP du proxy et le port par défaut 3128.

    Il est possible de désactiver le cache du navigateur en le mettant à 0 car celui du proxy est suffisant.

    Il est possible aussi d’indiquer une liste de serveurs accessibles sans passer par le proxy (ex : Intranet)

    Vérification du fonctionnement

    La commande suivante permet de surveiller les logs du proxy pour vérifier que tout fonctionne correctement :

    tail - f /var/log/squid/access.log

    Problème pour accéder aux serveurs internes

    Si sur votre réseau, vous avez des serveurs Web accessibles par exemple à l’adresse « monserveur », vous allez certainement rencontrer ce message si vous tentez d’y accéder en passant par squid :

    The requested URL could not be retrieved

    Unable to determine IP address from host name for { intranet }

    Pour résoudre ce problème, il y a trois solutions :

  •  Ajouter dans la configuration du proxy de votre navigateur le nom de votre serveur pour qu’il n’utilise pas Squid
  •  Ajouter le nom de votre domaine dans l’URL pour accéder à votre serveur : http://monserveur.mondomaine.net
  •  Configurer « Squid » pou qu’il ajoute automatiquement le nom de votre domaine aux urls en ajoutant cette ligne dans « squid.conf » :

    append_domain .mondomaine.net

    Remarque : Après chaque modification du fichier « squid.conf », il faut recharger la configuration :

    /etc/init.d/squid reload

    Modifier la taille du cache

    Si votre disque dur dispose de suffisant de place, vous pouvez augmenter la taille du cache de Squid.

    Pour cela, il faut ajouter ou modifier cette ligne dans « squid.conf » :

    cache_dir ufs /var/spool/squid 1024 256 256

    Voici la signification des différentes valeurs :

  •  Type de stockage
  •  Emplacement du cache
  •  Taille totale du cache en MB
  •  Nombre de répertoires de niveau 1 et de niveau 2

    Ensuite, il faut initialiser le cache avec ces commandes :

    # /etc/init.d/squid stop
    # squid -z
    # /etc/init.d/squid start

    Remarque : Vous pouvez vérifier que l’arborescence est correctement créée dans « /var/spool/squid ».

    Comment créer un cache supplémentaire

    Pour augmenter les performances de squid, il faut répartir les caches sur le maximum de disques. Si le serveur comporte deux disques, il est donc conseillé de créer un nouveau cache sur ce deuxième disque. Voici la procédure à suivre pour créer ce nouveau cache :

    Création du répertoire sur le deuxième disque (ex : /sdb1) :

    # mkdir /sdb1/squid

    Affectation des mêmes droits que le répertoire du premier cache « /var/spool/squid » créé lors de l’installation :

    # chmod 750 /sdb1/squid
    # chown proxy.proxy /sdb1/squid  

    Ligne à ajouter dans « /etc/squid/squid.conf » pour paramétrer le nouveau cache :

    # cache_dir ufs /sdb1/squid 200 16 256

    Commandes pour initialiser le nouveau cache (Création des sous-répertoires) :

    # /etc/init.d/squid stop
    # squid -z
    # /etc/init.d/squid start

    Optimisation des performances

    Il est possible de modifier quelques variables dans « squid.conf » pour optimiser les performances du cache :

    Taille maximum de mémoire vive utilisée pour stocker du cache :

    cache_mem 128 MB

    Taille maximum des objets stockés dans le cache :

    maximum_object_size 15 MB

    Utilisation illimitée de la bande passante :

    delay_parameters 1 -1/-1 -1/-1

    Installation de SquidGuard

    Paquets à installer :

    # aptitude install squidguard

    Récupération de la liste des sites sensibles :

    wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
    tar zxvf blacklists.tar.gz -C /var/lib/squidguard/db/
    cd /var/lib/squidguard/db
    mv blacklists/* .
    /usr/bin/squidGuard -C all
    chown -R proxy: /var/lib/squidguard/db/

    ATTENTION : Si les bases de données ne sont pas générées ou les droits incorrectes au lancement de squid, squidGuard va monopoliser toute la puissance du serveur et la seule solution sera de tuer les processus de squidGuard avec par exemple cette commande :

    # kill `ps aux | grep squidGuard | grep -v grep | awk '{print $2}' | xargs`

    ATTENTION : Le temps de compilation des blacklists avec la commande « squidGuard -C all » est très long (plus de 10mn)

    Ajouter les deux lignes suivantes dans /etc/squid/squid.conf

    redirect_program /usr/bin/squidGuard
    redirect_children 10

    J’ai commencé par épurer le fichier de configuration de SquidGuard :

    # cd /etc/squid/

    # mv squidGuard.conf squidGuard.conf.sav
    # cat squidGuard.conf.sav | grep -v ^# | grep -v ^$ > squidGuard.conf                        

    J’ai ajouté les lignes suivantes dans /etc/squid/squidGuard.conf pour filtrer les sites adultes :

    dest adult {
           domainlist      adult/domains
           urllist         adult/urls
           expressionlist  adult/expressions
           redirect        http://votresite/interdit.html
    }

    acl {
           default {
                   pass     !adult
                   redirect http://votresite/interdit.html
           }
    }

    Redémarrer le serveur pour prendre en compte les modifications :

    /etc/init.d/squid restart

    Exemple complet et commenté du fichier /etc/squid/squid.conf

    # Le fichier de configuration fourni par défaut sous Debian
    # est très long et contient énormément de commentaires.
    # -> Cette version est épurée de tous les commentaires

    # Pas d'infos sur ces lignes
    hierarchy_stoplist cgi-bin ?
    acl QUERY urlpath_regex cgi-bin \?
    no_cache deny QUERY

    # Taille maximum de mémoire vive utilisée pour stocker du cache
    cache_mem 16 MB
    # Taille maximum des objets stockés dans le cache
    maximum_object_size 15 MB

    # Paramétrage du cache N°1 sur le premier disque
    # - Type de stockage
    # - Emplacement du cache
    # - Taille totale du cache en MB
    # - Nombre de répertoires de niveau 1 et de niveau 2
    cache_dir ufs /var/spool/squid 200 16 256

    # Paramétrage du cache N°2 sur le deuxième disque
    cache_dir ufs /mnt/sdb1/squid 200 16 256

    # Format des logs :
    # -> Avec off, squid utilise son propre format de logs,
    #    mais la date et l'heure ne sont pas lisible.
    # -> Avec on, squid utilise le format standard CLF
    emulate_httpd_log off

    # Ces deux lignes permettent d'intégrer le plugin SquidGuard
    redirect_program /usr/bin/squidGuard
    redirect_children 4

    # Pas d'infos sur ces lignes
    refresh_pattern ^ftp:                1440        20%        10080
    refresh_pattern ^gopher:        1440        0%        1440
    refresh_pattern .                0        20%        4320

    # **********************************************************
    # ** Définition des restrictions pour l'accès au cache    **
    # **********************************************************

    # Liste des acl par défaut -> A conserver
    acl all src 0.0.0.0/0.0.0.0
    acl manager proto cache_object
    acl localhost src 127.0.0.1/255.255.255.255
    acl to_localhost dst 127.0.0.0/8
    acl SSL_ports port 443 563        # https, snews
    acl SSL_ports port 873                # rsync
    acl Safe_ports port 80                # http
    acl Safe_ports port 21                # ftp
    acl Safe_ports port 443 563        # https, snews
    acl Safe_ports port 70                # gopher
    acl Safe_ports port 210                # wais
    acl Safe_ports port 1025-65535        # unregistered ports
    acl Safe_ports port 280                # http-mgmt
    acl Safe_ports port 488                # gss-http
    acl Safe_ports port 591                # filemaker
    acl Safe_ports port 777                # multiling http
    acl Safe_ports port 631                # cups
    acl Safe_ports port 873                # rsync
    acl Safe_ports port 901                # SWAT
    acl purge method PURGE
    acl CONNECT method CONNECT

    # ACL qui définit le réseau utilisant le cache
    acl MonReseau src 192.168.0.0/255.255.255.0

    # Accès par défaut -> A conserver
    http_access allow manager localhost
    http_access deny manager
    http_access allow purge localhost
    http_access deny purge
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow localhost

    # Donne accès au cache au réseau
    http_access allow  MonReseau

    # Interdit tout le reste
    http_access deny all

    # Autorise les réponses pour tout le monde (par défaut)
    http_reply_access allow all
    # Autorise le protocole icp pour tout le monde (par défaut)
    icp_access allow all

    coredump_dir /var/spool/squid

    Proxy transparent avec Squid et Shorewall

    Dans « /etc/shorewall/rules » il faut ajouter cette ligne pour rediriger le port 3128 sur le port 80 sauf pour les adresses internes

    REDIRECT  loc:192.0.0.16  3128  tcp    www        -            !192.168.0.0/24

    De plus, il faut configurer Squid pour activer le mode transparent en ajoutant cette ligne au fichier « /etc/squid/squid.conf » :

    http_port 3128 transparent

    ATTENTION : Pour l’accès à certains site https via ssl, il est nécessaire d’indiquer le proxy dans la configuration du navigateur pour que ça fonctionne

    Installation de Webalizer

    Webalizer permet de générer des graphiques à partir des fichiers de logs d’Apache, de serveur FTP ou de Squid.

    Installation :

    # aptitude install webalizer

    Ensuite, il faut modifier les lignes suivantes du fichier « /etc/webalizer/webalizer.conf  » :

    LogFile  /var/log/squid/access.log

    LogType squid

    Cette commande permet d’exécuter l’analyse des logs :

    # webalizer

    Le résultat de l’analyse est stocké par défaut dans « /var/www/webalizer »

    Remarques :

  •  Une analyse sera exécuté automatiquement tous les soirs par le script « /etc/cron.daily/webalizer »
  •  Pour analyser plusieurs fichiers de logs, il faut créer plusieurs fichiers de configuration dans « « /etc/webalizer  »

    Liens pour avoir plus d’informations

    Document très complet, récent et surtout en français sur la configuration de Squid :

  •  http://igm.univ-mlv.fr/ dr/XPOSE2003/Squid/

    Site officiel de Squid :

  •  http://www.squid-cache.org/

    Historique des modifications

    Version Date Commentaire
    0.1 25/11/04 Création par Tony GALMICHE
    0.2 03/12/04 Mise à jour
    0.3 06/01/05 Mise à jour suite à installation serveur Pentium Pro 200
    0.4 14/01/05 Ajout des chapitres « Exemple complet et commenté du fichier /etc/squid/squid.conf », « Comment créer un cache supplémentaire » et « Liens pour avoir plus d’informations »
    0.5 26/01/09 Mise à jour suite à installation sur nouveau serveur
  • Commentaires

    > Installation de Squid et SquidGuard sur une Debian Testing

    Merci pour votre excellente documentation que je ne cesse d’exploiter depuis que je l’ai découverte.

    L’article sur Squid et SquidGuard m’a permis de les installer à mon domicile. J’ai rencontré seulement 3 obstacles :

    1) La ligne "tail - f /var/log/squid/access.log" contient un espace malencontreux entre - et f . J’ai mis un peu de temps avant de m’en rendre compte.

    2) En voulant rendre le proxy obligatoire aux clients, j’ai fini par trouver la réponse sur le site de l’ECP (http://people.via.ecp.fr/ alexis/formation-linux/proxy-arp.html) :

    echo "1" > /proc/sys/net/ipv4/ip_forward

    autorise le partage d’internet

    echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp

    autorise le partage d’internet par le proxy.

    Au départ, mettre les 2 fichiers à "1" pour activer le partage. Ensuite mettre le premier à "0" pour rendre le proxy obligatoire.

    3) Comment automatiser la mise à jour des blacklists ? L’article de Stephane Barcik propose une solution : http://sbarcik.free.fr/article.php3 ?id_article=22

    Encore merci à vous.