Configuration de Squid

Nous allons maintenant détailler les fichiers de configuration de Squid. Ceux sont placé dans le répertoire etc/ se trouvant à la racine de l'installation de Squid.

Fichier de configuration mime.conf

Ce fichier permet d'associer une extension de fichier avec ou un nom spécifique de fichier avec un type mime et une icône graphique. Ceci permet de présenter correctement une liste de fichier lors d'un parcours de répertoire en http ou FTP.

Le format de ce fichier est le suivant :

	  regexp mime icône encodage mode
	

voici le détaille de ces colonnes :

  • regexp : la chaîne de regexp permettant de reconnaître le type de fichier ;

  • mime : défini le type mime à associer au fichier ;

  • icône :défini l'icône graphique à associer au fichier ;

  • encodage : défini comment est codé le fichier (gz, deflate, ...)

  • mode : défini le mode de transfert du fichier (texte, image, ...)

Lorsqu'un paramètre n'a pas de valeur, il est tout de même présent avec la valeur '-'.

Example 3.1. Exemple de fichier mime.conf

\.gif$ image/gif anthony-image.gif - image

\.exe$ application/octet-stream anthony-unknown.gif - image

\.pdf$ application/pdf anthony-unknown.gif - image

\.Z$ - anthony-compressed.gif compress image

\.gz$ - anthony-unknown.gif gzip image

...

Fichier de configuration squid.conf

Présentation du fichier

Squid se configure via un unique fichier de configuration. Celui-ci est parsé au lancement de Squid qui s'efforcera alors de refléter celui-ci.

chaque ligne du fichier est de la forme suivante :

option paramètre [paramètre ...]
	    

Les ligne débutant par un '#' ne seront pas parsé (lignes de commentaires). Les options non définis auront toujours une valeur par défaut.

Toutes les options de ce fichier sont dispersée dans plusieurs partie distincte. Nous détaillerons les options les plus intéressantes de ces parties dans les chapitres suivant. Notez que le fichier de base fournis avec les sources est très largement commenté ! Pour plus de renseignement et des paramètres plus poussés, veuillez consulter la documentation de visolve[6].

Section réseau : "Network options"

Cette section concerne toutes les configurations réseau de Squid ayant trait aux adresses IP et ports de communication. Ces configurations réseau concernent les communication entre Squid et les serveurs distant, les clients et les caches distant.

  • http_port : défini le port d'écoute de Squid pour les requêtes HTTP. Par défaut, le port sera 3128. La valeur 0 permet de ne pas utiliser le service ;

  • icp_port : défini le port d'émission et d'écoute des requêtes ICP. Par défaut, 3130. La valeur 0 permet de ne pas utiliser le service ;

  • htcp_port : défini le port d'émission et d'écoute des requêtes ICP. Par défaut, 4827. La valeur 0 permet de ne pas utiliser le service

  • mcast_groups : défini une liste de groupe de multicast auquel le serveur doit s'enregistrer pour recevoir les flux ICP multicast. La liste contient donc une ou plusieurs adresses IP de multicast ;

  • udp_incoming_address / udp_outgoing_address : permet de définir sur quelle interface seront reçues ou émise les reqêtes ICP. Une valeur de 0.0.0.0 (défaut) pour udp_incoming_address définira que Squid écoutera sur toutes les interfaces réseau. Une valeur de 255.255.255.255 (défaut) pour udp_outgoing_address permet d'indiquer à Squid d'utiliser la même interface que celle de udp_outgoing_address ;

Section hiérarchie de serveur cache : "The neighbor selection algorithm"

