Association Générale des Utilisateurs de logiciels libres en Côte-d'Or

logo_coagul

Installation de Squid et SquidGuard sur une Debian ETCH

Rubrique : Serveurs
Le : lundi 26 janvier 2009
Par : Tony  
Visites : 69313
Tags : Proxy, Squid, SquidGuard

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

VersionDateCommentaire
0.125/11/04Création par Tony GALMICHE
0.203/12/04Mise à jour
0.306/01/05Mise à jour suite à installation serveur Pentium Pro 200
0.414/01/05Ajout 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.526/01/09Mise à jour suite à installation sur nouveau serveur
Version imprimable de l'article

Forum


  • Installation de Squid et SquidGuard sur une Debian Testing
    27 juillet 2006, par Jarod

    Merci pour cet article, qui m’a bien servi.

    J’avais besoin de mettre en place un squid rapidemment, et c’est vraiment top de l’installer a 18h le soir et d’avoir un truc parfaitement op le lendemain matin pour tout le monde au bureau !

  • Installation de Squid et SquidGuard sur une Debian Testing
    17 mars 2006

    Bonjour,

    excellent article, merci. J’entend dire autours de moi que chastity-list n’est plus mis à jour. d’ailleurs le paquet debian n’existe plus dans etch. voilà, mes deux sous.

    Philippe

    • Installation de Squid et SquidGuard sur une Debian Testing
      18 mars 2006, par Tony

      Bonjour,

      Je sais que ce paquet n’est plus maintenu, mais je n’ai pas encore eu le temps de trouver une autre solution. De plus, en terme de filtrage, c’est toujours mieux que rien.

      Mais si tu as une bonne adresse à me donner pour remplacer le paquet "chastity-list", je suis preneur.

      • Installation de Squid et SquidGuard sur une Debian Testing
        10 juin 2006, par dark

        bonjour

        peut etre : http://cri.univ-tlse1.fr/documentations/cache/squidguard.html

        mais il faut faire un paquet debian

  • Installation de Squid et SquidGuard sur une Debian Testing
    14 février 2006
    Je voudrais savoir si dans le fichier tail -f /var/log/squid/access.log, il est pmossible d’avoir le nom des postes plutot que leur adresse ip. J’ai un serveur dns mais je ne sais pas si cela est possible.
  • > Installation de Squid et SquidGuard sur une Debian Testing
    29 novembre 2005, par laurent ducos
    Exellent article qui me dépanne dès que j’ai besoin de remettre le nez dans squid. Juste un a-parté pour préciser qu’il existe un fichier d’exemple "squidGuard-chastity.conf" qu’il suffit de copier dans /etc/squid/squidGuard.conf pour obtenir une config très propre de ce fichier qui supporte mal les fautes de Casse. Ce site est très instructif et de grande qualité, Je vous encourage à continuer ces documentations.
    • > Installation de Squid et SquidGuard sur une Debian Testing
      29 novembre 2005, par laurent ducos
      J’ai juste oublié de préciser que le fichier squidGuard-chastity.conf se trouve dans /etc/chastity/
  • > Installation de Squid et SquidGuard sur une Debian Testing
    22 octobre 2005, par Marc Hépiègne

    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.

    • > Installation de Squid et SquidGuard sur une Debian Testing
      28 octobre 2005, par Tony
      J’ai corrigé le problème avec l’espace et merci pour les informations complémentaires.
    • > Installation de Squid et SquidGuard sur une Debian Testing
      22 mars 2007, par Alex
      Merci ! Merci ! Merci !
      • > Installation de Squid et SquidGuard sur une Debian Testing
        4 mai 2007, par Thomas

        bonjour,

        est ce que quelqu’un sait si on peut faire de la résolution inverse comme avec les virtualhosts pour apache2 ? et si oui comment on peut faire ?

Site réalisé sous Spip. Merci à NFrance pour son hébergement gracieusement offert. Tous les articles de ce site sont sous licence Creative Commons by-nc-sa (CC).