Squid : le proxy multiplateformes en open source

La performance est un des critères les plus importants pour un site Web et représente un gage de qualité important. Les longs temps de chargement impatientent les visiteurs et ils auront tendance à quitter le site avant d’attendre la fin du chargement et que le site ait pu les convaincre par la qualité du contenu. Le Page Speed compte désormais pour Google parmi les composants nécessaires pour une expérience utilisateur moderne depuis 2010 et c’est devenu un véritable critère de référencement. C’est pourquoi les administrateurs de sites Web devraient veiller à ce que la rapidité de leur site soit satisfaisante pour optimiser leurs projets.

Vous avez entre autres la possibilité de compresser les images du site, de réduire la densité des données du code ou encore d’optimiser le nombre de requêtes.

Une autre approche consiste à utiliser un proxy inverse pour décharger le serveur. Ces composants logiciels servent d’interface entre le navigateur et le serveur Web car ils traitent les requêtes du navigateur et délivrent les contenus statiques mis en mémoire tampon sans contacter le serveur Web. Cette méthode est particulièrement efficace, notamment lorsque le serveur a recours à un affichage dynamique systématique sans pour autant changer automatiquement. Une des solutions les plus populaires consiste à utiliser le programme Squid pour réaliser un tel cache proxy.

Squid, c’est quoi ?

Squid est un logiciel de serveur proxy qui a été mis sur le marché en 1998 par Duane Wessels en tant qu’alternative au « Harvest object cache ». Une version commerciale est apparue en parallèle, nommée NetCache. Son développement a par ailleurs été arrêté depuis. Squid est distribué sous la licence GNU (General Public License) et est compatible entre autres avec les protocoles HTTP, HTTP/2, HTTPS et FTP. Les serveurs proxy Squid sont compatibles avec la majorité des systèmes d’exploitation et différentes versions de Linux, Mac OS X ou Windows. Les commandes s’effectuent de manière classique via une interface graphique comme GAdmin SQUID ou encore SquidMan.

Des milliers d’administrateurs de sites Web utilisent les possibilités offertes par le cache du proxy open source. Wikipedia a par exemple eu recours aux proxys Squid pendant plusieurs années pour délivrer le contenu, tout en déchargeant la base de données et le serveur Web. De plus, il est possible avec Squid et à l’aide d’HTTPS de prendre en charger des connexions sécurisées en SSL. De plus, divers fournisseurs Web utilisent mondialement Squid en tant que proxy transparent pour assurer l’optimisation de l’accès internet. Évidemment, il est toujours possible d’utiliser les logiciels en open source pour un seul Client et ainsi cacher son adresse IP, tout en s’assurant d’une sécurité complémentaire pour le filtrage de paquets de données du pare-feu. De manière alternative, Squid peut filtrer ces paquets de données indépendamment avec l’extension SquidGuard.

Pourquoi utiliser Squid en tant que serveur proxy

Squid est un produit en open source, depuis sa toute première version. Aucun frais de licence n’est donc engendré et le texte source est disponible librement. Il n’est donc pas possible de télécharger le logiciel gratuitement, mais il est possible de l’adapter à vos besoins. Cela ne sera néanmoins nécessaire que dans une minorité de cas : l’expérience des développeurs du projet Squid s’étend sur plus d’une dizaine d’années. Ils développent le programme proxy à titre gracieux et sur la base du volontariat. Squid est un logiciel qui comporte de multiples facettes et optimise la vitesse d’un site. Des listes de contrôle d’accès (Access Control Lists) permettent également de l’utiliser pour un usage privé. D’un côté, l’accès à des contenus en particulier peut être restreint ou alors la bande passante est limitée. De l’autre côté, les fichiers log du proxy utilisé peuvent être analysés sans difficultés pour contrôler le trafic des données.

Une des particularités principales de Squid repose sur sa grande flexibilité, ce qui est un avantage important pour les réseaux les plus grands et les plus complexes. Ainsi, il est par exemple possible de créer un groupement du cache te du proxy, en ayant recours à plusieurs proxys et de répartir les requêtes. Ce groupement de composants décharge les composants uniques et permet d’éviter les pannes.

Tout comme dans un Content Delivery Network, plusieurs reverse proxy peuvent se trouver à différents endroits.

Comment fonctionne le processus de cache du logiciel proxy

