<h2>But de ce document</h2>
<p class="spip">Ce document me sert de <strong class="spip">mémo</strong> pour installer <strong class="spip">Squid</strong> et <strong class="spip">SquidGuard</strong> sur une <strong class="spip">Debian ETCH</strong>. Je le diffuse en espérant qu’il puisse servir à d’autres personnes.</p>

<h2>Pré-requis</h2>
<p class="spip">Avoir installé une Debian de Base :
<br /></p>
<li> cf mon autre document sur ce sujet : <a href="http://www.coagul.org/article.php3?id_article=158" class="spip_out">http://www.coagul.org/article.php3 ?id_article=158</a>
<h2>Installation Squid</h2>
<p class="spip">Paquet à installer :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install squid</code></p>

<h2>Configuration de Squid</h2>
<p class="spip">Fichier de configuration de Squid :</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/squid/squid.conf</code></p>

<p class="spip">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.</p>

<p class="spip">Personnellement, j’ai supprimé les commentaires après avoir fait une copie de sauvegarde du fichier d’origine :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># cd /etc/squid/<br />
# mv squid.conf squid.conf.sav<br />
# cat squid.conf.sav | grep -v ^# | grep -v ^$ > squid.conf</code></div>
<p class="spip">Rechercher la partie concernant la déclaration des acl et ajouter une ligne correspondante à la configuration du réseau :</p>

<p class="spip"><code class='spip_code' dir='ltr'>acl VotreDomaine src 192.168.0.0/255.255.255.0</code></p>

<p class="spip">Ensuite, quelques lignes plus bas avant la dernière ligne « http_access deny all » ajouter la ligne suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>http_access allow  VotreDomaine</code></p>

<p class="spip">Redémarrer le serveur pour prendre en compte les modifications :</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/squid restart</code></p>

<h2>Configuration du poste client </h2>
<p class="spip">Dans la partie configuration du proxy, il faut indiquer le nom ou l’adresse IP du proxy et le port par défaut 3128.</p>

<p class="spip">Il est possible de désactiver le cache du navigateur en le mettant à 0 car celui du proxy est suffisant.</p>

<p class="spip">Il est possible aussi d’indiquer une liste de serveurs accessibles sans passer par le proxy (ex : Intranet)</p>

<h2>Vérification du fonctionnement</h2>
<p class="spip">La commande suivante permet de surveiller les logs du proxy pour vérifier que tout fonctionne correctement :</p>

<p class="spip"><code class='spip_code' dir='ltr'>tail - f /var/log/squid/access.log</code></p>

<h2>Problème pour accéder aux serveurs internes</h2>
<p class="spip">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 :</p>

<p class="spip"><code class='spip_code' dir='ltr'>The requested URL could not be retrieved</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>Unable to determine IP address from host name for { intranet }</code></p>

<p class="spip">Pour résoudre ce problème, il y a trois solutions :
<br /></p>
<li> Ajouter dans la configuration du proxy de votre navigateur le nom de votre serveur pour qu’il n’utilise pas Squid
<br /><li> Ajouter le nom de votre domaine dans l’URL pour accéder à votre serveur :  http://monserveur.mondomaine.net
<br /><li> Configurer « Squid » pou qu’il ajoute automatiquement le nom de votre domaine aux urls en ajoutant cette ligne dans « <strong class="spip">squid.conf</strong> » :
<p class="spip"><code class='spip_code' dir='ltr'>append_domain .mondomaine.net</code></p>

<p class="spip"><strong class="spip">Remarque</strong> : Après chaque modification du fichier « squid.conf », il faut recharger la configuration :</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/squid reload</code></p>

<h2>Modifier la taille du cache</h2>
<p class="spip">Si votre disque dur dispose de suffisant de place, vous pouvez augmenter la taille du cache de Squid.</p>

