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