Les différentes fonctions de sécurité et de contrôle qu’il est possible de réaliser démontrent à quel point ce logiciel en open source comporte de multiples facettes. Squid convainc avant tout par sa fonction principale en tant que serveur proxy pour la mise en mémoire tampon. Pour s’assurer de sa disponibilité et son actualité, Squid calcule régulièrement votre statut et deux résultats sont alors possibles : l’objet en question est soit à jour (fresh) ou doit être mis à jour (stale). Pour que l’intégralité des données n’ait pas à être contrôlée, un algorithme calcule pour chaque objet à quelle fréquence une vérification sera nécessaire.  

Pour cela, différents facteurs sont pris en compte :

LM last modified ; Header-Information, qui dévoile la date de la dernière modification
EX expire; Header-Information, qui indique la date d’expiration de l’objet en question
NOW La date actuelle
OBJ_Date Date d’enregistrement du cache Squid et date de la dernière modification
MIN Durée de conservation de la mémoire tampon
MAX longévité maximale dans la mémoire tampon
PERCENT Facteur de durée de vie
Obj_Age Décrit la durée depuis laquelle un objet est dans le cache (NOW - OBJ_Date)
LM_Age Âge de l’objet au moment de la mise en mémoire tampon (OBJ_Date - LM)
LM_FACTOR Facteur de l’âge (Obj_Age / LM_Age)

Jusqu’à un instant dénommé X, un objet reste dans le cache. La formule en question pour le calcul est la suivante:

X = OBJ_Date + (LM_Age * PERCENT)

Le serveur proxy de Squid contrôle le statut d’un objet plus fréquemment si l’objet est régulièrement modifié. Le moment du contrôle le plus tôt est dénommé MIN, c’est-à-dire la longévité minimale dans la mémoire tampon. Lorsque la longévité maximale dans la mémoire tampon MAX est atteinte, Squid doit contacter le serveur Web. Pour cela, le serveur proxy envoie une requête GET avec If-Modified-Since, y compris avec le renseignement OBJ_DATE. Le serveur Web vérifie le statut de l’objet et envoie soit :

  • Le code de statut 304 (not modified), lorsque l’objet n’est pas modifié,
  • Le code de statut 200 (OK) tout comme le nouvel objet modifié.

Ainsi, les données sont véhiculées lorsqu’une modification aura été effectuée.

Quelles prérequis logiciels sont nécessaires avec Squid ?

Si vous désirez utiliser un proxy inverse de Squid pour votre serveur Web, vous devriez tout d’abord vous assurer que vous disposez des composants matériels nécessaires. Un tel proxy n’est pas forcément exigeant envers les capacités du processeur, mais envers le disque dur et la mémoire vive. Ces deux composants sont accessibles, c’est pourquoi leur acquisition est plus une question de justesse du calcul que de prix. Calculez votre besoin en fonction de votre projet Web et prenez en compte la croissance potentielle de votre site. En achetant vos composants informatiques, misez sur des composants modernes comme les disques durs SSD, qui se démarquent par la rapidité et une excellente optimisation de votre site Web.

Installer Squid : comment ça fonctionne ?

En règle générale, deux possibilités s’offrent à vous pour installer le logiciel Squid sur votre système. La première variante requiert d’avoir Squid sous forme de gestion des paquets dans la distribution  utilisée. Si tel est le cas, l’installation du programme proxy est possible via la barre de commandes. Avec Ubuntu, la commande sera la suivante :

sudo apt-get update
sudo apt-get install squid

La deuxième méthode consiste à télécharger le fichier de configuration. Cela permet de les dézipper et de les compiler de manière classique (par exemple dans la Version 3.5.20) :

tar xzf squid-3.5.20.tar.gz
cd squid-3.5.20
./configure
make

Avec la commande:

make install

Qui permet de débuter l’installation.

Depuis la Version 3.5, il existe pour les systèmes Windows (64-Bit) un fichier de configuration MSI, que vous pouvez lancer avec un simple double clic après le téléchargement. À chaque version stable qui aura été lancée, une version Beta et une version développement sera disponible et celles-ci comprendront de nouvelles fonctionnalités. Les deux versions servent en première ligne à tester ces fonctions, c’est pourquoi il est préférable de les utiliser lorsque l’on maitrise déjà le fonctionnement de Squid.

Configurer votre serveur proxy Squid pour un site Web plus rapide

