Squid




1 Pour quoi faire

Squid est un proxy cache sous linux. De ce fait il permet d'accélérer vos connexions à l'internet en plaçant en cache les sites les plus visités. Ainsi dans des établissements scolaires cela permet d'améliorer les connexions. On peut aussi effectuer des contrôles de sites, même si cela à mon avis reste du domaine de l'impossible. Enfin il est possible de partager une connexion à internet à l'aide Squid, mais Squid n'est pas un proxy POP, SMTP, NNTP (comme Sambar par exemple).
Avant de lire cette doc, qui est loin d'être complète, je vous conseille vivement de consulter la doc de Squid en anglais, mais fort bien faite et très complète. Voir aussi absolument le site du cru pour des conseils de configuration de votre machine. Il faut lire aussi les fichiers release1.0.txt et release1.1.txt qui se trouvent dans le répertoire /usr/doc/squidxxxxxx/.

2 Où trouver SQUID

Squid est disponible sur le cd de toutes les distributions de Linux. On peut aussi le télécharger sur le site de Squid. On le trouve sous forme de fichiers tar ou rpm.
 

3 Avant d'installer SQUID

Peut être même avant d'installer votre machine linux, vous devez vous poser la question de quel type de machine, comment partitionner mon disque. Un disque SCSI est préférable à un IDE, un cache utilise beaucoup le disque il faut donc que celui-ci soit le plus rapide possible. Il est utile de disposer aussi de mémoire, cela ne peut qu'améliorer les performances de votre cache.
Pour ce qui est des partitions pensez à faire une partition pour le cache, éventuellement une pour placer les logs (ils sont nombreux avec squid), pour le reste à vous de voir.  
Il me semble aussi qu'une deuxième carte réseau peut être utile dans ce type de cas.
Pensez aussi à sécuriser votre machine, un cache ne doit pas pouvoir être utilisable par la terre entière mais uniquement par des machines authentifiées et/ou autorisées. 

4 Installer SQUID

Si vous utilisez les packages rpm il n'y a aucun problème à installer squid.
rpm -ivh squid*.rpm et le tour est joué.
Il place alors les fichiers de log dans /var/log/squid, le fichier de configuration dans /etc/squid/squid.conf. Ce fichier est le seul fichier de configuration de squid. Il faut donc ouvrir ce fichier  pour effectuer les paramétrages correspondant à votre situation.