<p class="spip">Pour cela, il faut ajouter ou modifier cette ligne dans « <strong class="spip">squid.conf</strong> » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>cache_dir ufs /var/spool/squid 1024 256 256</code></p>

<p class="spip">Voici la signification des différentes valeurs :
<br /></p>
<li> Type de stockage
<br /><li> Emplacement du cache
<br /><li> Taille totale du cache en MB
<br /><li> Nombre de répertoires de niveau 1 et de niveau 2
<p class="spip">Ensuite, il faut initialiser le cache avec ces commandes :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># /etc/init.d/squid stop<br />
# squid -z<br />
# /etc/init.d/squid start</code></div>
<p class="spip"><strong class="spip">Remarque</strong> : Vous pouvez vérifier que l’arborescence est correctement créée dans « <strong class="spip">/var/spool/squid</strong> ».</p>

<h2>Comment créer un cache supplémentaire</h2>
<p class="spip">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 :</p>

<p class="spip">Création du répertoire sur le deuxième disque (ex : /sdb1) :</p>

<p class="spip"><code class='spip_code' dir='ltr'># mkdir /sdb1/squid</code></p>

<p class="spip">Affectation des mêmes droits que le répertoire du premier cache « /var/spool/squid » créé lors de l’installation :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># chmod 750 /sdb1/squid<br />
# chown proxy.proxy /sdb1/squid  </code></div>
<p class="spip">Ligne à ajouter dans « /etc/squid/squid.conf » pour paramétrer le nouveau cache :</p>

<p class="spip"><code class='spip_code' dir='ltr'># cache_dir ufs /sdb1/squid 200 16 256</code></p>

<p class="spip">Commandes pour initialiser le nouveau cache (Création des sous-répertoires) :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># /etc/init.d/squid stop<br />
# squid -z<br />
# /etc/init.d/squid start</code></div>
<h2>Optimisation des performances</h2>
<p class="spip">Il est possible de modifier quelques variables dans « <strong class="spip">squid.conf</strong> » pour optimiser les performances du cache :</p>

<p class="spip">Taille maximum de mémoire vive utilisée pour stocker du cache :</p>

<p class="spip"><code class='spip_code' dir='ltr'>cache_mem 128 MB</code></p>

<p class="spip">Taille maximum des objets stockés dans le cache :</p>

<p class="spip"><code class='spip_code' dir='ltr'>maximum_object_size 15 MB</code></p>

<p class="spip">Utilisation illimitée de la bande passante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>delay_parameters 1 -1/-1 -1/-1</code></p>

<h2>Installation de SquidGuard</h2>
<p class="spip">Paquets à installer :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install squidguard</code></p>

