29.4. Le fichier de configuration /etc/squid/squid.conf

Tous les paramètres du serveur proxy Squid se définissent dans le fichier /etc/squid/squid.conf. Pour démarrer Squid la première fois, ce fichier ne nécessite aucun changement, mais l'accès des clients externes est initialement refusé. Le proxy est disponible pour localhost. Le port par défaut est 3128. Le fichier de configuration préinstallé /etc/squid/squid.conf fournit des informations détaillées concernant les options et de nombreux exemples. Presque toutes les entrées commencent par # (les lignes sont commentées) et les spécifications correspondantes se trouvent à la fin de la ligne. Les valeurs données sont presque toujours en corrélation avec les valeurs par défaut. La suppression des signes de commentaire sans changer de paramètres a donc peu d'effets dans la plupart des cas. Si possible, ne modifiez pas l'exemple et insérez les options avec les paramètres modifiés dans la ligne du dessous. De cette manière, les valeurs par défaut sont facilement récupérables et comparables aux modifications.

[Tip]adaptation du fichier de configuration après une mise à jour

Si vous avez effectué la mise à jour à partir d'une version précédente de Squid, il est recommandé d'éditer le nouveau /etc/squid/squid.conf et de n'appliquer que les changements effectués dans le fichier précédent. Si vous tentez d'utiliser l'ancien squid.conf, il se peut que la configuration ne fonctionne plus, car des options sont parfois modifiées et de nouveaux changements ajoutés.

29.4.1. Options générales de configuration (sélection)

http_port 3128

Port sur lequel Squid écoute les requêtes du client. Le port par défaut est 3128, mais 8080 est également courant. Si vous le souhaitez, vous pouvez spécifier plusieurs numéros de ports séparés par des espaces.

cache_peer nom d'hôte type port-proxy port-icp

Ici, entrez un proxy parent, par exemple, si vous voulez utiliser le proxy de votre FAI. Comme nom d'hôte, entrez le nom et l'adresse IP du proxy à utiliser et, comme type, entrez parent. Comme port-proxy, entrez le numéro du port également donné par l'opérateur du parent pour être utilisé dans le navigateur, généralement 8080. Définissez port-icp sur 7 ou 0 si le port ICP du parent est inconnu et si son utilisation n'est pas significative pour le fournisseur. De surcroît, les options default et no-query peuvent être spécifiées après les numéros de port pour interdire l'usage du protocole ICP. Squid se comporte ensuite comme un navigateur normal pour ce qui concerne le proxy du fournisseur.

cache_mem 8 MB

Cette entrée définit la quantité de mémoire que Squid peut utiliser pour les réponses très courantes. La valeur par défaut est 8 MB (8 Mo). Cela ne spécifie pas l'utilisation de la mémoire de Squid et peut être dépassé.

cache_dir ufs /var/cache/squid/ 100 16 256

L'entrée cache_dir définit le répertoire dans lequel tous les objets sont stockés sur le disque. Le nombre à la fin indique l'espace disque maximum en Mo à utiliser ainsi que le nombre de répertoires de premier et de second niveau. Le paramètre ufs ne doit pas être modifié. Par défaut, l'espace disque occupé est de 100 Mo dans le répertoire /var/cache/squid avec la création de 16 sous-répertoires à l'intérieur de celui-ci, chacun contenant 256 sous-répertoires supplémentaires. Lorsque vous spécifiez l'espace disque à utiliser, laissez suffisamment d'espace disque de réserve. Des valeurs comprises entre un minimum de 50 % et un maximum de 80 % d'espace disque disponible sont les plus judicieuses. Les deux derniers chiffres des répertoires ne doivent être augmentés qu'en prenant des précautions, car un nombre trop élevé de répertoires peut également se traduire par des problèmes de performances. Si plusieurs disques se partagent le cache, entrez plusieurs lignes cache_dir.

cache_access_log /var/log/squid/access.log, cache_log /var/log/squid/cache.log, cache_store_log /var/log/squid/store.log

Ces trois entrées spécifient les chemins dans lesquels Squid indique toutes ses actions. Normalement, rien n'est changé ici. Si Squid doit supporter une charge élevée, il peut être judicieux de distribuer le cache et les fichiers journaux sur plusieurs disques.

emulate_httpd_log off

Si cette entrée est définie sur on, les fichiers journaux lisibles sont obtenus. Certains programmes d'évaluation ne peuvent toutefois interpréter cela.

client_netmask 255.255.255.255

Avec cette entrée, les adresses IP des clients sont masquées dans les fichiers journaux. Le dernier chiffre de l'adresse IP est définie sur zéro si vous entrez 255.255.255.0 ici. Vous pouvez protéger la confidentialité de vos clients de cette manière.

ftp_user Squid@

Avec cette entrée, vous pouvez définir le mot de passe que Squid doit utiliser pour la connexion FTP anonyme. Il peut être judicieux de spécifier une adresse de courrier électronique ici, car certains serveurs FTP en vérifient la validité.

cache_mgr webmaster

Une adresse de courrier électronique à laquelle Squid envoie un message en cas de défaillance imprévue. La valeur par défaut est webmaster.

logfile_rotate 0

Si vous exécutez squid -k rotate, Squid peut faire tourner les fichiers journaux sécurisés. Les fichiers sont numérotés dans ce processus et, après avoir atteint la valeur spécifiée, le fichier le plus ancien est remplacé. La valeur par défaut est 0 car l'archivage et la suppression des fichiers journaux dans SUSE Linux s'effectue par une tâche cron définie dans le fichier de configuration /etc/logrotate/squid.

append_domain <domaine>

