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
Le script auto.pac
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"; } } }
Protocole Web Proxy Autodiscovery
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.
WPAD et 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.
WPAD et DHCP
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";
La redirection TCP
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…