====== Esempio di utilizzo dei file PAC ====== ===== Sommario ===== E'possibile utilizzare i moderni browser (Internet Explorer, Mozilla, Firefox, ....) con una configurazione automatica del proxy basata sulla posizione attuale della macchina che ospita il client e sul sito da contattare. Spesso infatti personale dotato di computer portatile si sposta fisicamente da una locazione all'altra ed ha necessità di cambiare di volta in volta le impostazioni per l'accesso ad Internet. Inoltre anche rimanendo nella solita locazione fisica è necessario cambiare le impostazioni di accesso al proxy via via che la configurazione della rete locale cambia (nuovi virtualhost, ristrutturazione della rete, nuovi domini, .....). Questo documento contiene una breve guida ai file PAC che sono un utile strumento per la configurazione dei browser per l'accesso ad Internet. ===== Funzionamento ===== Un file PAC (proxy auto configuration) è un normale file di testo che viene letto dal browser all'avvio e che viene utilizzato per decidere quale metodo utilizzare per collegarsi ad un opportuno sito; di norma per i siti della rete locale non si utilizza un proxy in quanto questi sono direttamente raggiungibili, i siti esterni invece necessitano di un opportuno proxy che funge da intermediario, Da notare che il file PAC deve essere "raggiungibile" dal browser quindi non deve stare "oltre il proxy", di norma viene posizionato su di un server http della rete locale oppure sul filesystem di ogni pc. All'interno del file PAC deve essere definita la funzione FindProxyForURL che viene invocata dal browser per decidere che tipologia di accesso ad Internet utilizzare. La funzione è così definita function FindProxyForURL(url, host) dove host è l'indirizzo IP del sito da contattare ed url è la URL completa richiesta dal browser. La funzione deve restituire una stringa che viene poi interpretata dai browser, questa stringa può essere * DIRECT * PROXY nomehostproxy:portaproxy dove nomehostproxy e portaproxy sono l'hostname e la porta sulla quale gira il proxy. DIRECT indica che il collegamento è effettuata dirttamente senza alcun proxy. All'interno della funzione possono essere eseguiti dei controlli sulla url e/o sull'host per decidere quale tecnica ed eventualmente quale proxy utilizzare. Vediamo un semplice esempio di un file PAC che utilizza il proxy 192.168.2.1 sulla porta 8080 per tutte le richieste a parte quelle relative alla rete 192.168.2.x. function FindProxyForURL(url, host) { if ( isInNet(host, "192.168.2.0", "255.255.255.0") ) return "DIRECT"; else return "PROXY 192.168.2.1:8080"; } Al fine di effettuare i controlli opportuni all'interno del file possono essere utilizzate alcune funzioni predefinite tra cui è bene citare * myIpAddress() ritorna l'indirizzo IP della macchina locale (quella su cui gira il browser) * isInNet(host, indirizzo, netmask) indica se l'host passato come primo parametro fa parte della rete identificata dagli ultimi due parametri * shExprMatch(str, espressione) indica se la stringa str combacia con il pattern expressione. Nota il funzionamento dell'espressione è identico a quello dei filesystem unix (* = tutti i caratteri), di norma viene utilizzata per "filtrare" le URL. ===== Esempi di utilizzo ===== Verranno mostrati di seguito alcuni esempi di file PAC. Valgono le seguenti assunzioni * La rete locale aziendale ha indirizzo 172.16....... * Il dominio locale è esempio.it * Il proxy della rete aziendale è 192.168.250.6 ed ascolta sulla porta 8080 * La rete locale aziendale è in grado di "dialogare" con il proxy ==== Utilizzo del proxy ma non per la rete locale ==== function FindProxyForURL(url, host) { if ( isInNet(host, "172.16.0.0", "255.255.0.0") || isInNet(host, "127.0.0.1", "255.255.255.255") ) return "DIRECT"; else return "PROXY 192.168.250.6:8080"; } ==== Utilizzo del proxy ma non per un particolare dominio ==== Supponendo di non volere utilizzare il proxy per il dominio esempio.it function FindProxyForURL(url, host) { if ( shExpMatch(url, "*esempio.it*") ) return "DIRECT"; else eturn "PROXY 192.168.250.6:8080"; } ==== Connessione diretta ad internet quando il pc è fuori dalla rete aziendale ==== function FindProxyForURL(url, host) { if ( isInNet(myIpAddress(), "172.16.103.0", "255.255.255.0") ) { // ....... impostazioni del proxy per la rete locale } else { return "DIRECT"; } } ===== Note ===== E' opporuno fare le seguenti precisazioni: * Il file PAC deve essere sempre raggiungibile dalla macchina sulla quale gira il browser * Gli indirizzi dele varie reti locali di defferenti aziende possono coincidere, quindi i controlli basati sull'indirizzo della macchina attuale potrebbero non sortire l'effetto desiderato. * La stringa da ritornare può essere composta anche nel seguente modo "PROXY1 ; PROXY2; ... DIRECT; ...." in questo modo il browser prova a contattare PROXY1, se fallisce prova con prova a contattare PROXY2 e così via ..... ===== Riferimenti ===== * Elenco delle funzioni predefinite dei file PAC - http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html * Altre informazioni sui PAC file - http://nscsysop.hypermart.net/proxypac.html * Due paroline sui PAC file trovate su wikipedia - http://en.wikipedia.org/wiki/Proxy_auto-config