Cette section permet de configurer le comportement de son serveur cache vis-à-vis des autres cache avec lesquels il est en relation.

  • cache_peer : cette option défini les serveurs de cache voisin avec lesquels le serveur peut communiquer. Cette option contient les paramètres suivants dans l'ordre d'apparition sur la ligne :

    • hostname : l'adresse IP ou le nom du serveur ;

    • Type : permet de définir le type de communication avec le cache distant. Trois valeurs possible :

      • parent : le parent répond à son fils s'il possède l'objet, sinon, relaye la requête à l'un de ses fils ;

      • sibling : idem que pour parent, mais la requête n'est pas relayée en cas d'échec de la demande ;

      • multicast : la requête est émise vers plusieurs cache via une adresse multicast.

    • http_port : le port d'écoute du serveur distant pour les requêtes proxy http ;

    • icp_port : le port d'écoute du serveur distant pour les requêtes ICP ;

    • option : permet de définir les options de communication avec le cache distant.

  • cache_peer_domain cacheServer domaine [domaine ...] : permet de définir pour un cache distant les domaines pour lesquels il sera interrogé ;

  • neighbor_type_domain cacheServer type domaine [domaine ...] : permet de modifier le type d'un serveur cache (parent ou sibling) pour une liste de domaine donné.

  • icp_query_timeout : permet de définir le timeout des requêtes ICP. Normalement Squid défini automatiquement ce timeout grâce à la valeur 0 par défaut ;

  • maximum_icp_query_timeout : permet de définir le temps maximum de timeout lorsque celui-ci est défini dynamiquement par Squid ;

  • mcast_icp_query_timeout : cette valeur défini combien de temps devra attendre Squid avant de compter le nombre de réponses reçues.

  • dead_peer_timeout : cela permet de définir à partir de combien de temps Squid va considérer u nserveur cache distant comme non-disponnible.

Configuration de la taille du cache : "The cache size"

Cette section permet de configurer certain paramètres agissant directement sur la taille du cache.

  • Cache_mem (bytes) : permet de définir la taille idéale de mémoire RAM à allouer pour les objets en transit, les objets très demandés et les objets non-cachable.

  • maximum_object_size (bytes) : permet de spécifier la taille maximale des objets qui seront stockés dans le cache ;

  • minimum_object_size (bytes) : permet de spécifier la taille minimale des objets qui seront stockés dans le cache ;

  • maximum_object_size_in_memory (bytes) : permet de spécifier la taille maximale des objets qui seront stockés en mémoire RAM ;

  • ipcache_size (number of entries) : permet de spécifier le nombre d'adresse IP qui seront enregistrée ;

  • fqdncache_size (number of entries) : permet de spécifier le nombre de fqdn qui seront stockés en mémoire ;

  • cache_replacement_police : permet de spécifier la politique de remplacement des objets dans le cache. Il y a 4 définitions disponible :

    • LRU : les objets les plus récents sont conservé en mémoires ;

    • heap GDSF : conserve les éléments les plus nombreux et de petites taille dans le cache afin de garder le maximum de chance de pouvoir répondre aux requêtes ;

    • heap LFUDA : permet de conserver les objets les plus demandé en cache en prenant en compte le ratio taille / nombre de demandes ;

    • heap LRU : identique au RLU en prenant en compte le rapport taille / nombre de demandes.

    Example 3.2. Statistiques de remplacement d'objet en fonction du la politique appliquée

    Nous pouvons voir sur ces deux graphiques que la politique heap GDSF tiens bien son rôle en conservant un nombre d'objets atteignable dans le cache maximal. En revanche, coté quantité de données transmise, celui-ci reste moins bon que les deux autres politique.

  • memory_replacement_policy : politique de remplacement des objets en mémoire RAM. voir cache_replacement_policy pour les options disponibles.

Chemin d'accès aux fichier de Squid : "Log file path names and cache directories"

Cette section permet de spécifié les chemin d'accès vers les différents fichiers de log et d'informations.

  • Cache_dir Type répertoireSource MOctets Level1 Level2 : permet de définir un cache. il est possible de définir plusieurs fois cette option afin de multiplier le nombre de cache. détaillons les options de ce paramètre :

    • Type : Le type de stockage qui sera utilisé par Squid pour écrire ses données. Ce paramètre modifie le comportement de Squid lors de l'écriture sur le disque, ses accès au disque, sa répartition de donnée sur l'espace qui lui est consacrée, etc...Une liste des type supporté est détaillée dans le fichier de configuration de Squid ;

    • répertoireSource : le répertoire source de l'arborescence du cache. Le cache de Squid se présente sous forme d'une arborescence dans laquelle les objets sont répartis ;

    • MOctets : la taille en Mo à réserver sur le disque pour ce cache ;

    • Level1 : le nombre de répertoire de niveau 1 dans l'arborescence du cache. La structure de l'arborescence du cache peut rapidement influencé les performance de celui-ci en fonction du nombre d'objet y étant enregistré.

    • Level2 : le nombre de répertoire de niveau 2 dans l'arborescence du cache.

  • cache_access_log DirectoryPath/filename : le chemin vers le fichier de access.log qui contient touts les accès au cache :

  • cache_log DirectoryPath/filename : idem que pour cache_access_log pour le fichier cache.log qui contient toutes les informations des activité de Squid. La quantité de donnée écrite dans ce fichier peut être contrôlé grâce au paramètre debug_options que nous détaillerons plus loin ;

  • cache_store_log DirectoryPath/filename : idem que pour cache_access_log pour le fichier store.log qui contient toutes les entrée et sortie des objets dans le cache ;

  • emulate_httpd_log on|off : permet de contrôler le format de sortie des log d'activité de Squid. Si le paramètre on est choisi, les log seront de type CLF[7]. Sinon, Squid utilisera un format qui lui est propre et plus détaillé ;

  • mime_table : idem que pour cache_access_log pour le fichier mime.conf que nous avons détaillé dans le chapitre 3.2.1 ;

  • pid_filename DirectoryPath/filename : Squid enregistrera dans le fichier donné le PID de son processus ;

  • debug_options Section, niveau : Permet de spécifier le niveau de debug pour un section donnée dans le fichier cache.log. Par défaut, cette valeur sera défini à ALL,1.

