Squid - Free
Transcription
Squid - Free
Squid Page 1 sur 8 Squid Pacôme Massol Néotech III Cité scolaire du Butor, Sainte-Clotilde Copyright © 2003 Néotech III La reproduction exacte et la distribution intégrale de ce document sont permises sur n'importe quel support d'archivage, pourvu que cette notice soit préservée. Historique des versions Version 0.10 3 novembre 2003 PM Création du document. 1. Introduction 1.1. Généralités 1.2. Fonctionnement 2. Installation 2.1. Considérations matérielles 2.2. Paquetage 2.3. Répertoires du cache 3. Configuration 3.1. Options de fonctionnement 3.2. Les listes de contrôle d'accès (ACL) 3.2.1. Le filtrage 3.2.2. La mise en cache 3.3. L'authentification 3.3.1. Création du fichier d'utilisateurs 3.4. Configuration du client 3.5. Accélérateur Web 4. Surveillance 5. SquidGard 6. Exercices 7. Lectures conseillées Résumé Dans ce chapitre, nous allons présenter quelques éléments sur l'installation et la configuration du proxy cache Squid ™2.4.STABLE6. Pour me joindre : <[email protected]> Ce fichier existe également au format PDF. 06/11/2003 Squid Page 2 sur 8 1. Introduction 1.1. Généralités Squid propose deux fonctionnalités principales : ? ? optimisation de la bande passante sur le lien Internet, lorsque de nombreux clients sont connectés et qu'ils visitent les mêmes sites ; contrôle et filtrage de l'accès à Internet, en se basant sur les URI[1] demandées, les horaires, les adresses IP des stations et les noms d'utilisateurs. Squid est un proxy FTP, HTTP et HTTPS (il ne gère donc pas SMTP, POP ou NNTP). Squid tourne en tâche de fond et écoute sur un port spécifique (3128 par défaut, mais il est possible d'utiliser 8080, plus habituel pour un proxy). L'éventuel module d'authentification vient se greffer dessus, ce qui fait apparaître un certain nombre de processus fils (5 par défaut). 1.2. Fonctionnement Observons, tout d'abord, l'accès à un site web sans passer par un proxy : Figure 1. Accès web sans proxy Le client demande directement au serveur Web de lui envoyer une page. Si un autre client du réseau demande la même page, le serveur Web est contacté à nouveau. Avec un proxy (littéralement, proxy signifie mandataire en français), toutes les requêtes passent par un intermédiaire : Figure 2. Accès web avec proxy 1. Le client demande une page. 2. La requête est interceptée par le proxy. Celui-ci vérifie ses ACLs[2]. Si la requête est interdite, un message d'erreur (non représenté sur la figure) est envoyé au client. 06/11/2003 Squid Page 3 sur 8 3. Si la requête est autorisée, le proxy vérifie si la page est déjà dans son cache (autrement dit, si elle a été demandée récemment). Si c'est le cas, elle est envoyée directement au client sans passer par le serveur web. 4. Si la page ne figure pas dans le cache, le proxy transmet la requête au serveur désiré. 5. Le serveur retourne la page. 6. Le proxy intègre cette page dans son cache. 7. Le client reçoit la page demandée. Etant donné que tout le trafic IP passe par le proxy, celui-ci collecte des informations sur les utilisateurs, ce qui peut poser un problème de confidentialité. 2. Installation 2.1. Considérations matérielles Un proxy consomme beaucoup de ressources mémoire et CPU. Il faut donc prévoir une machine puissante, dotée d'une mémoire RAM importante et de gros disques SCSI. De plus, il ne faut pas oublier qu'un proxy, de par son rôle d'intermédiaire, est un composant essentiel de la connectivité du réseau local à Internet. Il faut donc considérer une machine fiable équipée de composants fiables et redondants (RAID en particulier). Enfin, le proxy peut conserver dans son cache des informations confidentielles. Il faut donc que l'ordinateur soit sécurisé. 2.2. Paquetage Un seul paquetage est nécessaire : # dpkg -l | grep squid* ii squid 2.4.6-2 Internet Object Cache (WWW proxy cache) Le logicie est lancé par la procédure habituelle (script dans /etc/init.d). Pour vérifier que le proxy est opérationnel, on utilise la commande netstat : # netstat -ltun | grep :31 tcp 0 0 0.0.0.0:3128 udp 0 0 0.0.0.0:3130 0.0.0.0:* 0.0.0.0:* LISTEN Deux ports sont utilisés : ? ? le port TCP 3128 sur lequel le proxy attend les requêtes des clients (c'est ce port que l'on configure sur les clients) ; le port UDP 3130 sur lequel le proxy attend les requêtes d'éventuels proxys voisins. 2.3. Répertoires du cache Squid, lors de l'installation, crée une imposant structure de répertoires afin d'organiser le cache. Ces répertoires se trouvent dans /var/spool/squid : # tree -f /var/spool/squid /var/spool/squid 06/11/2003 Squid Page 4 sur 8 |-| | | | /var/spool/squid/00 |-- /var/spool/squid/00/00 | |-- /var/spool/squid/00/00/00000000 | |-- /var/spool/squid/00/00/00000001 | |-- /var/spool/squid/00/00/00000002 3. Configuration Toute la configuration de Squid se passe dans le fichier /etc/squid.conf. La plupart des options par défaut ne sont pas à changer (vous pouvez alors laisser le # pour conserver les options par défaut). 3.1. Options de fonctionnement Voici la significaiton des principales options : http_port : le port que vous souhaitez utiliser. Par défaut, Squid utilise le port 3128, mais on peut le changer (par 8080 par exemple). maximum_object_size : taille maximale d'un objet sauvegardé dans le cache (4 Mo par défaut). cache_mem : correspond au cache dans la mémoire RAM. Par défaut, squid utilise 8 Mo mais 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 aussi régler cache_swap_low et cache_swap_high qui sont les valeurs limites de remplissage du cache mémoire. Par défaut les valeurs sont 90 % et 95 %. Lorsque la valeur de 95 % est atteinte le cache disque se vide jusqu'à 90 %. Les valeurs par défauts sont correctes dans la plupart des cas. cache_dir : indique le volume du cache. Si vous avez plusieurs disques, utilisez plusieurs fois cette ligne : ? cache_dir ufs /cache1 100 16 256 (cache de 100 Mo) ? cache_dir ufs /cache2 200 16 256 (cache de 200 Mo) cache_access_log ; cache_log ; cache_store_log : indiquent l'endroit où se trouvent les logs. debug_options ALL,1 : niveau de debug. Indiquez 9 pour avoir tous les logs à la place de 1. Attention cela donne de gros fichiers. ftp_user : à utiliser pour indiquer un mot de passe valide aux serveurs ftp anonymes qui demandent une authentification (en général, on donne une adresse email valide dans notre domaine). reply_body_max_size : taille maximale des réponses. Peut être utilisé pour limiter le download. request_body_max_size : Par défaut cette valeur est à 1 Mo. Ce qui limite la possibilité d'uploader un fichier à travers Squid. visible_hostname : indiquez ici le nom de votre serveur proxy. cache_mgr : définit le nom de l'administrateur à faire apparaître sur les messages d'erreur. error_directory : pour avoir les messages d'erreurs en français, indiquez /usr/lib/squid/errors/French. 3.2. Les listes de contrôle d'accès (ACL) Une ACL est une règle qui est appliquée à chaque paquet IP traité par le proxy. Cette règle sera valide ou non valide. Suivant le cas, on acceptera ou on refusera le paquet. 06/11/2003 Squid Page 5 sur 8 Le format général de déclaration d'une ACL est le suivant : acl <aclname> <acltype> <string> <[string2]> ... acl est un mot clé. aclname est un nom donné par l'administrateur pour identifier l'ACL. acltype peut prendre différentes valeurs, dont celles-ci parmi les plus importantes : src (pour la source) : 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 : expression régulière pour chercher une chaîne contenue dans l'URL (on peut utiliser les jokers). urlpath_regex : expression régulière pour chercher une chaîne dans le chemin de l'URL (on peut utiliser les jokers). time : accepter ou refuser des paquets suivant l'heure. 3.2.1. Le filtrage Pour filter, une ACL doit être utilisée avec la directive http_access, dont la syntaxe est la suivante : http_access allow|deny [!]aclname http_access est un mot-clé. Ensuite, on indique allow ou deny pour spécifier si, lorsque l'ACL est valide, on accepte ou on bloque les paquets. Le ! sert à considérer l'inverse de l'ACL. Exemple 1 : On souhaite autoriser les machines du réseau local (172.1.6.0.0) à utiliser le proxy (par défaut, ce n'est pas le cas !) : acl reso_local src 172.16.0.0/16 http_access allow reso_local [...] http_access deny all # doit toujours être la dernière règle ! Exemple 2 : On souhaite autoriser les connexions tous les jours entre 12:00 et 14:00 pour les machines 192.168.0.0/24 : acl ip_acl src 192.168.2.0/24 acl time_acl time 12:00-14:00 http_access allow ip_acl time_acl [...] http_access deny all # doit toujours être la dernière règle ! Exemple 3 : On souhaite empêcher tous les utilisateurs du réseau de se connecter aux sites du domaine pirates.com : acl destin dstdomain .pirates.com 06/11/2003 Squid Page 6 sur 8 http_access deny destin [...] http_access deny all # doit toujours être la dernière règle ! 3.2.2. La mise en cache Il est possible d'empêcher la mise en cache de certaines pages (afin de pas avoir les données d'un formulaire par exemple). Dans ce cas, on combine une ACL avec la directive no_cache. Par exemple, on refuse de garder les pages dynamiques : acl QUERY urlpath_regex cgi-bin \? \.cgi \.pl \.php3 .\.php4 .\.php \.asp \.jsp no_cache deny QUERY 3.3. L'authentification Nous avons vu comment empêcher ou autoriser une machine à utiliser le proxy. Nous voyons ici, une méthode pour autoriser des utilisateurs particuliers à utiliser le proxy. Différentes méthodes peuvent être mises en oeuvre : ? pwnam : via le fichier /etc/passwd ; ? ldap : via un annuaire LDAP ; ? smb : via Samba ou un contrôleur de domaine NT ; ? ncsa : via un fichier d'utilisateurs locaux. Nous présentons ici la méthode par le fichier d'utilisateurs locaux. 3.3.1. Création du fichier d'utilisateurs Nous utilisons la commande htpasswd fournie avec le paquetage apache-common : # htpasswd -bc /etc/squid.users <nom de l'utilisateur> <mot de passe> Par exemple : # touch /etc/squid.users # htpasswd -b /etc/squid.users toto toto Adding password for user toto (pour créer le fichier) Ensuite, il faut faire deux modifications dans le fichier squid.conf. D'abord, rechercher la ligne qui commence par authenticate_program, la décommenter et la configurer comme suit : authenticate_program /usr/lib/squid/ncsa_auth /etc/squid.users Ensuite, il faut ajouter une ACL : acl autorise proxy_auth REQUIRED Enfin, il faut utiliser l'ACL avec une directive http_access : http_access deny !autorise http_access allow localhost http_access allow reso_local # And finally deny all other access to this proxy http_access deny all La directive refuse les utilisateurs qui ne respectent pas l'ACL nommée "autorise" (et donc, qui ne sont 06/11/2003 Squid Page 7 sur 8 pas identifiés). 3.4. Configuration du client Des configurations doivent être réalisées sur le client afin que celui-ci passe par le proxy. Par exemple, avec Mozilla™ : Figure 3. Configuration du proxy dans Mozilla Note : il est possible de définir un proxy transparent, ne nécessitant donc pas de configuration sur le client. Il faut installer le proxy sur la passerelle par défaut du réseau. Puis rediriger toutes les requêtes vers le proxy grâce à une règle iptables (voir lectures conseillées). 3.5. Accélérateur Web À 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 On pourrait également installer un cache DNS sur notre machine Squid. 4. Surveillance Il faut surveiller les fichiers dans /var/log/squid à savoir access.log, cache.log et store.log. 5. SquidGard 06/11/2003 Squid Page 8 sur 8 SquidGard™ est un produit complémentaire à Squid™. Il étend grandement les possibilités de filtrage, en particulier pour tout ce qui concerne les contenus, fonctionnalité primordiale dans un environnement scolaire. 6. Exercices 1. Donnez l'ACL et la directive http_access pour les règles suivantes : ? Empêchez les machines d'adresses 10.0.0.0/8 de franchir le proxy ? Empêchez d'atteindre les machines du domaine danger.com ? Autorisez les connexions du lundi au vendredi de 8:00 à 17:00 ? Empêchez d'atteindre les sites web dont l'URL contient le mot warez ? idem, mais quel que soit le protocole 2. Installez et configurez le proxy en activant le contrôle d'authentification. Vous prendrez soin de créer au moins une ACL autorisant les machines de votre réseau à se connecter. Vous configurerez les messages d'erreur en français et l'email de l'administrateur. 7. Lectures conseillées Le guide de configuration. Un document réalisé par Christian Caleca : http://christian.caleca.free.fr/squid/ Consultez le site de Squidguard™ pour approfondir. [1] Uniform Resource Identifier [2] Access Control Lists ou Listes de Contrôle d'Accès). 06/11/2003