Configuration (presque) automatique du proxy avec script et WPAD

Plutôt que de configurer les navigateurs à la main, on peut leur donner un script PAC (Proxy Auto Config), cf. la page de Netscape ou ces explications sur Geckozone.

Il suffit de mettre en ligne ce script sur un serveur Web et d'avoir le type MIME associé (mime.types) :

AddType application/x-ns-proxy-autoconfig .pac .dat

Soit le fichier auto.pac :

// Fichier de config automatique des navigateurs
function FindProxyForURL(url, host) {
   // Dans le domaine local : DIRECT
   if (isInNet(host, "192.0.2.0", "255.255.255.0") ||
      isInNet(host, "10.0.0.0", "255.0.0.0"))
      {
         return "DIRECT";
      }
   else
      {
      if (isPlainHostName(host) ||
         dnsDomainIs(host, ".plop.example.com") ||
         dnsDomainIs(host, ".example.com"))
         {
            return "DIRECT";
         } else {
            return "PROXY wwwcache.example.com:3128";
         }
     }
}

Pour ne pas configurer à la main des centaines de navigateurs sur autant de postes, il existe un draft IETF (périmé) qui spécifie la découverte de ce script sur le réseau : WPAD aka Web Proxy Autodiscovery Protocol. Ce protocole utilise le DHCP ou le DNS.

Il suffit de déclarer wpad.plop.example.com ; un site Web répond sous ce nom là et sert le script d'auto-configuration, stocké dans un fichier /wpad.dat, soit l'URL :

http://wpad.plop.example.com/wpad.dat

que le navigateur, s'il est dans le sous-réseau plop.example.com, va tester en premier.

Pour ISC-DHCPd, il faut déclarer dans le fichier dhcpd.conf une option locale avec le code 252 comme suit :

option wpad-url code 252 = text;
option wpad-url "http://wpad.plop.example.com/wpad.dat\n";

Avec la détection automatique, les utilisateurs ne sont pas nécessairement conscients d'utiliser un proxy, ce qui peut être problématique. En redirigeant, au niveau du routeur, les connexions tcp/80 (voire tcp/21 et tcp/443) vers un serveur Web affichant des instructions et l'URL du script PAC, plus besoin (ou presque) d'intervenir.

Avec IP Filter, si le proxy est 192.0.2.254 et qu'il s'agit du réseau 192.0.2.0/24, ça donne :

rdr xx0 0.0.0.0/0 port 80 -> 192.0.2.254 port 80 tcp
rdr xx0 0.0.0.0/0 port 443 -> 192.0.2.254 port 80 tcp

sans oublier :

pass in on xx0 log proto tcp from 192.0.2.0/24 to any port = 80
pass in on xx0 log proto tcp from 192.0.2.0/24 to any port = 443

Côté Apache la configuration est tout aussi simple :

<VirtualHost 192.0.2.254:80>
	ServerName wpad.plop.example.com
        ServerAlias wpad.example.com
	DocumentRoot /path/to/htdocs
 
	AddType application/x-ns-proxy-autoconfig .pac .dat
 
	ErrorDocument 404 http://wpad.plop.example.com/index.html
 
	<Directory /path/to/htdocs/wpad-vhost>
		Options -Indexes
	</Directory>
        Alias "/wpad.dat" "/path/to/htdocs/wpad-vhost/auto.pac"
</VirtualHost>

Ci-dessus, le serveur Web est configuré pour servir aussi le fichier auto.pac en réponse aux requêtes /wpad.dat.

La directive ErrorDocument affiche la page d'accueil en guise de page d'erreur 404. Comme on a redirigé toutes les connexions HTTP sortantes (0.0.0.0/0), les erreurs sont légions. Plus qu'à rédiger un index.html comme celui-ci par exemple pour expliquer à l'utilisateur comment configurer correctement son navigateur.

Le dernier problème n'a pas de solution technique, il se situe entre la chaise l'écran : faire en sorte que les utilisateurs acceptent de lire la page et ne viennent pas frapper à votre porte…

  • user/pc/sysadmin/auto-proxy-config.txt
  • Dernière modification : 2011/08/21 22:05
  • de pc