Il est possible de définir de quelle manière votre proxy Squid va agir dans le fichier de configuration squid.conf. En règle générale, ce fichier se trouve sous /etc oder /usr/local/squid/etc/, c’est-à-dire dans le dossier qui aura été défini au cours de l’installation. Il existe déjà divers réglages prédéfinis qui sont identifiables dans les lignes de commentaires et commencent par (#). Dans les extraits suivants, un résumé des différentes options qui s’offrent à vous pour installer Squid est exposé.

Les différentes options réseaux : # NETWORK OPTIONS

Dans cet espace, les ports et les adresses IP peuvent être configurés pour l’administration du serveur. Les commandes suivantes sont utiles pour le cache du proxy :

http_port

Syntaxe : http port [nom d'hôte ou adresse IP:] numéro de port

Description : définition du port sur Squid sur lesquelles se basent les requêtes HTTP du client. De manière standard, c’est le port 3128 qui est désigné. Si ni le nom d'hôte ni l’adresse IP est affiché, ces réglages sont valables pour les adresses IP reliées. La saisie de plusieurs ports est possible.

Exemple : http_port 192.168.0.1:3128

https_port

Syntaxe : https_port [Adresse IP:]numéro de port cert=parcours vers le certificat SSL [key=Pfad zum privaten SSL-Schlüssel] [options]

Description : la saisie du port  HTTPS est requise pour que le proxy Squid puisse accepter les connexions SSL et TLS. La saisie du certificat (en format PEM) est obligatoire. Si vous ne saisissez pas de clé SSL privée, Squid part automatiquement du principe que le fichier de données PEM contient déjà une clé privée. Avec le paramètre options, il est possible d’étendre les fonctionnalités des documents OpenSSL.

icp_port

Syntax : icp_port numéro de port

Description : c’est ici que vous saisissez le port sue lequel les requêtes Squid ICP (Internet Cache Protocol) sont prises en compte et que les paquets de données UDP sont réceptionnés. La saisie n’est nécessaire que si vous utilisez plusieurs proxys qui doivent communiquer entre eux. Le port standard est 3130, pour désactiver la fonction il suffit de saisir le paramètre 0.

Exemple : icp_port 3130

Options de mise en cache : # OPTIONS WHICH AFFECT THE CACHE SIZE

Dans les options de mise en cache, vous déterminez entre autres combien de mémoire vive votre proxy Squid utilisera pour la mise en cache. Vous pouvez également définir la taille maximale et minimale des objets et les options générales de mise en cache.

cache_mem

Syntax : cache_mem mémoire vive en MB

Description : avec cache_mem, il est possible de définir la taille de la mémoire centrale pour les objets en transit (in transit objects), ceux qui sont souvent utilisés  (hot objects) ainsi que les objets en cache (negative cached objects). Comme ces données comptent jusqu’à 4KB, la valeur indiquée ici aussi doit comprendre une valeur multiple de 4KB. Ne confondez pas cette option avec la mémoire requise absolue de Squid, qui n’est pas régulée de cette manière.

Exemple : cache_mem 256 MB

maximum_object_size

Syntaxe : maximum_object_size taille de l’objet en KB/MB

Description : cette commande informe Squid sur la taille maximale de l’objet mis en mémoire tampon. La taille minimale peut être définie avec minimum_object_size.

Exemple : maximum_object_size 4 MB

Indication du cache et su répertoire fichier Log : # LOGFILE PATHNAMES AND CACHE DIRECTORIES

En plus des indications sur les ports et la procédure de mise en mémoire cache du navigateur, le proxy serveur Squid requiert des informations sur les contenus et les fichiers Log de la mémoire tampon.

cache_dir

Syntaxe : cache_dir type de dossier, chemin du répertoire, espace de stockage, nombre de répertoires

Description : avec cache_dir, il est possible de définir la capacité de stockage maximale en mégabytes et la quantité de répertoires et sous-répertoires. Le type de répertoire installé de manière standard est nommé ufs. Généralement, cette option doit être activée.

Exemple : cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

cache_log

Syntaxe : cache_log chemin des données

Description : détermine l’endroit où le fichier Log sera sauvegardé.

Exemple : cache_log /usr/local/squid/var/logs/cache.log

Options d’accès : # ACCESS CONTROLS

Pour finir, vous aurez besoin du port et des listes d’accès définies et utilisées par Squid. Deux paramètres sont déterminants :

acl

Syntaxe : acl Listenname Listentyp Argument

Description : cela permet de créer une liste d’accès détaillée pour toutes les connexions HTTP, ICP et TCP. Pour un aperçu exact des types et des options, il est recommandé de regarder en ligne dans le manuel en ligne Squid.

Exemple : acl all src 0.0.0.0

http_access

Syntaxe: http_acess allow|deny [!]Listenname

Description : autorise (allow) ou interdit (deny) l’accès au port http en fonction de la liste d’accès. Les points d’exclamation permettent l’ajout des connexions qui n’appartiennent pas à la liste en question. 

Exemple : htttp_access deny !SSL_ports