Si vous utilisez tar, vous devez faire tar xvfz squid-2.2*.tar.gz, puis lancer la compilation (lire le fichier Install avant ou utiliser ./configure --help pour avoir les options de compilation.
./configure  Squid sera installé par défaut dans le répertoire /usr/local/squid. Pour l'installer dans un autre répertoire compilez squid avec --prefix=/la_ou_je_veux                        
Si vous souhaitez avoir les messages d'erreurs en français ajouter --enable-err-language=French (On peux aussi faire cela dans le fichier squid.conf). 
Si vous souhaitez utiliser un grand nombre d'ACL utilisez --enable-gnuregex, mais il est peut être souhaitable d'utiliser un produit comme squidguard (voir plus loin). Puis faire :
make all
make install

5 Démarrage de Squid

Avant tout démarrage de Squid il est nécessaire de le configurer. Pour cela il n'existe qu'un seul fichier squid.conf que vous trouverez dans le répertoire /etc/squid (si vous avez utilisez la version rpm) ou dans /usr/local/squid/etc (si vous avez compilé squid à partir d'un .tar).
Lors du premier démarrage de squid, il est nécessaire de créer les répertoires de swap avec la commande squid -z  (ou quand vous modifiez la configuration du cache_dir ).
Après il ne reste plus qu'à démarrer Squid avec la commande : /etc/rc.d/init.d/squid start (Attention le fichier squid.ini qui se trouve dans le répertoire /etc/rc.d/init.d/ n'est pas mis en place si vous avez vous même compilé squid).
On peut vérifier que tout est Ok en allant voir le fichier cache.log qui se trouve sur la Red Hat dans le répertoire /var/log/squid/
Par défaut Squid ne démarre pas automatiquement au démarrage de votre machine. Il faut donc le placer dans le bon niveau de démarrage. Voir un fichier de lancement ici.  
Il faut absolument éviter de démarrer Squid avec le compte root, pour cela utilisez plutôt le compte nobody ainsi dans le fichier squid.conf indiquer cache_effective_user nobody.
Il faut alors penser à donner les droits nécessaires à nobody pour que cela marche. Si vous avez vous même compilé Squid pensez à rendre nobody propriétaire de  /usr/local/squid avec un truc comme chown -R nobody.nobody /usr/local/squid.
Pensez aussi à donner les droits qu'il faut dans le répertoire de cache qui comme il se doit se trouve sur une partition propre (même type de commande). Pensez éventuellement à modifier les droits. 
Pour démarrer Squid on peut aussi utiliser RunCache, qui possède la particularité de relancer Squid lorsque celui-ci s'arrête. Pour cela lancer le avec une commande comme su - nobody -c /usr/local/squid/bin/RunCache& (le & est ici important il permet de faire tourner votre script en tâche de fond et donc de reprendre la main). Placer alors cette ligne dans rc.local. 

Si Squid a bien démarré vous devez avoir en tapant ps ax |grep squid une réponse vous indiquant le numéro du process.
Si par la suite vous devez modifier votre fichier de configuration vous pouvez forcer la relecture de ce fichier avec un kill -HUP xxx (xxx étant le numéro de process). 

6 Options de Squid

On peut aussi démarrer squid en lui passant des commandes sur la ligne de commande.
Différents paramètres peuvent être passés sur la ligne de commande. Les options passées de cette façon écrasent les paramètres du fichier squid.conf.
-h : Pour obtenir les options possibles
-a : Pour indiquer un port particulier
-f : pour utiliser un autre fichier de conf à la place de squid.conf
-i : désactive le cache IP
-u : spécifie un port pour les requêtes ICP.
-v : pour indiquer la version de Squid
-z : Pour effacer le contenu du cache sur le disque ou pour créer le fichier de swap.
-k : Pour envoyer des instructions à Squid pendant son fonctionnement. Il faut faire suivre -k d'une instruction (rotate|reconfigure­|shutdown|interrupt|­kill­|debug|check­).
-D pour démarrer squid lorsque vous n'êtes pas connecté en permanence à internet (évite de vérifier si le serveur DNS répond).

7 Contrôler si Squid tourne

On peut pour cela utiliser cron et vérifier à l'aide d'un script si Squid est toujours en activité.
Voici un script possible pour faire cela.
#!/bin/sh
/sbin/pidof squid > /dev/null
if [ $? = 1 ]
then
      /etc/rc.d/init.d/squid stop
      /etc/rc.d/init.d/squid start
      echo "redemarrage de Squid"
fi
Il existe bien d'autres possibilités et les puristes vous diront "et si cron est aussi dans les choux". On trouve alors sur Internet des outils pour surveiller des machines depuis d'autres machines. On peut aussi ajouter la ligne suivante afin d'être prévenu d'un redémarrage de Squid 
echo "Redémarrage de Squid" | mail -s "[Squid] Redémarrage de Squid " chadefaux@ac-creteil.fr.
Vous pouvez aussi utiliser RunCache (voir plus haut), qui essaye de relancer le service.
8 Configuration de Squid
Toute la configuration de Squid se trouve dans le fichier Squid.conf  que l'on trouve dans  /etc/squid/ ou /usr/local/squid/etc.
A partir de la version 2 voici un fichier squid.conf avec des commentaires qu'il faut adapter à votre configuration.
La plupart des options par défaut du fichier Squid.conf ne sont pas à changer (vous pouvez alors laisser le # pour conserver les options par défaut).

http_port: le port que vous souhaitez utiliser. Le plus fréquent est 8080. Il faut donc changer cette valeur car par défaut Squid utilise 3128.
icp_port: Conserver le port 3130. Ceci vous permet de communiquer avec des proxy-cache parents ou voisins.
cache_mem : correspond au cache mémoire, la valeur dépend de votre systéme. Par défaut squid utilise 8 Mo. Cette taille doit être la plus grande possible afin d'améliorer les performances (Considérez 1/3 de la mémoire que vous réservez à Squid). Il faut avec cache_mem régler cache_mem_low et cache_mem_high qui sont les valeurs limites de remplissage du cache mémoire. Par défaut les valeurs sont 75 % et 90 %. Lorsque la valeur de 90 % est atteinte le cache mémoire se vide jusqu'à 75 %. Les valeurs par défauts sont bien dans la plupart des cas. 
cache_swap : correspond à la taille de votre cache disque. Si la taille du disque le permet, et en fonction de la taille de votre établissement (nombre de client qui utilise le cache), mais aussi de la durée de rafraîchissement de votre cache et du débit de votre ligne, vous devez mettre la valeur qui vous semble correspondre à votre situation.
 cache_peer :  Indiquer ici les proxy parents du rectorat. Attention vous ne pouvez y accéder que si vous êtes connecté via le rectorat ou Oléane. cache_peer proxy.ac-creteil.fr parent 8080 3130 no-query default. Si vous utilisez un provider privée ne rien mettre ici. 
acl QUERY urlpath_regex cgi-bin \? \.cgi \.pl \.php3 \.asp : Type de page à ne pas garder dans le cache afin de pas avoir les données d'un formulaire par exemple.
maximum_object_size : taille maximale de l'objet qui sera sauvegardé sur le disque. On peut garder la valeur par défaut.
cache_dir : Vous indiquez ici le volume de votre cache. Si vous avez plusieurs disques utilisez plusieurs fois cette ligne.
cache_dir ufs /cache1 100 16 256             (cache de 100 Mb)
cache_dir ufs /cache2 200 16 256         (cache de 200 Mb)    
Placer de préférence le cache sur une partition propre. 
cache_access_log ; cache_log ; cache_store_log : Indique l'endroit ou se trouve les logs. Si vous ne souhaitez pas avoir de log (par exemple des objets cache_store_log) indiquer cache_store_log none.
debug_options ALL,1 :  niveau de debug. Indiquer 9 pour avoir toutes les logs à la place de 1. Attention cela donne de gros fichiers.
ftp_user : A utiliser pour indiquer au serveur ftp qui demande une authentification.
ftp_user squid@ac-creteil.fr par exemple.
dns_children : Par défaut le nombre de requêtes dns est de 5. Il peut être nécessaire d'augmenter ce nombre afin que Squid ne se trouve pas bloqué. Attention de ne pas trop l'augmenter cela pouvant poser des problèmes à votre machine (indiquer 10 ou 15). 
request_size :  Taille maximale des requêtes. Conserver le défaut, concerne les requêtes de type GET, POST..
refresh_pattern : Permet de configurer la durée de mise à jour du cache. Utiliser -i pour ne pas tenir compte des minuscules/majuscules. (voir le fichier squid.conf). Les valeurs Min et Max sont indiquées en minutes.   
visible_hostname : indiquer ici le nom de votre serveur proxy.ac-creteil.fr
dns_testnames : Conserver les valeurs par défauts ou indiquer ns1.nic.fr (pas la peine d'aller aux Amériques pour cela)
logfile_rotate : Pour faire tourner vos logs et garder un nombre de copies. par défaut 10. attention si votre cache est très utilisé il peut générer un grand volume de logs, pensez donc à réduire ce nombre.
error_directory :
Pour avoir les messages d'erreurs en français (indiquer le répertoire ou ils se trouvent). Par défaut les messages sont en anglais si vous avez utilisez un rpm. Si vous utilisez un fichier .tar vous devez le compiler avec l'option --enable-err-language=French, afin de les avoir tout de suite en français.

Je pense avoir donné les grandes lignes de la configuration du fichier squid.conf. Voir le fichier squid.conf pour un établissement imaginaire.

9 Accélerer les requêtes
A partir de la version 2, squid dispose d'un mode HTTP-accelerator. Il s'agit en fait d'un cache inversé qui va stocker les données envoyées par l'utilisateur vers le serveur web.
Il faut pour cela mettre dans le fichier squid.conf les lignes suivantes :

http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Il existe aussi un certain nombre de produits complémentaires qui permettent d'accélérer votre cache. Par exemple en récupérant les pages pendant les heures creuses. Pour plus d'information voir le site de Toulouse.

D'autres paramètres interviennent pour améliorer la rapidité de votre système de cache.
Vous pouvez par exemple installer sur votre machine Squid un cache DNS, augmenter la mémoire sur votre machine.
Enfin il existe un produit BoostWeb (payant) qui compresse les fichiers envoyés aux clients.  

10 Contrôler les accès

Pour contrôler tout ce qui passe par votre cache vous devez utiliser les ACL. Elles ont donc deux grandes fonctionnalités : contrôler qui a le droit d'utiliser votre cache et les requêtes que vous avez le droit de faire.

Pour interdire  certains sites on peut utiliser les ACL (Access Control List). On peut interdire en fonction du domaine, du protocole, de l'adresse IP, du numéro de port, d'un mot, on peut aussi limiter sur une période.
La syntaxe d'une ACL est la suivante :
acl                    aclname                        acltype             string[string2]
http_access            allow|deny                   [!]aclname
icp_access            allow|deny                   [!]aclname

acltype peut prendre comme valeur :

src (pour la source) : indication de l'adresse IP du client sous la forme adresse/masque. On peut aussi donner une plage d'adresse sous la forme adresse_IP_debut-adresse_IP_fin
dst (pour la destination) : idem que pour src, mais on vise l'adresse IP de l'ordinateur cible.
srcdomain : Le domaine du client
dstdomain : Le domaine de destination.
url_regex : Une chaîne contenu dans l'URL  (on peut utiliser les jokers).
urlpath_regex : Une chaîne comparée avec le chemin de l'URL (on peut utiliser les jokers).
proto : Pour le protocole.

Exemples :
Interdire l'accès à un domaine : Supposons que nous souhaitions interdire l'accès à un domaine (par exemple le domaine pas_beau.fr). On a donc

acl            veuxpas            dstdomain            pas_beau.fr
http_access            deny            veuxpas
http_access            allow            all

La dernière ligne ne doit exister qu'une fois dans le fichier squid.conf.
Interdire l'accès aux pages contenant le mot sexe.

acl            sexe            url_regex            sexe
http_access            deny            sexe
http_access            allow            all             (Une seule fois à la fin de vos ACL).

Attention url_regex est sensible aux majuscules/minuscules. Pour interdire SEXE il faut aussi ajouter SEXE dans votre ACL. Il n'est pas besoin de réécrire toute l'ACL (ce qui serait vite épouvantable)  on peut ajouter SEXE derrière sexe en laissant un blanc comme séparation (cela correspondant à l'opérateur logique OU).
On peut placer un nom de fichier à la place d'une série de mots ou d'adresses, pour cela donner le nom de fichier entre guillemets. Chaque ligne de ce fichier doit contenir une entrée.

# URL interdites
acl url_interdites url_regex "/usr/local/squid/etc/denied_url"
http_access deny url_interdites

Des produits associés à Squid permettent un contrôle plus simple (Squid n'a pas vocation à être un moyen de contrôler de nombreux sites). Voir le site de l'université de Toulouse pour plus d'informations. SquidGuard permet d'interdire des milliers de sites. La base est entretenue par Toulouse. 
Pensez si vous utilisez SquidGuard à configurer la ligne suivante dans le fichier squid.conf : 
redirect_program /usr/local/squid/bin/SquidGuard 

Pour contrôler qui a le droit d'utiliser votre cache créé une ACL du type :
acl mon_lycee    src    192.168.0.0/255.255.0.0
http_access    allow    localhost    
http_access    allow    mon_lycee
http_access    deny    all

Vous pouvez ajouter autant d'ACL que vous le souhaitez. Par exemple si vous avez plusieurs cartes réseau. 192.168.0.0/255.255.0.0 peut être modifié en fonction de votre plan d'adressage, éventuellement réduit en fonction de votre plan d'adressage (joué sur le masque).

Je ne parle pas ici de toutes les ACL possibles, le principe reste de même que pour les précédentes.

11 Contrôler les accès par authentification

Parmi les demandes qui reviennent le plus souvent, la question de l'utilisation de Squid pour contrôler qui a le droit d'aller sur internet, est l'une des plus fréquente.
On peut imaginer deux solutions :

La première consiste à contrôler les accès par salle et par horaires, en fonction d'un plan d'adressage de votre établissement. Le travail de l'académie de Grenoble avec Slis permet de faire cela. On l'administre avec une interface Web. Ce n'est alors pas Squid qui est utilisé pour cela mais le routage.

La deuxième solution est de contrôler en fonction des individus. Squid permet de faire cela, mais la gestion (en l'absence d'une interface) n'en est pas simple. Vous devez utiliser des outils externes pour cela. Il existe aussi des outils Squid LDAP, mais faute d'avoir essayé je ne peux vous en dire plus. 
Vous pouvez essayer WPM un produit non complet mais qui vous permet déjà d'interdire certaines choses.

12 Interface web de Squid

Squid dispose en standard d'un scipt cgi qui donne des informations sur l'utilisation du cache. Pour cela il faut avoir Apache et placer cachemgr.cgi  dans cgi-bin. 
Pour configurer complètement cachemgr.cgi il faut placer dans le fichier Sqid.conf une ligne commençant par cachemgr_passwd. Si cette ligne n'existe pas dans le fichier de configuration de Squid alors toutes les fonctions sont permises sauf la modification du fichier Squid.conf ainsi que le Shutdown du proxy.
La ligne doit ressembler à :
cachmgr_passwd            mot_de_passe             shutdown 
Si vous souhaitez tout autoriser indiquer all à la place de shutdown, comme ceci.
cachmgr_passwd            mot_de_passe             all
Je ne trouve pas personnellement que cette interface apporte grand chose, mais bon. Je vous conseille d'en protéger l'accès (placer un mot de passe au niveau du répertoire en utilisant le serveur Apache).
Il existe des produits que l'on trouve librement sur internet capable de vous donner des statistiques plus claires que cachemgr. Je vous propose prostat qui est celui que j'utilise. Il est en français et est très clair.

 

13 Interface web pour configurer Squid

On me pose souvent cette question, je ne sais pas vraiment, essayez Webmin, une interface HTML pour administrer Linux et quelques grands classiques, mais bon ...!

14 Comprendre les logs :

On peut surveiller les logs à l'aide de la commande tail -f  access.log (les logs de Squid se trouvant dans le répertoire /var/log/squid ou /usr/local/squid/log.
access.log donne les informations sur les requêtes qui ont transité par Squid.
cache.log informe sur l'état du serveur lors de son démarrage.
store.log informe sur les objets stockés dans le cache.

Voici les valeurs que vous pouvez voir dans le fichier access.log. Les codes commençant par TCP_  sont les requêtes sur le port 8080:           

TCP_HIT

Une copie valide se trouve dans le cache

TCP_MISS

Pas dans le cache

TCP_REFRESH_HIT

Objet dans le cache, mais périmé. Squid demande au serveur d'origine si une nouvelle version est disponible, la réponse étant pas de nouvelle version

TCP_REF_FAIL_HIT

Objet dans le cache, mais périmé. Squid demande une mise à jour, mais n'obtient pas de réponse du serveur. Il renvoie alors l'ancienne version.

TCP_REFRESH_MISS

Objet dans le cache, mais périmé. Squid demande une mise à jour qu'il reçoit

TCP_CLIENT_REFRESH

Le client envoie une requête avec une demande de ne pas utiliser le cache. Squid forward la requite.

TCP_IMS_HIT

Le client demande une mise à jour, et l'objet est dans le cache et est récent. Squid ne forward pas la requête.

TCP_IMS_MISS

Le client demande une mise à jour. Squid forward la requête.

TCP_SWAPFAIL

Problème de swap. L'objet semble être dans le cache mais n'est pas accessible. La requête est forwardée.

TCP_DENIED

Accès est dénié.

UDP_ sont des codes sur le port ICP:

UDP_HIT

Une copie récente de la copie est dans le cache

UDP_HIT_OBJET

Idem que UDP_HIT, mais l'objet est envoyé dans un paquet UDP 

UDP_MISS

Objet pas dans le cache ou périmé

UDP_DENIED

Accès interdit pour cette requête

UDP_INVALID

Requête invalide

UDP_MISS_NOFETCH

La requête n'a pas été faite à temps (arrêt ou démarrage du serveur)

ERR_  sont des codes d'erreurs. Ils sont trop nombreux pour être traités ici.

Codes Hiérarchiques

DIRECT

Squid forward directement la requête au serveur d'origine

FIREWALL_IP_DIRECT

Squid forward la requête directement au serveur d'origine, parce que le serveur d'origine est derrière un Firewall

FIRST_UP_PARENT

Squid forward la requête au premier parent disponible de la liste

LOCAL_IP_DIRECT

Squid forward directement la requête au serveur d'origine car l'adresse correspond à une adresse locale

SIBLING_HIT

Squid forward la requête à un cache sibling qui a envoyé un UDP_HIT

NO_DIRECT_FAIL

Squid ne peut pas forwarder la requête parce qu'un firewall l'interdit ou il n'y a pas de cache parent.

PARENT_HIT

Squid forward la requête à un cache parent qui a envoyé un UDP_HIT

SINGLE_PARENT

La requête est forwardée à un cache parent approprié pour cette requête. Il faut que le single_parent_bypass soit actif.

SOURCE_FASTEST

Squid forward la requête au serveur d'origine car la requête à ce serveur source_ping arrive plus vite.

PARENT_UDP_HIT_OBJ

Squid reçoit la réponse dans un UDP_HIT_OBJ du cache parent.

SIBLING_UDP_HIT_OBJ

Squid reçoit la réponse dans un UDP_HIT_OBJ du cache sibling.

DEFAULT_PARENT

Squid forward la requête à un cache parent par défaut sans envoyer une requête ICP avant.

ROUNDROBIN_PARENT

Squid forward la requête à un cache parent round-robin, sans envoyer de requête ICP avant

CLOSEST_PARENT_MISS

Squid forward la requête à un cache parent
Cela existe que si vous avez déclaré query_icmp dans le fichier de configuration.

NONE

Squid ne forwarde aucune requête

15 Contrôler le cache :


1) Réinitialiser le cache, pour cela il faut relancer Squid avec l'option -z.
2) Purger le cache, pour cela il faut mettre dans le fichier squid.conf les ACL suivantes afin de n'autoriser cela que depuis la machine serveur.
acl PURGE method purge
acl localhost src 127.0.0.1
http_access allow purge localhost
http_access deny purge
Il suffit alors d'utiliser le programme client avec la syntaxe suivante
client -m purge http://le_truc_que_je_veux_enlever.fr
On doit avoir alors le message HTTP/1.0 200 Ok
Date : ce_jour
Server: Squid/2.2.4
Si cela ne marche pas vous aurez le message 404 Not Found.
3) Purger la totalité du cache
Il est nécessaire de purger régulièrement la totalité de votre cache afin d'enlever certains fichiers qui pour des raisons diverses refusent de se remettre à jour.  Mettez en place une crontab pour faire cela.

16 Installer une interface pour traiter les logs

Je vous propose ici Prostat. Ce produit est en français, et de plus il est assez simple à installer.
La version actuelle est la 1.32 que l'on peut télécharger ici.
Décompacter le fichier gunzip prostat-1.32.tar.gz puis lancer tar xf prostat-1.32.tar.
Vous allez avoir un sous répertoire prostat-1.32 avec un certains nombre de fichiers, Lire le fichier LISEZ_MOI (A vous de voir ou vous souhaitez l'installer).
Il faut avoir installé le compilateur C sur votre machine (et les bonnes librairies) pour pouvoir le compiler ainsi que make (par défaut sur la Mandrake cela n'est pas installé).
Se placer dans le sous répertoire gd1.2 puis compiler à l'aide de la commande make, puis se placer dans le répertoire prostat-1.32 et configurer les fichiers analhead.h et prostat.conf.
Une fois compilé, vous pouvez toujours modifier le fichier prostat.conf. Lancer alors la commande make pour compiler prostat.
Lancer prostat à l'aide de la commande indiquée dans LISEZ_MOI et de cron.
crontab -e (vous ouvrez alors une fenêtre vi) puis pour avoir les logs tous les dimanche à 2 heures du matin indiquer 0 2 * * sun  /usr/bin/prostat-log (prostat-log étant votre fichier ou se trouve le script qui se trouve dans LISEZ_MOI.. (Voir le résultat sur le site de Jussieu).

17 Caches hiérarchiques

Squid est capable de "discuter" avec d'autres proxy cache, à l'aide de ICP (Internet Cache Protocole) sur un port particulier (3130 par défaut). On peut ainsi cascader un certain nombre de caches.
Il faut pour cela dans le fichier de configuration de Squid valider la ligne
cache_peer            type            http_port            icp_port           options

Pour le type on a comme possibilité :
parent : Le cache ainsi défini contacte le cache parent et attend la réponse via ICP, si le cache parent ne possède pas la réponse il se la procure et la fait suivre au cache demandeur (votre cas si vous passez par Oléane ou par le rectorat).
sibling : Le cache contact le cache parent, si celui ci n'a pas la réponse, le cache enfant se procure directement la page. Celle ci n'est pas chargée sur le cache parent.

Pour http_port et icp_port utiliser 8080 et 3130, mais cela n'est pas obligatoire.

Pour les options on dispose des options suivantes :
proxy-only : On indique à l'aide de cette option que les données envoyées par le proxy interrogé ne sont pas dans le cache local.
weight : pour avoir une pondération entre plusieurs caches
no-query : Afin de ne pas envoyer de requêtes ICP au proxy indiqué.
round-robin : Utiliser pour répartir la charge entre plusieurs proxy.

Ainsi pour l'académie de Créteil il faut indiquer :

cache_peer           proxy.ac-creteil.fr parent  8080  3130 no-query default
Indiquer aussi cache_peer_domain     proxy.ac-creteil.fr     !votre_lycee.ac-creteil.fr

Afin de ne pas envoyer les requêtes pour votre établissement au cache parent.
Ce proxy n'est utilisable que si vous êtes un établissement scolaire connecté par le rectorat ou par Oléane.

Il existe une autre option de caches hiérarchiques qui est : cache_digests. Pour pouvoir l'utiliser il faut avoir compilé squid avec l'option ./configure --enable-cache-digests. Cette solution est plus intéressante que ICP, car le trafic entre les caches est plus réduit. Elle n'a pas d'intérêt pour un établissement scolaire.   
Il faut alors mettre la ligne suivante : cache_peer           mon_premier_cache.fr    sibling  8080  3130 no-query proxy-only
Dans le cas des caches hiérarchiques indiquer plutôt l'adesse IP à la place de mon_premier_cache.fr

18 Répartition de charge entre plusieurs caches
Il existe plusieurs solutions pour cela.
1)      Utiliser la configuration automatique des clients. Voir pour cela configuration automatique des clients
2)      Utiliser un script perl à la place d'un fichier .pac capable en fonction des adresses des clients de dispatcher les requêtes.
3)      Utiliser le DNS (round robin).
4)      Utiliser un L4 switch capable de faire cela (load balancing).
5 ) Mettre en place une solution à l'aide d'une machine sous Linux capable de dispatcher les demandes (par exemple Linux IPVS).
6) Mettre en place un Squid sans cache pour répartir la charge, avec comme cache parent l'option parent.

