Arborescence de proxy « Squid », calamaris sous Windows…
Pour les planet-libristes extrêmistes : oui je parle aussi de Windows, pas la peine de balancer vos trolls habituels. Je parle ici d’un environnement mixte Windows/Linux sur fond avant tout de Squid, Calamaris et PERL.
Hop,
Dans une infra avec un proxy central et des sites distants reliés par des connexions assez lentes (et pas d’accès web direct), j’ai décidé de mettre en place des proxies « fils » sur les sites distants, pour soulager l’inter-site.
Manque de bol, à distance, uniquement des serveurs Windows sous la main…
Bon, squid existe sous Windows. Et « calamaris » n’est que du PERL. Ca doit pouvoir le faire.
Je fais cet article comme aide-mémoire, comme souvent, et surtout parce-que quand il faut automatiser des choses sous Windows, on voit vite que c’est vraiment la merde… Alors pour ne pas chercher 107 ans la prochaine fois, voici les quelques commandes à enchainer.
Et puis je n’avais pas envie/possibilité d’installer un superbe proxy-by-Microsoft, genre ISA ou je ne sais plus comment il s’appelle. Pas la peine non plus de chercher les ennuis quand on a un squid qui marche très bien
Je parle sur mon blog à différents moments de Squid, ou de proxy. Ca me fait penser que je n’ai rien écrit sur la mise en place d’un squid tout bête. On va considérer que c’est acquis. Sinon, avec le présent article et les autres, vous devriez avoir une certaine aide.
Installation et configuration des squid Windows
Je passe sur le aptitude install téléchargement à la main du gros zip contenant squid pour Windows, qu’on trouve à partir du site officiel (faut chercher un peu. Bon OK, c’est là). J’ai pris la même version que pour Debian Lenny, histoire d’interconnecter des squid de même génération… sait-on jamais. C’est donc la 2.7-STABLE7 (en fait ça doit être 2.7-STABLE5 en Debian, il me semble).
Ensuite, j’ai dézippé comme un cochon dans c:\squid\
et adapté la conf. Ce que je décris ci-dessous.
Configuration minimale
Il faut copier les fichiers c:\squid\etc\*conf.default
en c:\squid\etc\*conf
et adapter les contenus, notamment dans squid.conf
:
- Adapter « acl localnet src » pour votre sous-réseau
- Déclarer le cache à utiliser : cache_dir ufs d:/squid/var/cache 4000 16 256
- Taille limite des objets mis en cache, à voir suivant votre cas : maximum_object_size 81920 KB
- Différents répertoires pour les fichiers de logs : cache_log d:/squid/var/logs/cache.log
- cache_store_log d:/squid/var/logs/store.log
- netdb_filename d:/squid/var/logs/netdb.state
J’ai voulu séparer les logs sur un disque à part. A noter les « / » (et non pas des « \ »).
Service, initialisation du cache
Ensuite, il faut installer le service et créer le cache (j’ai laissé le format de cache par défaut, une arborescence de répertoires avec des fichiers aux noms codés) :
cd c:\squid\sbin squid -k squid -i net start Squid
A noter que le nom du service n’est pas spécifié, ce sera donc par défaut « Squid », c’est important pour la rotation de logs.
Le « net start Squid
» ne devrait être fait qu’après configuration du lien avec le proxy « père » central, ce qu’on n’a pas encore fait. Mais bon, je le montre maintenant pour illustrer.
En images, ça donne :
Déclaration du squid « père »
Dans la conf, il faut simplement caser un :
cache_peer proxycentral.maboite.fr parent 3128 3130 name=pxycentral acl ftp proto FTP always_direct allow ftp
J’explique : on déclare que ce proxy a un père (parent), sur le port 3128, machine « proxycentral.maboite.fr ». On attaquera l’interrogation du contenu de son cache via le protocole ICP (UDP/3130) et on le surnomme « pxycentral » dans les logs access.log
histoire d’y voir clair.
Evidemment, le proxy central doit être ouvert sur le port TCP/3128 et UDP/3130 depuis les proxies « fils ».
Rotation de logs
Pour la rotation de logs, c’est en général un grand moment de bonheur pur sous Windows lorsqu’on amène un outil « du monde libre, tout ça » dans Windows. Heureusement ce coup-ci, Squid embarque ce qu’il faut :
c: cd \squid\sbin squid -k rotate -n Squid
Reste à mettre ça en « tâche planifiée » Windows.
Maintenant que ça tourne (testez), reste à synthétiser les logs, comme on le ferait naturellement sous Linux.
calamaris sous Windows, youpiiiii
Dans mon cas, ramener les logs sur un Linux qui aurait fait tourné calamaris était compliqué à mettre en oeuvre. Dans votre cas aussi, je suppose, car la rotation des logs fait que les fichiers sont renommés. Donc même avec un rsync (ou truc du genre), vous allez vous resynchroniser des Mo de logs (compressés éventuellement) à chaque fois.
Bref, j’ai opté pour un déploiement de PERL sur les serveurs distants et une « tâche planifiée » pour générer les pages statiques de statistiques des « fils » Squid.
Sous Windows, rien n’est fourni, je noterai donc ici la ligne de commande bien longue qu’on n’a pas besoin de chercher sous Linux, car les scripts « cron » sont fournis avec le paquet calamaris. Sous Debian en tout cas.
J’ai donc utilisé ActivePerl et récupéré calamaris en .tar.gz sur le site de l’éditeur. Manque de bol, j’ai retrouvé le même bug que décrit ici, donc j’ai fini par recopier le script perl /usr/bin/calamaris
issu de ma Debian, patché pour corriger ledit bug.
Ensuite, plutôt que de ramer avec le fichier de conf, j’appelle calamaris en ligne de commande, via une « tâche planifiée », et ça fait le boulot. C’est pas terrible mais bon, ça marche.
Pire que tout, pour générer les stats « weekly » et « monthly », je recalcule tout en concaténant les différents « access.log.* » issus des rotations de logs, sur X jours.
En résumé, ça donne :
- Installation de ActivePERL
- Création dans C:\PERL\lib d’un répertoire calamaris avec les 3 fichiers .pm (modules PERL) pour la génération de graphiques dans les stats ; je n’ai pas trouvé comment lui spécifier d’utiliser ces modules, sans avoir à les copier dans PERL/lib. Je n’ai pas trop cherché non plus. Ca doit être avec « -I » ou quelque chose comme ça.
- Recopie du script « calamaris » issu de Debian, quelque part sur le Windows
-
Mise en place de tâches planifiées appelant des « .bat » dans ce genre là :
@echo off d: cd D:\calamaris-2.99.4.0 type d:\squid\var\logs\access.log.0 | perl calamaris -a -F html,graph -H lookup --output-path d:\calamaris\output\daily
Notez que GD::Graph, nécessaire pour les graphiques, est installé par défaut avec ActivePERL.
Et voilà, mettez tout ça en oeuvre et ça devrait le faire.
Quelques remarques en vrac
Si tous les codes de retours de Squid ne vous parlent pas, lisez cette documentation là.
Comme je parle dans cet article d’un environnement mixte Windows & Linux, on peut parler de WSUS. Ces considérations pour Squid concernant les mises à jour Windows peuvent vous intéresser : http://wiki.squid-cache.org/SquidFaq/WindowsUpdate