Un computer ti fa fare più errori e più velocemente di qualunque altra invenzione dell'uomo – con l'eccezione forse delle armi da fuoco e della tequila.

— Mitch Ratcliffe

Proxy Autodiscovery Protocol

Tagged:

http://www.stenoweb.it/files/blog/proxy.jpg Proxy Autodiscovery Protocol è un protocollo che consente al browser di trovare automaticamente il web proxy server da utilizzare nella rete a cui si è connessi. Una soluzione che il mobile computing e le molte reti disponibili rendono molto comodo. Ho usato una procedura simile nella implementazione di Squid Proxy nella mia Guida Ubuntu Server.

Si può implementare in due modi: dhcp o dns. Il secondo approccio è quello preferito, ma partiamo comunque dalle basi. Entrambi i metodi servono solo a fare in modo che il browser riesca a trovare un file PAC in cui sono indicate le regola da utilizzare quando ci si connette ad un sito web.

All’interno di questo file è presente una funzione FindProxyForURL(url, host) scritta in javascript che restituisce uno o più metodi di accesso per il sito a cui si vuole accedere.

Un esempio molto minimale di PAC:

function FindProxyForURL(url, host) { return "PROXY proxy.example.com:8080; DIRECT"; }
Un esempio più complicato:

function FindProxyForURL(url, host) {
our local URLs from the domains below example.com don’t need a proxy:
if (shExpMatch(url,"*.example.com/*")) {return "DIRECT";}
if (shExpMatch(url, "*.example.com:*/*")) {return "DIRECT";}
URLs within this network are accessed through
port 8080 on fastproxy.example.com:
if (isInNet(host, "10.0.0.0", "255.255.248.0")) {
return "PROXY fastproxy.example.com:8080";
}

All other requests go through port 8080 of proxy.example.com.
// should that fail to respond, go directly to the WWW:
return "PROXY proxy.example.com:8080; DIRECT";
}


Per controllare la validità del file PAC da voi creato potete utilizzare il pactester o una versione web del suddetto.

Come abbiamo detto prima il browser trova questo file affidandosi alle informazioni ottenute via DHCP o DNS.

Nel primo caso dovremo aggiungere alla configurazione di DHCPD una nuova opzione con codice 252 ed il percorso per il nostro file PAC:

option wpad-url code 252 = text;
option wpad-url "http://wpad.my.domain.tld/proxy.pacn";

Nel caso della ricerca via DNS (che è il metodo che uso io sempre) dovremo fare in modo che sia presente nella nostra rete una macchina che abbia come nome “wpad” e che ospiti via http un file wpad.dat sulla porta 80.

Ecco il mio file:

function FindProxyForURL( url, host )
{
if (dnsDomainIs( host, "www.stenoit.com" ))
return "PROXY sbs.stenoit.com:3128; " + "DIRECT";
if( isPlainHostName( host ) || senza dominio
dnsDomainIs( host, "stenoit.com" ) ||
dominio locale
shExpMatch( url, "https*" ) || // secure protocols
shExpMatch( url, "snews*" ) )
return "DIRECT";
else
return "PROXY sbs.stenoit.com:3128; " + "DIRECT";
}

Dopo aver fatto tutto questo non resta che andare nella impostazioni proxy del vostro browser ed abilitare l’autoconfigurazione ed utilizzerete sempre il proxy corretto per la rete a cui siete collegati.

Cracking!