19 Configurer les clients

Pour configurer les clients, on peut utiliser la configuration manuelle ou la configuration automatique. Voir ici pour plus de détails 

20  Forcer le passage par SQUID

Il existe plusieurs solutions:
1) Configurer votre navigateur avec le bon proxy ou en utilisant le fichier de configuration automatique et le rendre impossible à changer. Mais cela nécessite que vous contrôliez les clients ce qui n'est pas toujours le cas.
2) Placer deux cartes réseau dans votre machine avec deux plans d'adressage distinct (vos utilisateurs ne connaissent pas l'adresse de votre routeur et de la deuxième carte réseau), seul alors Squid est capable d'aller sur internet. Cette solution me semble la plus efficace.
3) Complèter Squid avec l'option  --enable-ipf-transparent (Voir la doc de Squid).
4) Intercepter les requêtes sur le port 80 pour les rediriger sur Squid. Utiliser pour cela TransProxy 
5) Il existe maintenant des Switchs capables de faire cela mais le prix reste élevé.
 
21 Dans votre établissement :

Dans l'établissement "qui est le votre" la configuration de Squid peut être la suivante.
Une machine avec un disque assez grand (mais la taille des disques actuels et le prix ne posent plus de problèmes, un SCSI plutôt d'un IDE). Prévoir assez de mémoire sur la machine.
Je propose une RedHat ou Mandrake qui sont des distributions assez simples à mettre en oeuvre. De plus on trouve dans beaucoup de revue la Mandrake. Utiliser une version récente de Squid (version 2 stable 4 que l'on peut trouver sur tous les CD, mais aussi sur le site de Squid).
Vous trouverez ici un fichier Squid.conf  pour un établissement de l'académie, et ici un fichier pour la configuration automatique de vos clients.
Le paramétrage des fichiers tient compte de la présence ou non d'un serveur Web local (dans l'établissement) et de l'utilisation du proxy cache du rectorat comme cache parent. 

 

22 Sources d'information sur Squid :

Le site de Squid : http://squid.nlanr.net/

Université de Toulouse : http://cache.univ-tlse1.fr/documentations/cache/index.html
Le cru : http://www.cru.fr/renater-cache/er-cache/
Sur l'académie de Nancy http://stargate.ac-nancy-metz.fr/linux/cache/

© Philippe Chadefaux - 10/06/1999 -