Lors de l'utilisation d'un mandataire (proxy) « ordinaire », le client indique à son navigateur le nom d'hôte et le numéro de port du serveur mandataire. Le navigateur dirige alors ses requêtes vers le serveur mandataire qui les redirige vers les serveurs cibles. Cependant, de temps en temps, on se trouve dans l'une des situations suivantes. Soit :
vous voulez obliger les clients de votre réseau à utiliser le serveur mandataire, qu'ils le veuillent ou non ;
vous voulez que les clients utilisent le mandataire mais vous ne voulez pas qu'ils le sachent ;
vous voulez que les clients passent par le serveur mandataire, mais vous ne voulez pas faire tout le travail nécessaire à la mise à jour des réglages de centaines ou de milliers de navigateurs.
C'est ici que le mandataire transparent entre en scène. Une requête web peut être interceptée de façon transparente par le mandataire. Pour autant que le sache le client, il est en train de parler au serveur d'origine, alors qu'il communique en réalité avec le mandataire. (Notez que la transparence ne s'applique qu'au client ; le serveur sait qu'un serveur mandataire est mis en œuvre et voit son adresse IP, et non celle de l'utilisateur. De plus, Squid a la possibilité de transmettre un en-tête X-Forwarder-For au serveur, afin que celui-ci puisse déterminer l'adresse IP réelle du client).
Les routeurs Cisco peuvent être utilisés comme mandataires transparents ainsi que de multiples commutateurs. D'une manière assez épatante, Linux peut être configuré comme routeur, et servir de mandataire transparent en redirigeant les connexions TCP vers des ports locaux. Cependant, il est nécessaire de s'assurer que le serveur mandataire soit au courant de cette redirection, afin qu'il puisse se connecter aux véritables serveurs de destination. Il existe deux moyens généraux pour cela :
Tout d'abord, lorsque le serveur mandataire n'est pas capable d'agir en tant que mandataire transparent, vous pouvez utiliser un petit démon astucieux appelé Transproxy qui siège devant le mandataire et s'occupe de tous les détails triviaux à votre place. Transproxy a été écrit par John Saunders, et peut être trouvé sur http://www.transproxy.nlc.net.au/. Transproxy ne sera pas présenté plus en détail dans ce document.
Une solution plus propre est d'utiliser un serveur mandataire directement capable d'agir en tant que mandataire transparent. Celui sur lequel nous allons nous pencher est Squid. Squid est un serveur mandataire pour Unix, dont les sources sont publiques, et qui est capable de mémoriser les pages web. On peut le trouver sur http://www.squid-cache.org.
Il est également possible, au lieu de rediriger les connexions vers des ports locaux, de les rediriger vers des ports distants. Ceci sera traité dans Section 6. Les lecteurs intéressés par ce sujet devraient aller directement à cette section. Les lecteurs qui souhaitent mettre en place sur une même machine la redirection et le mandataire peuvent faire l'impasse sur cette section.
Ce document se concentre sur la version 2.4 de Squid ainsi que sur la version 2.4 du noyau. Ces versions sont les plus récentes versions stables au moment de son écriture (août 2002). Il devrait également s'appliquer à la plupart des noyaux 2.3 les plus récents. Si vous souhaitez utiliser des versions antérieures de Squid ou de Linux, vous pouvez vous référer à http://users.gurulink.com/drk/transproxy/. Notez que ce site a déménagé.
Si vous utilisez une version de développement du noyau ou de Squid, vous serez livré à vous-même. Ce document peut vous aider mais c'est vous qui voyez.
Notez que ce document ne traitera que des mandataires HTTP. Je reçois une foule de messages au sujet de la mise en place de mandataires FTP transparents. Squid ne possède pas cette capacité. Il semblerait qu'un programme nommé Frox le puisse. Je ne l'ai pas essayé, donc j'ignore s'il fonctionne bien. Vous pourrez le trouver sur http://frox.sourceforge.net/.
Ce document se consacre essentiellement à Squid. Cependant, Apache peut aussi être utilisé comme mandataire avec mémoire des pages. (Si vous hésitez sur le serveur mandataire à adopter, je vous recommande Squid. En effet, Squid a été pensé dès le départ comme serveur mandataire. Apache, de son côté, ne s'est vu rajouter les fonctionnalités de mandataire qu'après coup). Si vous désirez utiliser Apache au lieu de Squid, suivez toutes les instructions de ce document relatives au noyau et aux règles iptables. Ne tenez pas comptes des sections spécifiques à Squid, et allez voir les sources et le mode d'emploi du module mandataire transparent pour Apache sur http://lupo.campus.uniroma2.it/progetti/mod_tproxy/. (Merci à Cristiano Paris <c POINT paris CHEZ libero POINT it> pour sa contribution sur ce point).
Enfin, en ce qui concerne la mise en place d'un mandataire transparent pour HTTPS (par exemple, pour les pages web utilisant SSL, TSL, et cætera), vous ne pouvez pas le faire. Ne le demandez même pas. Pour comprendre pourquoi, effectuez une recherche avec les mots clefs « attaque de l'intermédiaire caché » (man-in-the-middle attack). Remarquez que, de toutes manières, vous n'avez probablement pas réellement besoin de rediriger les requêtes HTTPS vers Squid, dans la mesure où celui-ci ne mémorise pas les pages sécurisés.
Il n'est pas possible de s'authentifier auprès d'un mandataire transparent. Voyez la FAQ Squid pour (un peu) plus de détails.