Você está na página 1de 7

Squid3 + Ubuntu Lucid 10.

04 + Kerberos Auth + AD

troppy 24/05/2010 Esse artigo mostrar a configurao do Squid3 utilizando autenticao Kerberos. Ambiente utilizado: Squid3, Ubuntu 10.04, squid_kerb_auth e Windows 2003 AD. Por: Vinicius Domingues [ Hits: 23788 ] Conceito: 10.0 + quero dar nota ao artigo + Favoritos Verso para impressora Indicar para um amigo Enviar artigo

Squid e suas autenticaes


Pessoal, depois de 2 anos utilizando Squid + NTLM na empresa ele comeou a dar problemas, eu realizei uma pesquisa sobre as diversas maneiras de autenticao, vou resumir para quem quer aprender um pouco sobre como autenticar o Squid. Para realizar a autenticao o Squid utiliza os chamados helpers, que nada mais so que interfaces que realizam a autenticao e retorna um OK ou um ERR para o proxy. A forma como essa autenticao vai ser negociada o que define sua segurana, eficincia e compatibilidade. Cabe ao responsvel decidir a melhor forma a ser utilizada. Existem basicamente 4 formas de autenticao:

Basic (passando a senha em texto puro)


A Autenticao Basic a mais comum, compatvel e fcil de ser configurada, porm a mais insegura, qualquer interceptao de pacote possvel capturar a senha do usurio que est navegando. Ela pode ser implementada com diversos helpers, por exemplo pam, httpd, ldap, nsca etc. H diversos tutoriais sobre esse tipo de autenticao.

Digest (passando o hash da senha)


Esse tipo de autenticao invs de passar a senha em texto puro passa o hash em MD5 ou SHA-1, isso dificulta um pouco a captura de senhas, porm senhas inferiores a 15 caracteres so facilmente quebradas com ataque de rainbowtables ou de dicionrio. H tutoriais explicando como implementar esse tipo de autenticao com LDAP, porm no achei para o Active Directory, somente para Open LDAP.

ntlm (utilizando challenge response)


Na autenticao NTLM realizado um challenge response, ao autenticar o usurio se identifica e recebe um desafio do servidor, o que trafega pela rede o hash da senha com a resposta do desafio, caso o pacote seja capturado o atacante no ter a senha e sim a senha + alguma coisa, isso dificulta a quebra da senha e aumenta um pouco a segurana. Esse mtodo porm possui 2 defeitos, devido ao desafio, para cada requisio http no proxy ele gera 3 registro no proxy 2 HTTP_DENIED 407 e um HTTP_MISS ou HIT no momento que a autenticao d certo, para cada requisio necessrio essa autenticao, o que perde um pouco de performance. Outro problema a incompatibilidade. Esse tipo de autenticao tambm j no to segura, tanto que vem desabilitado por padro o suporte a NTLM no Windows7, para quem quiser testar mesmo assim pode seguir o tutorial do prprio site do Squid:

http://wiki.squidcache.org/ConfigExamples/Authenticate/WindowsActiveDirectory

negotiate
Esse o tipo de autenticao que abordaremos no artigo, baseia-se na emisso de tickets. Para configurao necessrio gerar um keymap no AD para o srvsquid funcionando da seguinte forma, o srvsquid (nome do servidor Squid) confia no srvdc1 (nome do servidor do AD), o usurio paulo se autentica no servidor srvdc1 e ganha um ticket, uma espcie de "crach", onde ele autentica seus acessos ao servidor de arquivos, impresso etc. Ao tentar acessar a internet solicitada autenticao e ele mostra esse "crach" para o srvsquid, o srvsquid ento verifica a validade do crach com o srvdc1 e se estiver ok ele d o acesso, tudo isso feito de forma segura. Os tickets duram em mdia 5 minutos, o que torna improvvel a quebra de uma senha com esse nvel de criptografia em to pouco tempo, aps 5 minutos o usurio solicita um novo ticket. O processo de autenticao mais leve em termo de performance. O porm dessa autenticao a incompatibilidade, s funciona com Internet Explorer 7 pra cima e com o Firefox 3 ou superior (no foram testados Chrome, Opera, Safari etc). Para questo de compatibilidade possvel configurar uma autenticao do tipo Basic como alternativa, ser descrito no artigo.

Instalando o Kerberos
Instale o Ubuntu Server 10.04 32 bits (verso utilizada).

