SQUID - Serveur PROXY - CACHE
Configuration

dernière modification : Mercredi 11 Octobre 2000


  1. Plate-forme matérielle
  2. Plate-forme logicielle
  3. Installation de Squid
  4. Configuration de Squid
  5. Lancement de Squid
  6. Tests

Plate-forme matérielle

Les ressources d'UC nécessaires ne sont pas élevées pour SQUID et toute machine dans la catégorie de puissance d'un Pentium 133 fera l'affaire. Ceci dit la plate-forme matérielle dépend bien évidemment énormément de la fréquence d''utilisation, du nombre de clients, du débit etc...
Pour un école ou un collège, un serveur de communication qui fait tout (voir SLIS) et de 200 à 300 Mo pour le cache, feront l'affaire.
Pour un lycée , 1 Go de cache suffiront amplement.

Pour un cache académique (exemple Nancy-Metz) qui sert à l'ensemble des établissements scolaire, la configuration actuelle est :
Pentium 266 - 256 Mo - 3 disques de 4,5 Go SCSI-UW2
1 disque pour le système d'exploitation, les logs et le swap
2 disques pour le cache. Le plus important dans ce type de configuration est
la mémoire (elle doit correspondre au nombre d'objets stockés). Dans ce type de configuration, il est souhaitable de multiplier le nombre de têtes (et donc de disques).
Dans cette situation cette machine est dédiée.
Cette configuration va être remplacée par un Bi-Proc PIII-500 - 512 Mo - 5 disques 9 Go SCSI-UW2 (5 disques de 4 Go auraient suffit mais hélas c'est devenu introuvable...)

Plate-forme logicielle

SQUID peut tourner sur bon nombre de système d'exploitation notamment "Unix" , on compte un portage commercial chez Novell (le cache de Border Manager).
Nous utiliserons Linux. J'ai pour ma part utilisé Squid sur des noyaux 2.0.x ou 2.2.x sans difficulté (si ce n'est sur le cache académique ou il a fallu relever le nombre de descripteurs de fichiers).
Si vous utilisez un noyau 2.0.x, le nombre de descripteurs de fichiers est limité à 256, ceci suffit pour un établissement scolaire ou une entreprise mais est insuffisant pour un cache central gérant beaucoup de trafic. La FAQ de Squid explique comment contourner ce problème (lire la FAQ de Squid à propos des "files descriptors")

Sur un noyau 2.2.x pas de problème le noyau gère 1024 descripteurs de fichiers et peut être augmenté facilement.

Il est très important d'harmoniser la taille mémoire avec l'espace disque affecté au cache : à titre d'exemple, avec la version 1.1.beta4 de squid, pour un espace disque de 4Go affecté au cache conduisant à environ 220000 objets (pages HTML, gif, jpeg, etc..), le process fait pratiquement 80Mo. La machine doit donc avoir au moins 128Mo de RAM pour fonctionner correctement...

Pour un cache à mettre en place au sein d'un établissement scolaire, si l'on part sur 1 Go d'espace disque pour le cache, prévoir 64 Mo sur la machine.

Gaspillage d'espace disque : beaucoup d'OS se réservent un certain pourcentage d'espace disque à la création des systèmes de fichiers. Cela peut conduire à gaspiller 10% d'espace disque inutilement puisque l'OS n'a rien à faire dans l'espace affecté au cache. Il est possible, suivant les OS, d'éviter ce gaspillage à la création ou après la création d'un système de fichiers (voir la manipulation avec tune2fs plus loin).

Installation de Squid sous Linux

Dans le cas d'une installation sous Linux :

Configuration de Squid

Il est temps à présent de configurer SQUID. Le fichier de configuration squid.conf se trouve dans /usr/local/squid/etc . A l'aide d'un éditeur (joe, jed ou vi) nous allons adapter ce fichier à nos besoins.
A noter qu'il existe un fichier squid.conf.default est le fichier comme son nom l'indique qui contient les paramètres par défaut de squid.

Il y a peu de choses à modifier si ce n'est l'emplacement du (ou des) répertoire(s) cache devant stocker les objets, la quantité de mémoire que l'on alloue au process squid et l'emplacement des logs.
Pour des raisons de sécurité , par défaut personne ne peut utiliser le cache, il faut explicitement donner l'autorisation à des clients.
A l'origine, le fichier squid.conf contient l'intégralité de valeurs par défaut. Elles sont reconnaissables car elles sont traitées comme un commentaire (caractère #).
Important : Si vous apportez des modifications au fichier de configuration, je vous conseille de laisser en commentaire la valeur par défaut des paramètres afin d'avoir toujours sous les yeux la configuration par typique de Squid.
Les paramètres importants sont :

http_port 3128 (c'est le port sur lequel travaille le cache, 3128 par défaut, certains déplacent ce port en 8080)
icp_port 3128 (c'est le port sur lequel le cache peut être interrogé par un cache fils ou voisin, cas d'une hiérarchie)
cache_mgr l.le-prieur@ac-nancy-metz.fr (c'est le nom de l'administrateur du cache)
cache_effective_user nobody nobody (sert à affecter un utilisateur et un groupe pour squid)
visible_hostname cache.domaine.fr (c'est le nom que renvoi squid lorsqu'il est interrogé de l'extérieur)
cache_mem 20 MB (c'est la mémoire que l'on alloue à Squid pour tourner , valeur par défaut 8 MB).
cache_dir /cache1 3200 16 256 (pour indiquer le répertoire devant accueillir les objets, la taille disque, le nombre de répertoires de premier et de second niveau pour le stockage)
cache_dir /cache2 3200 16 256 (idem pour la deuxième partition allouée au cache)
cache_access_log /var/log/squid/access.log (pour indiquer à quel endroit stocker le fichier log des requêtes)
cache_log /var/log/squid/cache.log (pour indiquer à quel endroit stocker le fichier log de squid)
cache_store_log none (pour ne pas enregistrer dans un fichier de log les ecritures et effacements d'objets)

Il faut ensuite définir les règles d'accès au cache (dit access-list ou acl)
Si votre cache s'insère dans un établissement scolaire, il y a de forte chance que vous ne soyez pas raccordé de façon permanente à l'Internet aussi la règle suivante suffira :
http_access allow all (pour autoriser tout le monde à utiliser le cache)

Evidemment dans le cas d'un cache de grande capacité (configuration académique par exemple) et ayant "pignon sur l'internet" il faudra placer des acl de telle façon que seules les machines autorisées puissent utiliser votre cache.
acl CLIENTS src 172.16.0.0/255.255.0.0 192.168.1.10/255.255.255.255 (on définit les réseaux ou les machines autorisées)
http_access allow CLIENTS (on autorise les accès http aux machines définit dans l'acl CLIENTS)
http_access deny all (on interdit toutes les autres)
Il est facile dans un réseau d'établissement de dresser la liste des machines autorisées à utiliser le cache est donc l'Internet si votre machine Linux est votre passerelle vers l'Internet.

Si votre cache est amené à être consulté par d'autres caches dans un hiérarchie, l'interrogation se fait via le protocole ICP.
icp_access allow CLIENTS (on autorise les accès icp aux machines définit dans l'acl CLIENTS)
icp_access deny all (on interdit toutes les autres)

Enfin on adopte le principe de conserver 15 jours de logs (la semaine en cours et la semaine précédente). Pour ce faire on définit l'option suivante :
logfile_rotate 1 (permettra lorsque l'on provoquera la rotation hebdomadaire des logs de conserver les logs de la semaine précédente access.log deviendra access.log.0 ; la valeur par défaut est 10 ce qui est trop élevé si votre log fait 1 Go !!!)

Pour réaliser cette rotation des logs, mettre une entrée dans la crontab (/etc/crontab) du système du genre



00 0 * * 0 root kill -USR1 `cat /var/run/squid.pid`

le signal -USR1 sur le process squid lui indiquera de provoquer cette rotation. Il est intéressant de traiter avec un outil de statistiques tel que Prostat (voir "Optimisations et Compléments") le fichier access.log.0

Comme l'on doit récupérer le numéro PID du process squid en cours d'exécution, indiquer dans squid.conf où stocker cette valeur.
pid_filename /var/run/squid.pid


Voilà l'essentiel des options nécessaires dans la mise en place d'un cache squid, vous trouverez 2 exemples de configurations ci-dessous.
Je suis prêt à répondre à vos questions pour adapter à vos besoins votre cache (laurent.le-prieur@ac-nancy-metz.fr)
La FAQ squid vous aidera également.

Un exemple de fichier squid.conf adapté à la configuration type "serveur académique" est disponible ici (squid.conf.acad)
Pour un établissement scolaire et 1 Go de cache un fichier type se trouve ici (squid.conf.etab)

Si l'on souhaite optimiser le système, supprimer ou modifier l'exécution de la commande updatedb (/etc/cron.daily/updatedb.cron dans le cas d'une distribution RedHat ou Mandrake) afin de ne pas balayer l'espace de cache.


Premier Lancement et Tests

Avant toute chose vous devez initialiser l'espace de cache que vous avez prévu (option cache_dir du fichier squid.conf), il faut donc lancer squid avec l'option -z pour qu'il crée les sous répertoires (premier et second niveau) de stockage des objets (typiquement 16 et 256)
#/usr/local/squid/bin/squid -z (consulter ensuite le fichier /var/log/squid/cache.log pour vérifier que tout c'est bien passé)

Lancer Squid (il faut avoir au préalable mis en place le fichier squid.init).
#/etc/rc.d/init.d/squid.init start (stop pour arrêter)

Vous pouvez aussi lancer la commande RunCache situé dans le répertoire /usr/local/squid/bin

Configurer 2 ordinateurs clients (voir la page Utilisation).
Avec l'un des ordinateurs consulter quelques sites... puis avec l'autre les mêmes pour constater l'efficacité du cache
Vérifier dans le fichier /var/log/squid/access.log les requêtes (les ordinateurs sont reconnaissables à leurs adresses IP)
Vous obtiendrez un listing de ce type :

access.log (le mot HIT correspond à un objet trouvé dans le cache, le mot MISS indique que Squid ne l'a pas et va donc le chercher directement sur Internet ou via son Parent selon les cas...)


Si vous avez une adresse IP publique pour votre cache, faites attention de bien définir les droits d'accès (miss_access et http_access) de nombreux caches sont ainsi ouverts et susceptibles d'être utilisés par des personnes mal intentionnées pour se camoufler. Vous pouvez d'ailleurs tester votre cache ici avec Proxy Checker :


Pour apporter des modifications ou des remarques à cette page merci de m'écrire
Laurent LE PRIEUR : laurent.le-prieur@ac-nancy-metz.fr