Para quem trabalha dentro de uma rede Microsoft, a vida pode ser mais difícil com isso: o que fazer quando você se depara com um servidor proxy da Microsoft que possui autenticação via Active Directory? Não são muitos os aplicativos que suportam este tipo de autenticação e nestes casos você fica ver navios se o acesso a Internet depende exclusivamente do proxy.
Eu já havia tentando no passado algumas soluções mas todas elas eram insatisfatórias, seja porque não funcionavam mesmo ou porque eram complicadas demais.
A alguns meses atrás eu conheci o programa de código aberto CNTLM que resolveu todos estes meus problemas de forma muito elegante.
O CNTLM é um proxy escrito em C que se encarrega das seguintes funções:
- Fazer a autenticação no Active Directory com seu login para todas as suas aplicações que o utilizarem para acessar à internet;
- Realizar a comunicação com os proxies internos da rede Microsoft para obter dados via HTTP/HTTPS.
Depois de instalar o aplicativo é necessário configurá-lo. Um dos passos é gerar um hash com seu login e senha para armazenar isto no arquivo de configuração. Isto é muito mais seguro do que você guardar a senha descriptografada.
Em um prompt do cmd.exe, digite:
C:\Program Files\Cntlm>cntlm.exe -H -u alceu-d foobar
cygwin warning:
MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
Preferred POSIX equivalent is: /Cntlm/cntlm.ini
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Password:
PassLM BDD3947C2A2F7A7FCDEB7B279523CCD5
PassNT 4957D58E48C9BEDF850B8FA8CEDFFED6
PassNTLMv2 FC8E3B7326F4FD313FA6D1A5E550614F # Only for user 'alceu', domain 'foobar'
São três os hashes gerados, mas o mais recomendável é utilizar o PassNTLMv2 por ter criptografia mais forte. Pode ser que seu proxy não aceite este método, então você deverá tentar os outros.
Apenas copie a linha toda para seu arquivo de configuração (cntlm.ini) conforme é mostrado abaixo:
# NOTE: Use plaintext password only at your own risk
# Use hashes instead. You can use a "cntlm -M" and "cntlm -H"
# command sequence to get the right config for your environment.
# See cntlm man page
# Example secure config shown below.
# PassLM 1AD35398BE6565DDB5C4EF70C0593492
# PassNT 77B9081511704EE852F94227CF48A793
### Only for user 'testuser', domain 'corp-uk'
# PassNTLMv2 D5826E9C665C37C80B53397D5C07BBCB
#PassLM D3D468DBC2224BD737E9981628C73A26
#PassNT 9C9672B7DAB8012768F515C2DCE69C2E
PassNTLMv2 FC8E3B7326F4FD313FA6D1A5E550614F # Only for user 'alceu', domain 'foobar'
Após isso, configure os proxies da rede que o CNTLM deverá utilizar para comunicação com a Internet.
# List of parent proxies to use. More proxies can be defined
# one per line in format <proxy_ip>:<proxy_port>
#
#Proxy 10.0.0.41:8080
Proxy proxy1.foobar.com:80
Proxy proxy2.foobar.com:80
Você pode optar por excluir endereços e nomes de máquinas que não deseja que utilizar o proxy para acessar:
# List addresses you do not want to pass to parent proxies
# * and ? wildcards can be used
#
#NoProxy localhost, 127.0.0.*, 10.*, 192.168.*
NoProxy localhost, 127.0.0.*
Defina também a porta que o CNTLM deverá utilizar para escutar. Eu utilize a porta abaixo para evitar conflitos mas você pode utilizar a porta que achar melhor:
# Specify the port cntlm will listen on
# You can bind cntlm to specific interface by specifying
# the appropriate IP address also in format <local_ip>:<local_port>
# Cntlm listens on 127.0.0.1:3128 by default
#
Listen 60000
Se você quiser usar uma máquina virtual na sua máquina, essa opção abaixo será necessária mas não se esqueça também de limitar por IP quem poderá acessar o seu proxy por questões de segurança.
# Enable to allow access from other computers
#
Gateway yes
# Useful in Gateway mode to allow/restrict certain IPs
# Specifiy individual IPs or subnets one rule per line.
#
#Allow 127.0.0.1
#Deny 0/0
#Allow 172.19.0.95
Por último, e não menos importante, especifique qual cabeçalho HTTP User-Agent o CNTLM deverá usar. Se o administrador da rede for especialmente paranóico, você poderá evitar questionamentos ocultando seus clientes web "não oficiais" da forma mostrada abaixo:
# Headers which should be replaced if present in the request
#
Header User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
Por último, será necessário configurar seus programas para que utilizem o CNTLM. Eu, por exemplo, faço uso extensivo do programa ppm do ActivePerl para instalar módulos na máquina. A maneira de fazer o ppm utilizar o CNTLM é configurar uma variável de ambiente chamada HTTP_PROXY tendo como valor o endereço do CNTLM e a porta aonde ele escuta as requisições. A figura abaixo ilustra a configuração disto no Windows.
Utilizando uma máquina virtual do CentOS no Windows com VMware eu também pude utilizar o yum para instalar novos pacotes RPM de maneira similar exportando a variável de ambiente HTTP_PROXY com o endereço IP da máquina hospedeira. É possível também usar o yum.conf para isto (veja mais em http://www.centos.org/docs/5/html/yum/sn-yum-proxy-server.html).
O CNTLM é instalado no Windows como um serviço, então você poderá pará-lo, iniciá-lo ou reiniciá-lo a qualquer momento da mesma forma como faria com qualquer serviço no Windows.
Também é possível iniciar o CNTLM para realizar debugging das conexões. Para isto, basta executar no prompt o seguinte comando:
cntlm -f -s -v
Com as opções de linha de comando mostradas acima, o CNTLM irá realizar a serialização das requisições (para não fazê-las em paralelo), rodando o aplicativo em modo foreground e imprimindo mensagens detalhadas sobre as requisições e respostas obtidas.
O CNTLM ainda possui mais recursos e eles estão todos bem documentados. Consulte a documentação para mais detalhes do que o aplicativo pode fazer.
Assim, com alguns minutos de trabalho você consegue utilizar seus programas que precisam de algum tipo de acesso à Internet sem muito esforço e respeitando as regras de acesso na rede Microsoft que você utiliza!
Nenhum comentário:
Postar um comentário