Foi utilizado idioma em Portugus (no creio que v influenciar se mudar) Configurada rede manualmente (Ex: 192.168.1.2) Certifique-se que o acesso internet est configurado

Atualiza a lista de pacotes: $ sudo apt-get update Instale o Kerberos: $ sudo apt-get install krb5-kdc krb5-config krb5-clients libpam-krb5 krb5-user Faa uma cpia do arquivo krb5.conf: $ sudo cp /etc/krb5.conf /etc/krb5.conf.OLD Edite o arquivo /etc/krb5.conf, apague tudo e cole todo o cdigo abaixo, depois configure de acordo com seu IP e domnio. [libdefaults] default_realm = MEUDOMINIO.COM.BR (usar letra maiscula) dns_lookup_realm = no dns_lookup_kdc = no ticket_lifetime = 24h forwardable = yes # The following krb5.conf variables are only for MIT Kerberos. krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true # for Windows 2003 default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5

default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 # For Windows 2008 with AES: default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 # The following libdefaults parameters are only for Heimdal Kerberos. v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] MEUDOMINIO.COM.BR = { kdc = 192.168.1.1 (Ip do windows 2003 com AD) admin_server = 192.168.1.1 (Ip do windows 2003 com AD) dafault_domain = meudominio.com.br } [domain_realm] .meudominio.com.br = MEUDOMINIO.COM.BR meudominio.com.br = MEUDOMINIO.COM.BR [kdc] profile = /etc/krb5kdc/kdc.conf [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } [login] krb4_convert = true krb4_get_tickets = false [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log

Configurao no Active Directory


Abra o Active Directory Users and Computer.

Crie um novo usurio no Active Directory "srvsquid", desmarque a opo para mudar a senha no prximo logon, marque a opo que a senha nunca expira, coloque uma senha grande (20 dgitos) e complexa. Adicione um computer com o nome "srvsquid". No seu servidor DNS adicione um registro para o srvsquid IP 192.168.1.2 (isso realmente importante, no pule esse passo). O DNS reverso deve estar habilitado para o srvsquid. Baixe o arquivo WindowsServer2003-KB892777-SupportTools-x86-ENU.exe do site da Microsoft, instale no seu servidor ou em alguma mquina rodando Windows XP. Abra o cmd: iniciar ---> executar ---> cmd V para a pasta onde foi instalado o Support Tools. cd c:\"arquivos de programas"\"Support Tools" Digite o comando para gerar um keytab para o srvsquid:

C:\> ktpass -princ HTTP/srvsquid.meudominio.com.br@MEUDOMINIO.COM.BR -mapuser


meudominio.com.br\srvsquid -crypto RC4-HMAC-NT mapop set -pass SENHA_DO_USR_SRVSQUID -ptype KRB5_NT_PRINCIPAL -out c:\srvsquid.keytab

C:\> ktpass -princ HTTP/squidserver.marcus.net@MARCUS.NET -mapuser marcus.net\squid.filial -crypto All -mapop set -pass senha -ptype KRB5_NT_SRV_HST -out squid.filial.keytab

O arquivo srvsquid.keytab ser gerado no c:\, reserve esse arquivo, voc precisar dele mais tarde.

Instalando e configurando o Squid3


No srvsquid edite o arquivo /etc/hosts e adicione as linhas: 192.168.1.2 srvsquid.meudominio.com.br srvsquid 192.168.1.1 srvdc1.meudominio.com.br srvdc1

Edite o arquivo /etc/resolv.conf e coloque essa configurao: search meudominio.com.br nameserver IP-DO-DNS-PRIMRIO nameserver IP-DO-DNS-SECUNDRIO Teste o DNS reverso com o comando: $ dig -x 192.168.1.2 Na parte ANSWER da sada do comando deve retornar o nome srvsquid.meudominio.com.br. Instale o Squid3: $ sudo apt-get update $ sudo apt-get install squid3 Copie de forma segura o keytab gerado no passo anterior no Windows para o srvsquid. Copie para /etc/squid3/srvsquid.keytab depois apague a cpia do c:\. D owner para o usurio proxy: $ sudo chmod proxy:proxy /etc/squid3/srvsquid.keytab D permisso somente leitura 400 no arquivo: $ sudo chmod 400 /etc/squid3/squid.keytab Edite o arquivo /etc/enviroment e adicione a linha: KRB5_KTNAME=/etc/squid3/srvsquid.keytab Edite o arquivo /etc/init.d/squid3 e adicione a linha abaixo no script logo em baixo da linha PATH=/bin:/usr/bin:/sbin:/usr/sbin: export KRB5_KTNAME=/etc/squid3/srvsquid.keytab Faa cpia do arquivo de configurao original do Squid: $ sudo cp /etc/squid3/squid.conf /etc/squid3/squid.conf.ORIGINAL Edite o arquivo squid.conf e cole a configurao abaixo: Obs.:

