Configurazione automatica di un proxy con il protocollo WPAD
Il protocollo WPAD, usato da Internet Explorer e da Mozilla/Netscape (e probabilmente da altri browser ma non so da quali) consente di insegnare al browser come accedere a internet, usando una serie di funzioni che vanno ben oltre la semplice impostazione di un proxy e di una serie di domini da non richiedere attraverso il proxy. Questo permette una maggiore flessibilita` nel decidere quali protocolli, hostname, domini, eccetera vanno fatti passare per quali proxy server (http e anche socks).
Stando alla documentazione sul protocollo WPAD, che si trova qui, http://www.web-cache.com/Writings/Internet-Drafts/draft-ietf-wrec-wpad-01.txt, e` possibile usare diversi metodi per permettere ai clienti di autoconfigurarsi, ma i piu` usati sono il DHCP e il DNS. A dire il vero, a naso credo che il piu` affidabile sia il DNS. E` comunque possibile usare entrambi i metodi, in questo modo c'e` ridondanza. Il DHCP dovrebbe avere la precedenza, se i client seguono lo standard.
Configurazione lato server usando il DNS
Questa e` una delle configurazioni possibili, ma non l'unica. Sfrutta il DNS e il DHCP.
Occorre:
- avere un dhcp che fornisca un domain name (per dire, nomerete.local)
- avere un web server anche semplicissimo che dovra servire un file
- avere un dns interno che possa servire un record A per l'host wpad.domain.tld (esempio "wpad.nomerete.local")
- avere uno o piu` proxy, altrimenti e` tutto inutile
Prima di tutto, configurare il DNS locale e il DHCP locale, e verificare da un client collegato alla rete che il comando "ping wpad" e il comando "ping wpad.domain.tld" risolvano correttamente l'host sul quale gira il web server (che non deve essere necessariamente lo stesso su cui gira il proxy)
Sul web server che risponde all'hostname "wpad" occorre mettere un file di nome "wpad.dat", facendo in modo che possa essere scaricato da un client che richiede http://wpad.domain.tld/wpad.dat.
Il contenuto minimo del file wpad.dat potrebbe essere qualcosa di questo genere:
function FindProxyForURL(url, host) { /* test per escludere protocolli o domini dal passaggio dal proxy. isplainhostname serve per non fare passare dal proxy gli host che non hanno dominio indicato, che si suppone siano locali. shExpMatch serve per escludere pezzi di url (protocolli in questo caso) isinnet serve per escludere reti per indirizzo ip */ if ( shExpMatch(url, "https:*") || shExpMatch(url, "ftp:*") || isPlainHostName(host) || isInNet(host, "10.1.42.0", "255.255.255.0") || isInNet(host, "127.0.0.0", "255.0.0.0") || dnsDomainIs(host,"kurgan.org") || dnsDomainIs(host,"muzzi.net") ) return "DIRECT"; else return "PROXY proxy.kurgan.org:8181; DIRECT"; }
La documentazione su come costruire il file wpad.dat si puo` trovare qui (e` vecchia ma fa buon brodo): http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
Teoricamente occorre anche definire nella configurazione del web server il mime type per il file wpad.dat, tuttavia ho visto che con IE 6 funziona lo stesso anche senza. Questa e` una configurazione valida per apache (e` fatta come virtualhost per evitare di andare a pistolare i mime types a livello globale di apache)
<VirtualHost ip.ad.dr.es> ServerName wpad.yourdomain.tla ServerAlias ip.ad.dr.ess AddType application/x-ns-proxy-autoconfig .dat </VirtualHost>
Configurazione lato server usando il DHCP
Questa configurazione usa un campo della risposta del DHCP per indicare dove scaricare il file di configurazione wpad.dat, e non richiede configurazione del DNS, tuttavia e` necessario che i client siano impostati per usare il DHCP, ovviamente.
Occorre:
- un server DHCP
- un server web (come sopra)
- un proxy, ovviamente.
Nella configurazione del server DHCP, occorre impostare una option, con codice 252, che contiene un campo testuale che indica l' url da cui scaricare il file wpad.dat (o un qualsiasi altro nome, che in questo caso non e` hardcoded e quindi non e` significativo). Occorre comunque un web server che fornisca al browser il file wpad.dat, non e` possibile fare tutto con il solo DHCP.
La configurazione per ISC DHCP versione 3 e` qualcosa del tipo:
option wpad-url code 252 = text; option wpad-url "http://wpad.my.domain.tld/wpad.dat\n"
Occhio perche` certi browser tagliano un carattere in fondo all'url quando lo leggono dal dhcp. Un'occhiata ai log del web server fara` capire meglio se c'e` questo problema.
Per il web server e il file wpad.dat, vedasi il metodo descritto precedentemente.
Configurazione dei client
Sui client teoricamente e` sufficiente impostare il browser per fare l'autodetect del proxy, poi chiudere e riaprire il browser.
In pratica, a seconda se il server e` configurato con il DHCP o il DNS, occorre anche che il client riesca a ricevere i dati dal DHCP server (quindi usi il DHCP per settare l'indirizzo IP) o che riesca a risolvere correttamente l' hostname "wpad.dominio.tld" usando il DNS.
Ovviamente se si vuole usare questo sistema per forzare l'uso del proxy, occorrerra` anche impedire ai client l'accesso diretto alle porte del web attraverso il gateway.
Letture aggiuntive e link
Un articolo sulla config del WPAD: http://www.wlug.org.nz/WPAD
Dalla documentazione di Squid: http://www.squid-cache.org/Doc/FAQ/FAQ-5.html#ss5.10
Load balancing dei proxy usando un hashing degli url per decidere quale proxy usare: http://naragw.sharp.co.jp/sps/