domingo, 1 de maio de 2011

Configuração automática de Proxy WEB: WPAD via DNS

    Defrontei-me com uma necessidade para um segmento de rede wireless para visitantes no órgão onde trabalho. Liberar alguns sites Jurídicos e governamentais para navegação. A idéia proposta era direcionar este fluxo para o nosso filtro de contéudo restringindo o segmento a este tipo de navegação, mas a idéia de instruir pessoas a configurar o proxy nos navegadores não me parecia muito arrojada. A saída foi utilizar a tecnologia WPAD para configuração automática de proxy.
    A forma de funcionamento do Wpad é simples. A estação faz uma pesquisa de DNS por "wpad.dominio" (a informação do domínio já foi recebida por DHCP), caso a pesquisa retorne positiva, ele busca o arquivo wpad.dat via HTTP junto ao host (http://wpad.dominio/wpad.dat). O arquivo wpad.dat contêm a informação de configuração do proxy para o browser que é então utilizada.
Funcionamento do WPAD via DNS

    Configurei um registro A no DNS interno como "wpad", apontando para o host que iria servir o wpad.dat.    
    Caso seja utilizado um Windows Server como DNS interno é necessário um passo adicional retirando o wpad como registro reservado (http://technet.microsoft.com/en-us/library/cc995158.aspx).
    Para servir o arquivo wpad.dat utilizei o mesmo servidor do filtro de conteúdo, no caso Mcafee Web Gateway, que tem a opção de habilitar um webserver para este tipo de situação (É só seguir as instruções do product guide https://kc.mcafee.com/resources/sites/MCAFEE/content/live/PRODUCT_DOCUMENTATION/22000/PD22889/en_US/mwg_702_pg_product_7002778A00_en-us.pdf ).
    O arquivo wpad.dat é um javascript que pode ser customizado de acordo com o ambiente. É possível configurar exceções como, por exemplo, para acessar recursos locais (redes locais) não utilizar o Proxy (Direct).

Conteúdo do arquivo wpad.dat:


function FindProxyForURL(url, host) {
    if (shExpMatch( host, "192.168.0.*" )
    ||  shExpMatch( host, "127.*" )
    ||  shExpMatch( host, "localhost" )
    ||  isPlainHostName( host )
    ||  dnsDomainIs( host, ".tjms.jus.br" )
    ||  dnsDomainIs( host, ".tjms.gov.br" )
    ||  dnsDomainIs( host, ".intranet" )) {
        return "DIRECT"; 
    }
    else
        return "PROXY 172.16.1.2:8080";
}



   Uma vez realizada a configuração o funcionamento é imediato. Realizei testes com Internet Explorer, Firefox e Chrome, a operação é perfeita. :) O WPAD é uma medida simples que pode ser utilizado quando não existe a possibilidade de rodar scripts (Logon Script ou GPO) nos clientes, já que os browsers vem por padrão a opção "detectar automaticamente as configurações" que busca o recurso do WPAD.