Академический Документы
Профессиональный Документы
Культура Документы
fr
Proxy cache
Squid
INTRODUCTION………………………………………………………
Premier chapitre : PRESENTATION DE SQUID :
1. Définition du Proxy cache ……………………………………….
2. La fonction du Proxy …………………………………………….
3. La fonction de cache …………………………………………….
4. Définition de Squid……………………………………………….
5. Squid en tant que Proxy …………………………………………..
6. Squid en tant que cache…………………………………………....
7. Filtrage…………………………………………..............................
8. INSTALLATION ET CONFIGURATION……………………….
Conclusion……………………………………………33
INTRODUCTION
Passerelle : 172.16.1.254
Squid : 172.16.1.3
Haut
Le Bloc
Informatique
DR ON
Haut
Couloir
4 m carré
Couloir
56 m carré
8U
Serveur CD Samba Web
8U Ordinateur Ordinateur
Ordinateur
Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur Ordinateur
Salles de TP
Salle BETA 3 Salle BETA 2 Informatique Salle BETA 1
PRESENTATION DE SQUID :
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr
9. Définition du Proxy-cache :
a. La fonction du proxy :
o En mode serveur, une configuration sera requise sur les postes clients
afin d'indiquer l'adresse du serveur et le port sur lequel il doit s'y
connecter.
o En mode transparent, les clients n'auront pas connaissance du proxy
et leurs requêtes seront alors formées comme lors d'une
communication sans intermédiaire.
b. La fonction de cache :
2. Définition de Squid
services qui lui ont permis d'être très largement adopté par les
professionnels mais aussi dans un grand nombre d'école ou administrations
travaillant avec systèmes de type Unix.
Mis à part les fonctions essentielles d'un proxy, Squid propose beaucoup
d'autres services. Ces services ont très largement contribué à faire de Squid
une référence en matière de proxy dans le monde des serveurs de type Unix.
Le cache est bien plus qu'un service rendu par Squid à vrai dire. Il fait
partie intégrante de Squid et justifie à lui seul l'utilisation de Squid pour un
réseau partageant un même accès à Internet.
Le rôle d'un serveur cache est de stocker les objets demandés par les
utilisateurs pour la première fois via les protocoles HTTP, FTP. Ainsi, lors
des demandes futures sur un objet présent en cache, le serveur de cache
www.udivers.com contact : tssri-reseaux@hotmail.fr
www.udivers.com contact : tssri-reseaux@hotmail.fr
n'aura pas besoin d'aller chercher cet objet sur internet et retournera
directement celui qu'il a en mémoire. Les objets stockés peuvent être de tout
type : texte, image, vidéo, ...
3. Filtrage
Squid offre la possibilité de filtrer les requêtes des clients. Ainsi, il est
possible de restreindre l'accès aux ressources en fonction de plusieurs
paramètres différents. Voici une liste de paramètre pouvant intervenir dans
le rejet d'une requête répondant à l'un des critère :
Squid n'est capable de filtrer que les requêtes de ses clients, pas le
contenu de ce qu'il relaye à ceux-ci (bien qu'un proxy filtrant le contenu de
page revienne à multiplier la charge d'administration par le nombre
d'interdiction malencontreuse).
Il est possible de réécrire les entêtes des requêtes des clients. Cela a
pour utilité par exemple de rendre les demandes anonymes. Ceci se fait très
Installation
2.1. Téléchargement
Il s'agit de la version stable mais nous pouvons bien sûr nous aventurer sur la
version de développement.
- Décompresser l'archive :
greg@ades:/var/tmp$ tar zxvf squid-2.5.STABLE2.tar.gz
ou bien :
greg@ades:/var/tmp$ tar jxvf squid-2.5.STABLE2.tar.bz2
Selon notre cas.
-Création du makefile :
greg@ades:/var/tmp$ cd squid-2.5.STABLE2
greg@ades:/var/tmp/squid-2.5.STABLE2$ ./configure -enable-err-
language=French
- Compilation :
greg@ades:/var/tmp/squid-2.5.STABLE2$ make all
- Installation :
greg@ades:/var/tmp/squid-2.5.STABLE2$ su
Password:
ades:/var/tmp/squid-2.5.STABLE2# make install
Configuration :
3.1. Les fichiers de configuration
lignes), c’est dans ce fichier que l’administrateur peut configurer son réseau.
I. INSTALLATION DE REDHAT 9:
Une page s'affiche, composée d’une colonne d'aide à gauche qui sera
présente tout au long de l'installation, et de l'installeur au centre. cette
première page nous renseigne sur l’endroit où se trouve une copie du
manuel d'installation, l’orsqu’on Clique sur NEXT on choisi après la
Langue qui nous convient (Français), et on clique de nouveau sur NEXT.
Il nous propose le clavier :
french
french Canadian
french latin 0
french latin 1 (choix par défaut)
bureau personnel
poste de travail
serveur
personnalisée
Dans notre cas on va choisir une installation de type serveur car elle est
plus appropriée si on veut que notre système fonctionne comme un serveur
basé sur Linux.
élévé
moyen
pas de pare-feux
www
ftp
ssh
dhcp
mail
telnet
autres ports
Un dernier écran nous a signalé que c'est terminé, on a cliqués sur suivant.
Le serveur graphique démarre, Nous avons l'invité pour nous logguer :
identifiant
password
Pour des raisons de sécurité, il faut éviter de lancer squid en root. Nous
allons donc créer un user squid ainsi qu'un groupe squid.
Le démon sera lancé par cet utilisateur. Nous stipulerons plus tard à Squid
que le user squid a le droit de lancer le démon (tous les users n'ont pas le
droit de lancer Squid).Procédez comme ceci :
Etant donné que Squid va être lancé par le user squid, il faut mettre à jour
les permissions.
Lors de l'installation, squid a automatiquement créé l'arborescence
nécessaire, procéder comme suit pour changer les droits (nous devons être
root) :
http_port 8080
icp_port 0
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 32 MB
cache_dir ufs /usr/local/squid/var/cache 1024 16 256
acl localnet src 172.16.0.0/255.255.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 443 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all
cache_mgr toto@toto.com
cache_effective_user squid
cache_effective_group squid
log_icp_queries off
cachemgr_passwd my-secret-pass all
buffered_logs on
Explications
Http_port 8080 :
Spécifie le port d'écoute de Squid, par défaut squid écoute sur le port 3128
mais beaucoup d'administrateurs préfèrent le port 8080.
icp_port 0:
Spécifie le port sur lequel Squid va envoyer et recevoir les requêtes ICP
(utile lorsqu'il y a plusieurs serveurs proxy), dans notre cas nous
le désactivons en mettant le port à 0.
cache_mem 32 MB:
Taille en Mega Octets de RAM que peut utiliser Squid pour les transitions
d'objets, Hot Objects ... A savoir que Squid utilise toujours un peu plus de
RAM que ce que nous lui donnons (ajuster en conséquence).
localhost.
acl Safe_ports port 80 443 21 1025-65535 :
2. Lancement de Squid
a. Initialiser le cache
:~# /usr/local/squid/sbin/squid -z
b. Démarrage de Squid
squid@ades:~$ /usr/local/squid/sbin/squid -D
Les fichiers de log sont situés dans /usr/local/var/log dont les plus
intéressants sont:
Pour des raisons de confort nous avons crées un lien symbolique dans
/var/log :
4. Scripts
a. Script de démarrage
SQUID_HOME=/usr/local/squid
[ -f $SQUID_HOME/bin/squid ] || exit 0
case "$1" in
start)
echo -n "Starting squid: "
base=`basename $1`
# Déjà lancé ?
[ "`pidofproc $base`" != "" ] && return
# echo basename of the program.
echo -n "$base "
# Start
daemon $SQUID_HOME/sbin/squid -D &
echo
touch /var/lock/subsys/squid
;;
stop)
exit 0
b. Script de vérification
#!/bin/sh
/bin/pidof squid > /dev/null # Attention pidof peut se trouver dans
/sbin
if [ $? = 1 ]
then
/etc/init.d/squid stop
/etc/init.d/squid start
echo "redémarrage de Squid" | mail -s "[Squid] Redémarrage de
Squid " grari@est.ump.ac.ma
fi
4. Optimisation de Squid
a. Sécurité
b. Le cache
c. Proxy Transparent
Un proxy transparent comme son nom l'indique est un proxy qui est
complètement transparent pour le client, cela signifie que le client utilise le
proxy sans le savoir.
Explication : Le client se connecte à internet via le port 80, il suffit de dire à
Squid d'agir comme un proxy transparent et de définir une règle iptables
permettant de rediriger toutes les connections à destination du port 80 vers le
port de notre proxy (8080). A savoir que Squid ne gère pas le "Transparent
HTTPS ".
Pratique :
Dans notre squid.conf nous avons ajouter les lignes suivantes :
httpd_accel_host virtual
httdp_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off
Si notre firewall n'est pas sur la même machine que notre proxy, il suffit de
remplacer "--to-port 8080" par "--to-port ip_proxy:8080".
Il est possible de restreindre les accès à Internet via Squid. Nous avons
interdit l'accès à certains sites.
Tout comme dans la configuration initiale de Squid il faut écrire des ACL
(Access control list).
Voici comment fonctionnent les ACL :
A savoir que nous devons avoir obligatoirement cette ligne au moins une fois
dans notre fichier squid.conf (à la fin) :
Imaginons que nous voulons interdire l'accès au site Web contenant le mot
"toto", voici comment procéder :
acl mot_interdit url_regex toto
http_access deny mot_interdit
Configuration minimale
Comme Webmin est bien installé, mis à jour et tout, et que le module pour squid est bien
présent, utilisons-le :
Les ACL (Access Control Lists) permettent de définir des conditions sur les IPs, les ports, le
contenu de certains textes, et j'en passe. Si vous voulez tout savoir sur les diverses ACL de
Squid, ne comptez pas sur moi, comptez plutôt sur la documentation officielle.
Les restrictions indiquent quoi faire lorsque ces conditions sont vérifiées. On autorise ou on
interdit en fonction d'une ACL ou d'un groupe d'ACLs, le sens de "restriction" est donc à
prendre avec un peu de recul, une restriction pouvant être une autorisation. La première
"restriction" vérifiée est la bonne, d'où l'importance de l'ordre dans lequel elles sont placées.
Sans faire une analyse détaillée, nous voyons que dans la configuration par défaut, seul
"localhost" peut utiliser le proxy (Allow localhost). Il nous faut donc faire intervenir la notion
de réseau local.
Nous pouvons définir une étendue, ou toute une classe, comme c'est le
cas dans l'exemple. Notre LAN fonctionne avec la classe 192.168.0.0.
Save...
Une nouvelle ligne est apparue dans la liste des ACLs, appelée"Localnet"
Save...
Ca marche !
Bien entendu, l'idée de faire plutôt "Allow all" est une mauvaise idée. Si
votre proxy a un pied dans l'Internet (s'il est installé sur la passerelle),
vous risquez un proxy ouvert, avec tous les usages pervertis que l'on peut
en faire...
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563 10000
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/255.255.255.0
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow LocalNet
http_access deny all
icp_access allow all
log_fqdn on
Affiner la configuration.
Il y a deux points importants, qu'il peut être utile d'étudier, et qui correspondent aux deux
fonctions principales d'un proxy.
Le système répond par OK ou par ERR suivant que l'authentification réussit ou non.
Sortez de la boucle avec un "ctrl-d".
Si ça fonctionne comme ça, c'est déjà bon signe.
Configurer squid pour réclamer l'authentification de vos utilisateurs.
On peut le faire avec Webmin, faisons-le donc.
Passons donc aux ACLs. On a déjà vu comment s'y prendre, nous créons une nouvelle ACL
de type "External auth" :
(save)
Nous plaçons une nouvelle ligne dans les restrictions, en interdisant (deny) à tous ceux qui ne
satisfont pas (Don't match ACLs) à l'ACL Users.
(save)
Et voilà. Pour accéder au monde extérieur, Squid nécessite maintenant une authentification.
Comme nous l'avons paramétré, cette authentification restera valide 30 minutes (si le
navigateur n'est pas refermé entre temps), et pendant ces 30 minutes, plus aucun autre
utilisateur ne pourra utiliser ce login sur toute autre machine de votre LAN.
Si nous allons faire un petit tour dans les dernières lignes de /var/log/squid/access.log, nous
constatons que le nom d'utilisateur figure pour chaque requête :
Notez que vous pouvez aussi gérer la liste des utilisateurs avec la fonction "Proxy
Authentication" du module Squid de Webmin, sans manipuler htpasswd, à condition que :
•vous ayez créé le fichier des utilisateurs, même vide,
•vous ayez configuré Squid pour utiliser ncsa_auth
A ce moment, l'option "Proxy Authentication" fonctionnera aussi bien que "htpasswd".
Si pour vous l'authentification est une chose primordiale, et que vous disposez déjà d'une
source d'authentification sur votre LAN, intéressez-vous peut-être à l'existence d'un module
d'authentification qui vous permettrait de n'employer qu'une seule base d'utilisateurs...
J'ai pu effectuer quelques tests avec le module d'authentification qui s'appuie sur SMB
(smb_auth), autrement dit, qui permet d'authentifier les utilisateurs à partir d'un contrôleur de
domaine Microsoft, ça fonctionne, mais SAMBA doit être installé sur le proxy, même s'il ne
tourne pas. Suivant l'exposition de votre proxy par rapport au lien Internet, ça peut présenter
quelques risques.
Sa mise en place ne pose pas de problèmes particuliers, la documentation est suffisamment
claire : http://www.hacom.nl/~richard/software/smb_auth.html
Optimiser le cache.
Un proxy sert a optimiser la bande passante utilisée sur le Net, en permettant de garder en
cache les pages les plus souvent visitées. Si c'est une de vos principales préoccupations, il sera
probablement nécessaire d'agir sur les diverses options du cache. Passez alors du temps à lire
la documentation. Vous pourrez agir sur la taille du cache, sa répartition sur les divers disques
durs...
Pour réaliser correctement une telle opération, il vous faudra installer d'abord des outils
d'audit de performance dudit cache. Détailler ces opération ici nous mènerait trop loin. (Il y a
une doc assez complète avec Squid ;-))
Attention...
•Cette méthode est incompatible avec l'authentification des utilisateurs. Même si
squid est configuré comme nous l'avons vu pour l'authentification ncsa, celle-ci ne
fonctionnera plus.
•cette méthode ne supporte que HTTP. FTP est impossible en mode transparent,
•un seul port peut être redirigé de façon transparente, le 80, de préférence, puisque
c'est le port habituel pour HTTP.
La règle de redirection.
Voici la règle à ajouter sur votre passerelle, en admettant que votre réseau est dans
192.168.0.0 et que votre proxy possède l'adresse 192.168.0.252. Nous supposons que le proxy
est installé sur la machine qui assure également le rôle de passerelle (commande à entrer sur
une seule ligne, bien entendu) :
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0
-p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
Il est possible de rediriger de façon transparente sur un proxy installé sur une autre machine
que la passerelle, à la condition que cette dernière soit placée dans un autre réseau IP que le
LAN, faute de quoi, la translation de port ne fonctionnera pas correctement.
Avec un routeur à trois voies, par exemple deux réseaux IP (disons 192.168.0.0 et
192.168.1.0), et un accès Internet, si le LAN est sur 192.168.0.0, il faudra placer le proxy sur
192.168.1.0, disons 192.168.1.2. La règle IPtables s'écrira alors :
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0
-p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.2:3128
Bien entendu, il faudra que le routage se fasse entre les réseaux 192.168.0.0 et 192.168.1.0.
Dans la pratique, vous devrez donc disposer de trois interfaces réseau sur votre routeur NAT.
Paramétrage de Squid.
Comme nous l'avons vu dans le chapitre sur HTTP, Le client HTTP n'agit pas de la même
manière suivant qu'il a affaire à un proxy ou non. Ici, le client ne sait pas qu'il y a un proxy, il
agit donc comme s'il interrogeait directement le serveur cible, alors que ce n'est pas le cas. Ca
ne fonctionnera bien entendu pas, si Squid n'est pas informé de cette situation.
Mais Squid sait contourner la difficulté, voyons comment.
Allons, avec Webmin, dans l'option "Miscellaneous options" :
Je vous le donne comme une recette. En principe, je n'aime pas trop ça, mais pour comprendre
ici ce que l'on fait, il faudrait étudier dans le détail le fonctionnement du proxy, ce qui nous
conduirait à écrire non plus un chapitre, mais un livre entier...
Ca nous donne dans squid.conf :
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563 10000
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
acl purge method PURGE
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/255.255.255.0
acl Users proxy_auth REQUIRED
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny !Users
http_access allow LocalNet
http_access deny all
Conclusions.
Comme nous l'avons vu, la transparence du proxy entraîne de nombreuses restrictions. A
moins que vous y teniez absolument, mieux vaut choisir une autre solution, principalement si
vous voulez cacher le FTP et/ou le HTTPS ou si vous devez authentifier vos utilisateurs.
Beaucoup d'autres choses sont possibles, je ne les pas encore essayées, je vous laisse faire.
Pour ce qui est du filtrage d'accès, il est possible de faire déjà des choses avec Squid tout seul,
mais le "helper" SquidGuard que nous allons voir dans la suite rend inutiles les tentatives de
filtrage avec les seuls moyens de Squid.