Avec append_domain, spécifiez le domaine à ajouter automatiquement lorsque aucun n'a été donné. Généralement, votre propre domaine est entré à cet endroit. L'entrée de www dans le navigateur donne donc accès à votre serveur Web.

forwarded_for on

Si vous définissez cette entrée sur off, Squid supprime l'adresse IP et le nom système du client des requêtes HTTP. Sinon, il ajoute une ligne à l'en-tête, telle que

X-Forwarded-For: 192.168.0.0
negative_ttl 5 minutes; negative_dns_ttl 5 minutes

Normalement, vous n'avez pas besoin de modifier ces valeurs. En revanche, si vous avez une connexion à distance, Internet peut parfois ne pas être accessible. Squid note les requêtes qui ont échoué et refuse d'en émettre de nouvelles, bien que la connexion Internet ait été rétablie. Dans un tel cas, changez les minutes en secondes puis, après avoir cliqué sur Recharger dans le navigateur, le processus de connexion à distance doit reprendre après quelques secondes.

never_direct allow acl_name

Pour empêcher que Squid ne prenne les requêtes directement depuis Internet, utilisez la commande ci-dessus pour forcer la connexion vers un autre proxy. Cela doit avoir été entré préalablement dans cache_peer. Si all est spécifié comme acl_name, cela force l'envoi de toutes les requêtes directement au parent. Cela peut être nécessaire, par exemple, si vous utilisez un fournisseur qui stipule de façon stricte l'utilisation de ses proxy ou qui refuse l'accès Internet direct de son firewall.

29.4.2. Options de contrôles d'accès

Squid offre un système détaillé de contrôle d'accès au proxy. En implémentant des ACL, il peut être configuré facilement et de façon complète. Cela implique des listes avec des règles traitées de façon séquentielle. Les ACL doivent être définies avant d'être utilisées. Il existe déjà des ACL par défaut, telles que all et localhost. Toutefois, la simple définition d'une ACL ne signifie pas qu'elle soit réellement appliquée. Cela ne se produit que conjointement aux règles http_access.

acl <acl_name> <type> <data>

Une ACL nécessite au moins trois spécifications pour la définir. Le nom <nom_acl> peut être choisi de façon arbitraire. Pour le <type>, sélectionnez parmi un ensemble d'options différentes, qui se trouvent dans la section ACCESS CONTROLS du fichier /etc/squid/squid.conf. La spécification de <data> dépend du type d'ACL et peut également être lue dans un fichier, par exemple, via des noms d'hôte, des adresses IP ou des URL. En voici quelques exemples simples :

acl mysurfers srcdomain .my-domain.com
acl teachers src 192.168.1.0/255.255.255.0
acl students src 192.168.7.0-192.168.9.0/255.255.255.0
acl lunch time MTWHF 12:00-15:00
http_access allow <acl_name>

http_access définit qui est autorisé à utiliser le proxy et qui peut accéder à quoi sur Internet. Pour cela, des ACL doivent être données. localhost et all ont déjà été définis ci-dessus, pour refuser ou autoriser l'accès via deny ou allow. Une liste contenant n'importe quel nombre d'entrées http_access peut être créée, traitées de haut en bas. Selon se qui se présente le premier, l'accès est autorisé ou refusé à l'URL concernée. La dernière entrée doit toujours être http_access deny all. Dans l'exemple qui suit, l'hôte localhost peut accéder à tout tandis que l'accès est complètement refusé à tous les autres hôtes.

http_access allow localhost
http_access deny all

Dans un autre exemple utilisant ces règles, le groupe teachers a toujours accès à Internet. Le groupe students n'y a accès que du lundi au vendredi pendant l'heure du déjeuner.

http_access deny localhost
http_access allow teachers
http_access allow students lunch time
http_access deny all

La liste contenant les entrées http_access ne doit être entrée, pour des raisons de lisibilité, qu'à la position désignée du fichier /etc/squid/squid.conf, soit entre le texte

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR
# CLIENTS

et la dernière entrée

http_access deny all
redirect_program /usr/bin/squidGuard

Avec cette option, spécifiez un redirecteur tel que squidGuard, qui permet de bloquer les URL indésirables. L'accès Internet peut être contrôlé individuellement pour différents groupes d'utilisateurs à l'aide de l'authentification du proxy et des ACL appropriées. squidGuard est un paquetage séparé qui peut être installé et configuré.

auth_param basic program /usr/sbin/pam_auth

Si les utilisateurs doivent être authentifiés sur le proxy, définissez un programme correspondant, tel que pam_auth. Lorsqu'il accède à pam_auth pour la première fois, l'utilisateur voit une fenêtre de login dans laquelle il doit entrer son nom d'utilisateur et son mot de passe. En outre, une ACL reste nécessaire, afin que seuls les clients ayant un login valide puissent utiliser Internet :

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

REQUIRED après proxy_auth peut être remplacé par la liste des noms d'utilisateurs autorisés ou par le chemin vers cette liste.

ident_lookup_access allow <acl_name>

Avec cette entrée, vous pouvez exécuter une requête d'identification pour tous les clients ayant une ACL définie pour rechercher l'identité de chaque utilisateur. Si vous appliquez all au <nom_acl>, cela est valable pour tous les clients. De plus, un démon d'identification doit être exécuté sur tous les clients. Pour Linux, installez le paquetage pidentd à cette fin. Pour Microsoft Windows, des logiciels peuvent être téléchargés gratuitement sur Internet. Pour vous assurer que seuls les clients dont la recherche d'identification a réussi sont autorisés, définissez une ACL correspondante ici :

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

Ici aussi, remplacez REQUIRED par la liste des noms d'utilisateurs autorisés. L'utilisation de ident peut ralentir un peu le temps d'accès, car les recherches d'identification sont répétées pour chaque requête.