No arquivo tem a configurao negotiate e um exemplo de configurao basic via LDAP para compatibilidade, caso seja necessrio utilizar proxy para sistemas que no aceitem negotiate. Caso seja habilitada essa opo a senha trafegar em texto puro quando utilizado LDAP. Colocar na ordem, pois se colocar primeiro o LDAP ele vai priorizar a autenticao texto puro.

Contedo do squid.conf: auth_param negotiate program /usr/lib/squid3/squid_kerb_auth -d -s HTTP/meudominio.com.br@MEUDOMINIO.COM.BR auth_param negotiate children 20

auth_param negotiate keep_alive on #Segue a configurao BASIC LDAP, basta descomentar as 4 linhas abaixo. #O usurio fornecido deve ter permisso de consultar a base LDAP. #auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b "DC=meudominio,DC=com,DC=br" -D "CN=USUARIOLDAP,OU=usuarios,OU=informatica,DC=meudominio,DC=com,DC=br" -w "SENHADOUSUARIO" -f sAMAccountName=%s -P -v 3 -h 192.168.1.1 #auth_param basic children 20 #auth_param basic realm Autenticacao internet #auth_param basic credentialsttl 2 hours acl auth proxy_auth REQUIRED acl acl acl acl acl acl acl acl acl acl acl acl acl acl acl manager proto cache_object localhost src 127.0.0.1/32 to_localhost dst 127.0.0.0/8 0.0.0.0/32 SSL_ports port 443 Safe_ports port 80 # http Safe_ports port 21 # ftp Safe_ports port 443 # https Safe_ports port 70 # gopher Safe_ports port 210 # wais Safe_ports port 1025-65535 # unregistered ports Safe_ports port 280 # http-mgmt Safe_ports port 488 # gss-http Safe_ports port 591 # filemaker Safe_ports port 777 # multiling http CONNECT method CONNECT

http_access allow auth http_access deny all http_access http_access http_access http_access allow manager localhost deny manager deny !Safe_ports deny CONNECT !SSL_ports

http_access allow localhost http_access deny all icp_access deny all htcp_access deny all http_port 3128 hierarchy_stoplist cgi-bin ? access_log /var/log/squid3/access.log squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern (cgi-bin|\?) 0 0% 0 refresh_pattern . 88032234 0 20% 4320 icp_port 3130 coredump_dir /var/spool/squid3

Configurando os navegadores
Os navegadores testados foram o IE 7 e o Firefox 3.0 ou superior. As mquinas clientes foram testadas com Windows XP, Vista e 7. Ambos precisam estar logados no domnio para funcionar. Estou realizando testes com o Ubuntu 10.04 desktop para autenticar via kerberos, mas ainda no tive sucesso, assim que tiver progresso atualizo. Quem tiver alguma crtica, sugesto ou melhoria pode enviar.

Para contornar esse problema foi ativada a autenticao BASIC LDAP no squid.conf da pgina anterior. Essa autenticao compatvel com o Linux, inclusive quando exporta o proxy pelo comando "export http_proxy=http://user:senha@srvsquid.meudominio.com.br", porm ela envia a senha em texto puro. ATENO:

Para configurar os navegadores necessrio na configurao do proxy adicionar o FQDN, ou seja, ao invs de colocar srvsquid ou o IP deve ser configurado o nome + domnio, Ex.: srvsquid.meudominio.com.br nas opes de proxy, por isso a importncia de se configurar o DNS e o DNS reverso. A porta se no foi alterada 3128. A autenticao Kerberos, para funcionar, o relgio e data do SRVSQUID e do SRVDC1 precisa estar sincronizados, voc pode fazer isso configurando NTP, network time protocol. H vrios tutoriais disponveis, ou voc mesmo pode configurar na mo para que ambos fiquem no mximo com 2 minuto de diferena.

Referncias:

Getting Squid to authenticate with kerberos and Windows 2008/2003/7/XP - Server Fault Squid kerberos authentication and ldap authorization in Active Directory Klaubert's Blog ConfigExamples/Authenticate/Kerberos - Squid Web Proxy Wiki

Você também pode gostar