Comportement avec les application extérieures : "Support for External functions"

Cette section défini certains paramètre qui modifierons le comportement de Squid envers les application qui lui sont extérieur comme les serveurs distant ou ses application déléguées.

  • ftp_user : permet de spécifier quel sera le nom d'utilisateur envoyé à un serveur FTP par squid lors d'une connexion en anonymous ;

  • ftp_list_width : permet de définir la longueur maximale des noms de fichier dans une liste. Une fois cette taille dépassée, le nom sera tronqué et des points de suspentions ajouté ;

  • ftp_passive on|off : permet de spécifier le mode de connection FTP utilisé par Squid ;

  • dns_children : le nombre de processus de demande de DNS résidant en mémoire. Plus le serveur sera solicité, plus ce nombre devra être grand ;

  • dns_timeout : permet de spécifier un timeout avant à partir duquel Squid considèrera le serveur DNS distant comme étant indisponible ;

  • dns_nameservers : permet de définir une liste d'adresse IP de serveur DNS qui remplacera celle lue par défaut le fichier de configuration /etc/resolv.conf sous Linux ;

  • redirect_program : spécifie le chemin vers un exécutable permettant de ré-écrire une URL sous certaine conditions connues de cet exécutable. Chaque demande sera alors envoyée vers ce redirecteur avant d'être traitée. Un tel programme peut permettre de tenir à jour une blackliste d'URL par exemple ;

  • redirect_children : Le nombre de processus de redirection à maintenir en mémoire RAM ;

  • authenticate_program : permet de spécifié le chemin vers le programme chargé de l'authentification des utilisateur. En fonction du type d'authentification, un chemin vers le fichiers de profils peut être nécessaire en deuxième option ;

  • authenticate_children : le nombre de processus d'authentification à conserver en mémoire RAM.

Configuration fine du cache : "Tuning the Squid Cache"

Cette section permet de définir les paramètre de "tunning" fin du cache.

  • negative_ttl : permet de spécifier combien de temps Squid considérera une ressource comme non accessible après une requête infructueuse (code 404 par exemple) ;

  • positive_dns_ttl : permet de spécifier combien de temps Squid considérera une ressource comme accessible après une requête ayant abouti ;

  • negative_dns_ttl : permet de spécifier combien de temps Squid considérera une ressource comme non accessible après une requête DNS infructueuse.

Les temps d'attente : "Timeouts"

Cette section permet de configurer les différents timeouts de Squid

  • connect_timeout : le temps d'attente d'une réponse du serveur distant avant de retourner une page d'erreur de type "connection timeout" au client ;

  • request_timeout : le temps d'attente de Squid entre deux requêtes HTTP avant de fermer la connection ;

  • client_lifetime : le temps maximum qu'un client a le droit de rester connecter à Squid ;

  • pconn_timeout : le temps d'attente de Squid avant de fermer une connection de type persistante ;

  • ident_timeout : le temps maximum d'attente d'une authentification.

Les contrôles d'accès aux ressources : "Access controls"

