SQUID
- Serveur PROXY - CACHE
Configuration
dernière modification : Mercredi 11 Octobre 2000
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 :
Déterminer une configuration matérielle dont on est sûr du bon fonctionnement sous Linux. De plus en plus de constructeurs savent s'engager sur le support de Linux par leurs machines. Si il s'agit d'une machine banale (cas d'un établissement) scolaire, bien vérifier auparavant que la machine redémarre bien toute seule si il y a coupure de courant. Les boutons Marche / Arrêt impulsionnels n'ont pas que des avantages, vérifier dans le BIOS si il y a une option pour mettre en route la machine au rétablissement du courant... si ce n'est pas le cas l'utilisation d'une telle machine est a proscrire...
utiliser une distribution récente
de Linux utilisant un
noyau 2.2.x. RedHat
ou Mandrake 6.x ou
7.x par exemple.
Partitionner les disques en réservant
le maximum compatible avec la taille mémoire à l'espace de cache sans oublier
de garder de la place pour les logs et les statistiques qui grossissent
vite...
Cache Académique , exemple de partitionnement pour une configuration
typique à 2x4Go et 128Mo :
|
Sur le disque SCSI 0 (sda) on
a créé une partition de 800 Mo environ pour le Système,
3.2 Go pour une première partition pour le cache et 64 Mo pour une
partition de swap.
Sur le disque SCSI 1 (sdb) on a créé une partition de 800
Mo pour les logs, 3.2 Go pour une seconde partition cache et une autre partition
de 64 Mo pour le swap.
Cette répartition est faite pour répartir les temps d'accès
sur les disques. Squid se chargeant de stocker les objets alternativement
sur les partitions sda2 et sdb2 respectivement montées sur /cache1
et /cache2.
Cache d'établissement scolaire : dans le cas d'un établissement
scolaire et d'un disque de 4 Go, créé une partition système,
une partition de swap de taille équivalente à la mémoire
de la machine (le double si la quantité de mémoire est inférieure
à 64 Mo), une partition /var pour les logs et une partition pour
le cache. Une machine d'entrée
de gamme ou même de récupération peut être suffisant.
Exemple : 64 Mo et 4 Go
|
Dans cette situation, la machine peut héberger d'autres "services" : messagerie, annuaire LDAP, interface Web-Mail, serveur Web Intranet / Internet et Firewall. (cas typique du SLIS - serveur de communication "clef en main", installable en 15 minutes).
Installer la distribution Linux avec le nécessaire pour recompiler Squid et le noyau (compilateur C GNU "gcc", includes, librairies, éditeur (emacs par ex.), sources du noyau "kernel"...). Un serveur httpd (Apache) est recommandé pour la diffusion de statistiques et d'informations. La plupart des distributions propose un "package" avec squid (attention ce n'est peut être pas la dernière version et peut être n'a t'il pas été compilé avec toutes les options...).
Récupérer l'espace réservé lors
de la création des partitions affectées au cache à l'aide de la commande
tune2fs : après avoir démonté la ou les partitions concernées (/cache1 et
/cache2 dans l'exemple vu au dessus) :
umount /dev/sda2
tune2fs -m 0
mount /dev/sda2
Récupérer la dernière
version stable de SQUID sur http://squid.nlanr.net
ou ici sur
le serveur FTP dédié Linux de l'académie Nancy Metz.
Le mieux est d'installer squid dans le répertoire /usr/local/src
Exemple avec la version 2.3 stable 3
tar -zxvf squid-2.3STABLE3.tar.gz
--directory=/usr/local/src
Vous devriez obtenir un répertoire /usr/local/src/squid-2.3STABLE3
Faire de root le propriétaire
et le groupe de ce répertoire : chown
-R root.root /usr/local/src/squid-2.3.STABLE3
Il convient maintenant de compiler
SQUID.
Se placer dans le répertoire de squid : cd
/usr/local/src/squid
Configurer les options de compilations (Makefile) :
./configure --prefix=/usr/local/squid
--enable-err-language=French
Ajouter dans ligne précédente --enable-snmp
si vous comptez "surveiller" l'activité du cache via SNMP
(typiquement avec MRTG)
Si tout c'est bien passé, il ne reste plus qu'à compiler avec
la commande : make all (la
compilation prend un certain temps...)
et installer avec la commande : make
install
Le fichier INSTALL situé dans la racine du répertoire /usr/local/src/squid-2.3STABLE3
reprend en partie ce qui vient d'être expliqué.
Avec les directives que l'on a passé, on spécifie le répertoire
où squid sera installé (/usr/local/squid)
, la langue des messages d'erreurs et éventuellement si l'on veut
"surveiller" Squid via le protocole SNMP...
|
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
|
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