<p class="spip">Récupération de la liste des sites sensibles :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz<br />
tar zxvf blacklists.tar.gz -C /var/lib/squidguard/db/<br />
cd /var/lib/squidguard/db<br />
mv blacklists/* .<br />
/usr/bin/squidGuard -C all<br />
chown -R proxy: /var/lib/squidguard/db/</code></div>
<p class="spip"><strong class="spip">ATTENTION</strong> : 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 :</p>

<p class="spip"><code class='spip_code' dir='ltr'># kill `ps aux | grep squidGuard | grep -v grep | awk '{print $2}' | xargs`</code></p>

<p class="spip"><strong class="spip">ATTENTION</strong> : Le temps de compilation des  blacklists avec la commande « squidGuard -C all » est très long (plus de 10mn)</p>

<p class="spip">Ajouter les deux lignes suivantes dans <strong class="spip">/etc/squid/squid.conf</strong></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>redirect_program /usr/bin/squidGuard<br />
redirect_children 10</code></div>
<p class="spip">J’ai commencé par épurer le fichier de configuration de SquidGuard :</p>

<p class="spip"><code class='spip_code' dir='ltr'># cd /etc/squid/</code></p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code># mv squidGuard.conf squidGuard.conf.sav<br />
# cat squidGuard.conf.sav | grep -v ^# | grep -v ^$ > squidGuard.conf                         </code></div>
<p class="spip">J’ai ajouté les lignes suivantes dans <strong class="spip">/etc/squid/squidGuard.conf</strong> pour filtrer les sites adultes :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>dest adult {<br />
        domainlist      adult/domains<br />
        urllist         adult/urls<br />
        expressionlist  adult/expressions<br />
        redirect        http://votresite/interdit.html<br />
}<br />
<br />
acl {<br />
        default {<br />
                pass     !adult<br />
                redirect http://votresite/interdit.html<br />
        }<br />
}</code></div>
<p class="spip">Redémarrer le serveur pour prendre en compte les modifications :</p>

<p class="spip"><code class='spip_code' dir='ltr'>/etc/init.d/squid restart</code></p>

<h2>Exemple complet et commenté du fichier /etc/squid/squid.conf</h2>
<div style='text-align: left;' class='spip_code' dir='ltr'><code># Le fichier de configuration fourni par défaut sous Debian<br />
# est très long et contient énormément de commentaires.<br />
# -> Cette version est épurée de tous les commentaires<br />
<br />
# Pas d'infos sur ces lignes<br />
hierarchy_stoplist cgi-bin ?<br />
acl QUERY urlpath_regex cgi-bin \?<br />
no_cache deny QUERY<br />
<br />
# Taille maximum de mémoire vive utilisée pour stocker du cache<br />
cache_mem 16 MB<br />
# Taille maximum des objets stockés dans le cache<br />
maximum_object_size 15 MB<br />
<br />
# Paramétrage du cache N°1 sur le premier disque<br />
# - Type de stockage<br />
# - Emplacement du cache<br />
# - Taille totale du cache en MB<br />
# - Nombre de répertoires de niveau 1 et de niveau 2<br />
cache_dir ufs /var/spool/squid 200 16 256<br />
<br />
# Paramétrage du cache N°2 sur le deuxième disque<br />
cache_dir ufs /mnt/sdb1/squid 200 16 256<br />
<br />
# Format des logs :<br />
# -> Avec off, squid utilise son propre format de logs, <br />
#    mais la date et l'heure ne sont pas lisible.<br />
# -> Avec on, squid utilise le format standard CLF<br />
emulate_httpd_log off<br />
<br />
# Ces deux lignes permettent d'intégrer le plugin SquidGuard <br />
redirect_program /usr/bin/squidGuard<br />
redirect_children 4<br />
<br />
# Pas d'infos sur ces lignes<br />
refresh_pattern ^ftp:                1440        20%        10080<br />
refresh_pattern ^gopher:        1440        0%        1440<br />
refresh_pattern .                0        20%        4320<br />
<br />
# **********************************************************<br />
# ** Définition des restrictions pour l'accès au cache    **<br />
# **********************************************************<br />
<br />
# Liste des acl par défaut -> A conserver<br />
acl all src 0.0.0.0/0.0.0.0<br />
acl manager proto cache_object<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl to_localhost dst 127.0.0.0/8<br />
acl SSL_ports port 443 563        # https, snews<br />
acl SSL_ports port 873                # rsync<br />
acl Safe_ports port 80                # http<br />
acl Safe_ports port 21                # ftp<br />
acl Safe_ports port 443 563        # https, snews<br />
acl Safe_ports port 70                # gopher<br />
acl Safe_ports port 210                # wais<br />
acl Safe_ports port 1025-65535        # unregistered ports<br />
acl Safe_ports port 280                # http-mgmt<br />
acl Safe_ports port 488                # gss-http<br />
acl Safe_ports port 591                # filemaker<br />
acl Safe_ports port 777                # multiling http<br />
acl Safe_ports port 631                # cups<br />
acl Safe_ports port 873                # rsync<br />
acl Safe_ports port 901                # SWAT<br />
acl purge method PURGE<br />
acl CONNECT method CONNECT<br />
<br />
# ACL qui définit le réseau utilisant le cache<br />
acl MonReseau src 192.168.0.0/255.255.255.0<br />
<br />
# Accès par défaut -> A conserver<br />
http_access allow manager localhost<br />
http_access deny manager<br />
http_access allow purge localhost<br />
http_access deny purge<br />
http_access deny !Safe_ports<br />
http_access deny CONNECT !SSL_ports<br />
http_access allow localhost<br />
<br />
# Donne accès au cache au réseau<br />
http_access allow  MonReseau<br />
<br />
# Interdit tout le reste<br />
http_access deny all<br />
<br />
# Autorise les réponses pour tout le monde (par défaut)<br />
http_reply_access allow all<br />
# Autorise le protocole icp pour tout le monde (par défaut)<br />
icp_access allow all<br />
<br />
coredump_dir /var/spool/squid</code></div>
<h2>Proxy transparent avec Squid et Shorewall</h2>
<p class="spip">Dans « /etc/shorewall/rules » il faut ajouter cette ligne pour rediriger le port 3128 sur le port 80 sauf pour les adresses internes</p>

<p class="spip"><code class='spip_code' dir='ltr'>REDIRECT  loc:192.0.0.16  3128  tcp    www        -            !192.168.0.0/24</code></p>

<p class="spip">De plus, il faut configurer Squid pour activer le mode transparent en ajoutant cette ligne au fichier « /etc/squid/squid.conf » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>http_port 3128 transparent</code></p>

<p class="spip"><strong class="spip">ATTENTION</strong> : 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</p>

<h2>Installation de Webalizer</h2>
<p class="spip">Webalizer permet de générer des graphiques à partir des fichiers de logs d’Apache, de serveur FTP ou de Squid.</p>

<p class="spip">Installation :</p>

<p class="spip"><code class='spip_code' dir='ltr'># aptitude install webalizer</code></p>

<p class="spip">Ensuite, il faut modifier les lignes suivantes du fichier « <strong class="spip">/etc/webalizer/webalizer.conf </strong> » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>LogFile  /var/log/squid/access.log</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>LogType squid</code></p>

<p class="spip">Cette commande permet d’exécuter l’analyse des logs :</p>

<p class="spip"><code class='spip_code' dir='ltr'># webalizer</code></p>

<p class="spip">Le résultat de l’analyse est stocké par défaut dans « /var/www/webalizer »</p>

<p class="spip"><strong class="spip">Remarques</strong> : 
<br /></p>
<li> Une analyse sera exécuté automatiquement tous les soirs par le script « <strong class="spip">/etc/cron.daily/webalizer</strong> »
<br /><li> Pour analyser plusieurs fichiers de logs, il faut créer plusieurs fichiers de configuration dans « « <strong class="spip">/etc/webalizer </strong> »
<h2>Liens pour avoir plus d’informations</h2>
<p class="spip">Document très complet, récent et surtout en français sur la configuration de Squid :
<br /></p>
<li> <a href="http://igm.univ-mlv.fr/~dr/XPOSE2003/Squid/" class="spip_out">http://igm.univ-mlv.fr/ dr/XPOSE2003/Squid/</a>
<p class="spip">Site officiel de Squid :
<br /></p>
<li> <a href="http://www.squid-cache.org/" class="spip_out">http://www.squid-cache.org/</a>
<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>25/11/04</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td>0.2</td><td>03/12/04</td><td>Mise à jour</td></tr>
<tr class="row_even"><td>0.3</td><td>06/01/05</td><td>Mise à jour suite à installation serveur Pentium Pro 200</td></tr>
<tr class="row_odd"><td>0.4</td><td>14/01/05</td><td>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 »</td></tr>
<tr class="row_even"><td>0.5</td><td>26/01/09</td><td>Mise à jour suite à installation sur nouveau serveur</td></tr>
</tbody>
</table>