[ Accueil | Notions | Le protocole | Informations cachées | Scripts côté client | Le proxy | Squid et SquidGuard ]
Le principe de base consiste à dire :
Lorsque je désire obtenir un document, je ne vais pas le demander à la source. Je vais le demander à mon serveur proxy. Celui-ci ira chercher le document à ma place et me le transmettra à sa réception. Au passage, il le gardera en mémoire "un certain temps", si bien que si un autre client redemande dans cette période le même document, le proxy n'aura pas besoin de retourner le chercher à la source. Ceci ne fonctionne correctement que pour les documents statiques, bien entendu. Pour les documents de type ASP, JSP ou PHP, la mise en tampon est à proscrire.
Ce type de fonctionnement, où le client s'adresse systématiquement au proxy pour obtenir une page quelconque sur le web a fait traduire "proxy server" par "serveur mandataire".
Imaginons un cas simple :
Un seul transfert de page depuis le serveur Texas Instruments vers le réseau local en remplace 14.
Parmi nos 14 élèves, il y en aura bien un qui aura l'idée, en passant, d'aller faire un petit tour sur par exemple http://www.canalcharme.com (ou pire. N'y voyez pas de puritanisme de ma part, juste un souci d'efficacité dans le travail et une obligation légale de protection des mineurs ;-) )..
Parce qu'il y en a tout de même...
Il faut commencer par paramétrer son navigateur Internet pour qu'il fasse appel à un proxy. Nous comprendrons mieux pourquoi en analysant le réseau.
Pour Internet Explorer, c'est assez simple :
![]() |
Menu "Outils", commande "Options internet...", onglet "Connexions" :
Utilisez le bouton "Paramètres réseau..." |
![]() |
Ne faites pas confiance aux systèmes automatisés (dans la mesure du possible) et indiquez plutôt explicitement les paramètres du proxy :
Ne pas utiliser les adresses locales n'a pas beaucoup de sens. Ca ne semble fonctionner convenablement que pour la résolution des noms de type WINS. Le bouton "Avancé" nécessite un détour... |
![]() |
Il vous permet :
Ici, toutes les requêtes relatives à tous les hôtes du domaine "maison.mrs" ne seront pas adressées au proxy. Il n'y a en effet aucun intérêt à passer par le proxy pour l'ensemble des sites intranet, si les serveurs sont sur le même réseau local. |
Voilà. Si le proxy est bien configuré, ça devrait fonctionner...
Un proxy est placé entre un réseau local privé et un accès Internet. La configuration est alors la suivante :
Le proxy dispose de deux adresses :
Le proxy isole complètement le réseau privé de l'Internet. Il ne servira que de serveur mandataire pour les requêtes HTTP (éventuellement aussi FTP). Avec la floraison de services "webmail" proposée par les fournisseurs de services, cette configuration peut permettre l'accès aux trois services les plus utilisés sur le Net :
Si l'on se contente de ces trois services, il n'est alors pas nécessaire d'installer de routeur NAT, le proxy suffit. Mais comprenons nous bien : Seuls les protocoles HTTP et FTP passeront, sauf cas de proxy plus particuliers, ce qui n'est pas l'objet de cette présentation.
Le montage adopté n'est pas obligatoirement le plus utile. Il n'y a d'ailleurs pas de connexion Internet mise en oeuvre ici. Ce montage est juste fait pour illustrer le travail du proxy, lorsqu'il est utilisé.
Notez bien que 192.168.0.251 (qui est en fait ma passerelle NAT vers le Net, bien que cette fonction ne serve pas ici), est également mon DNS, ça va se voir dans l'exemple.
Le client va demander la page d'accueil du site hébergé sur le serveur HTTP. Il va le faire directement :
No. Source Destination Protocol Info 4 192.168.0.10 192.168.0.251 HTTP GET / HTTP/1.1 6 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK 7 192.168.0.10 192.168.0.251 HTTP GET /tbm.htm HTTP/1.1 8 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK 9 192.168.0.251 192.168.0.10 HTTP Continuation 11 192.168.0.251 192.168.0.10 HTTP Continuation 16 192.168.0.10 192.168.0.251 HTTP GET /home.htm HTTP/1.1 18 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK 19 192.168.0.251 192.168.0.10 HTTP Continuation 23 192.168.0.10 192.168.0.251 HTTP GET /banniere.htm HTTP/1.1 24 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK 25 192.168.0.251 192.168.0.10 HTTP Continuation etc...
J'ai volontairement fait disparaître les trames SYN, ACK de TCP, qui ne nous apportent rien dans la compréhension de l'échange. Nous voyons clairement que l'échange se fait entre le client et le serveur HTTP.
Nous paramétrons maintenant notre client pour qu'il utilise le proxy 192.168.0.253. Nous vidons le cache du navigateur et refaisons notre requête. Le proxy est également "tout neuf" son cache est parfaitement vide.
No. Source Destination Protocol Info 4 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/ HTTP/1.0 La requête a été faite au proxy et non pas à la cible qui est 192.168.0.251... Le proxy, cherche alors l'IP de la cible : (192.168.0.251 est aussi DNS dans l'exemple). 6 192.168.0.253 192.168.0.251 DNS Standard query A gw2.maison.mrs 7 192.168.0.251 192.168.0.253 DNS Standard query response A 192.168.0.251 Puis transmet la requête à la cible... 11 192.168.0.253 192.168.0.251 HTTP GET / HTTP/1.0 La cible répond au proxy : 13 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK qui retransmet au client: 15 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK et ainsi de suite... 16 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/tbm.htm HTTP/1.0 18 192.168.0.253 192.168.0.251 HTTP GET /tbm.htm HTTP/1.0 20 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK 22 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK 23 192.168.0.251 192.168.0.253 HTTP Continuation 25 192.168.0.253 192.168.0.10 HTTP Continuation 26 192.168.0.251 192.168.0.253 HTTP Continuation 28 192.168.0.251 192.168.0.253 HTTP Continuation 31 192.168.0.253 192.168.0.10 HTTP Continuation 35 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/banniere.htm HTTP/1.0 37 192.168.0.253 192.168.0.251 HTTP GET /banniere.htm HTTP/1.0 41 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/home.htm HTTP/1.0 46 192.168.0.253 192.168.0.251 HTTP GET /home.htm HTTP/1.0 48 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK 49 192.168.0.251 192.168.0.253 HTTP Continuation 51 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK 52 192.168.0.253 192.168.0.10 HTTP Continuation 54 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK 56 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK 57 192.168.0.251 192.168.0.253 HTTP Continuation etc...
Bien. Pour l'instant, c'est plutôt nettement plus compliqué et plus lourd qu'une requête directe.
Nous pouvons d'ailleurs suivre les événements à travers les logs du serveur SQUID :
192.168.0.10 TCP_MISS/200 1421 GET http://gw2.maison.mrs/ - DIRECT/192.168.0.251 text/html 192.168.0.10 TCP_MISS/200 4365 GET http://gw2.maison.mrs/tbm.htm - DIRECT/192.168.0.251 text/html 192.168.0.10 TCP_MISS/200 1513 GET http://gw2.maison.mrs/banniere.htm - DIRECT/192.168.0.251 text/html 192.168.0.10 TCP_MISS/200 4228 GET http://gw2.maison.mrs/home.htm - DIRECT/192.168.0.251 text/html etc...
Le TCP_MISS indique que le proxy n'a pas la réponse en cache et qu'il va donc la chercher à la source (DIRECT)
Mais maintenant, le cache du proxy n'est pas vide, il contient désormais ces documents. Nous allons le vérifier immédiatement en :
No. Source Destination Protocol Info 4 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/ HTTP/1.0 6 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK 7 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/tbm.htm HTTP/1.0 8 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK 9 192.168.0.253 192.168.0.10 HTTP Continuation 11 192.168.0.253 192.168.0.10 HTTP Continuation 16 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/banniere.htm HTTP/1.0 18 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK 19 192.168.0.253 192.168.0.10 HTTP Continuation 24 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/home.htm HTTP/1.0 26 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK 27 192.168.0.253 192.168.0.10 HTTP Continuation etc...
Et là, nous constatons que le dialogue s'effectue uniquement entre le client et le proxy. Autrement dit, le proxy sert au client la totalité des requêtes, il n'y a plus aucun échange entre le proxy et le serveur HTTP.
Vérifions les logs :
192.168.0.10 TCP_MEM_HIT/200 1430 GET http://gw2.maison.mrs/ - NONE/- text/html 192.168.0.10 TCP_MEM_HIT/200 4374 GET http://gw2.maison.mrs/tbm.htm - NONE/- text/html 192.168.0.10 TCP_MEM_HIT/200 1522 GET http://gw2.maison.mrs/banniere.htm - NONE/- text/html 192.168.0.10 TCP_MEM_HIT/200 4237 GET http://gw2.maison.mrs/home.htm - NONE/- text/html etc...
TCP_MEM_HIT veut dire que non seulement la réponse est en cache (HIT) mais qu'elle est en mémoire (MEM). Il n'y a donc pas d'interrogation en amont (NONE).
Notez qu'il aurait pu se passer autre chose. Ici, la requête initiale et la seconde requête du client étaient séparées par un intervalle de temps très court. Si cet intervalle avait augmenté, le document ne se serait peut-être plus trouvé dans le cache mémoire, mais dans le cache disque, et il aurait pu se faire que le proxy aille s'assurer auprès du serveur source que son contenu local était encore valide. La stratégie est assez logique :
Les notions de "vient d'être", "il y a déjà quelques temps" et "il y a trop longtemps" sont bien entendu subjectives et c'est à l'administrateur du proxy de les évaluer efficacement.
Il y a tout de même quelques exceptions à ces règles :
- Les documents "actifs" , nous l'avons déjà dit, tels que les pages PHP, ASP, JSP... ou qui viennent de scripts CGI
- Les documents "passifs", mais qui contiennent un champ "expire" dans leur en-tête. Ce champ, assez peu utilisé, permet au concepteur d'une page de forcer l'attitude d'un proxy à son égard.