Cette partie traite des options concernant les restrictions d'accès aux ressources.

  • acl aclname acltype string [string ...] | filename : permet de définir une Access Control List. Voici le détail de ses options :

    • aclname : permet de définir le nom de l'acl créée. Ce nom sera utilisé pour faire référence à cette ACL lors de l'application d'une règle ;

    • acltype : permet de définir le type de l'acl. le type peut être choisis parmis ceci : src, dest, srcdomain, dstdomain, srcdom_regex, dstdom_regex, time, url_regex, urpath_regex, port, proto, method, browser, ident, ident_regex, src_as, dst_as, proxy_auth, proxy_auth_regex, snmp_community, maxconn, req_mime_type, arp. Pour plus de renseignement sur ces type, voir le fichier de configuration ou [6]

    • string : permet de définir une ou plusieurs expression régulière ;

    • filename : permet de définir un fichier contenant une expression régulière par ligne.

  • http_access allow | deny aclname [aclname ...] : permet d'autoriser ou pas l'accès via le protocole http en fonction de(s) l'ACL(s) définie(s) ;

  • icp_access allow | deny aclname [aclname ...] : permet d'autoriser ou pas l'accès via le protocole ICP en fonction de(s) l'ACL(s) définie(s) ;

  • cache_peer_access hostname allow | deny aclname [aclname ...] : permet d'autoriser ou pas l'accès aux caches définis http en fonction de(s) l'ACL(s) définie(s) ;

  • proxy_auth_realm aclname [aclname ...] :

  • ident_lookup_access allow | deny : permet de demander une authentification ou pas pour l'accès à une ressource en fonction de(s) l'ACL(s) définie(s).

Les paramètres de l'administrateur : "Administrative parameters"

Cette partie traite des informations d'administration du serveur.

  • Cache_mgr : permet de spécifier l'adresse email de l'administrateur du serveur. Ainsi, en cas d'arrêt de celui-ci, un mail lui sera envoyé ;

  • cache_effective_user : permet de spécifier sous quel userID Squid doit régresser après un lancement depuis l'ID de root ;

  • cache_effective_group : permet de spécifier sous quel groupID Squid doit régresser après un lancement depuis l'ID de root ;

  • visible_hostname : permet de définir le nom de machine qui sera apparent sur les pages d'erreurs de Squid.

Officialisation du cache : "Options for the cache registration service "

Cette section traite des paramètres utilisés lors de la communication avec d'autre caches.

  • announce_period : défini la fréquence d'émission des annonce du cache ;

  • announce_host : défini le nom d'host présenté dans les annonces ;

  • announce_file : si ce paramètre est indiqué, le fichier indiqué en option contiendra les valeur à placer dans l'annonce ;

  • announce_port : défini le port présenté dans les annonces.

Accélérateur HTTP : "Httpd-accelerator options"

  • httpd_accel_host IP | virtual : permet de définir l'adresse IP du serveur http accéléré. Si plusieurs serveurs sont accéléré par Squid, nous définirons ce paramètre à virtual ;

  • httpd_accel_port : permet de définir le port vers lequel Squid communiquera avec le serveur accéléré ;

  • httpd_accel_single_host on|off : permet d'indiquer à Squid qu'il n'accélère qu'un seul serveur HTTP ;

  • httpd_accel_with_proxy on|off : permet de spécifier à Squid qu'il doit continuer à utiliser son cache aussi pour les requêtes interne ;

Divers : "Miscellaneous"

  • logfile_rotate : permet de fixer le nombre maximal de fichier de log qui seront être créé et conservé en même temps. Ainsi, à chaque fois que Squid recevra un signal de type USR1 ou que la commande squid -k rotate sera exécutée, le fichier de base d'écriture sera sauvegardé en *.1 afin de créer un nouveau fichier de log vide. Pour une valeur de 10, nous aurons donc des fichiers de log allant du fichier en cour plus les fichier *.1 à *.9. à chaque rotation, le fichier *.9 sera supprimé.

  • anonymize_headers deny|allow : permet de spécifier quels seront les champs de l'entête http qui seront autorisé ou retiré de l'entête ;

  • fake_user_agent : permet de modifier le champs user-agent de l'entête http ;

  • icon_directory directorypath/directoryname : permet de spécifier le chemin vers le répertoire d'icônes ;

  • error_directory directorypath/directoryname : permet de spécifier le chemin vers le répertoire des pages d'erreurs ;

  • snmp_port : permet de spécifier le port d'écoute pour les requêtes d'administration SNMP.

Limitation de bande passante du traffic web : "Delaypool parameters"

Toutes les options de cette section nécessitent d'avoir compilé Squid avec l'option --enable-delay-pools. Nous n'aborderons pas cette section car celle-ci requiert des connaissance pointues et sort un peu de l'objectif du document qui était une introduction à Squid.



[6] Disponible à cette adresse.

[7] Common Log Format.