quinta-feira, 15 de julho de 2010

Squid Autenticado em Base AD

Olá, vou apresentar neste tópico todas as etapas de configuração do Squid para que seja possível a autenticação de usuários do Active Directory de forma simplificado para o usuário, sem a necessidade de toda vez que abrir o navegador seja necessário informar usuário e senha.

Este artigo é baseado nas seguintes fontes:

http://www.vivaolinux.com.br/artigo/Squid-autenticando-em-base-Active-Directory/
http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory
http://www.vivaolinux.com.br/topico/Perguntas-Frequentes/SQUID-LENTO-AUTH-AD-VIA-NTLM

Para esta explicação, segue as versões utilizadas:

CentOS 5.0 2.6.18-128.1.6.el5
Squid 2.6.STABLE21
Samba 3.0.33 Release 3.7.el5

Vou apresentar esta implantação em 3 partes, nesta primeira fase iremos abordar o Linux conseguindo autenticar utilizando Kerberos, que é o padrão que a Microsoft utiliza ao gerar o token de autenticação no Active Directory, existe o formato simplificado chamado de ntlm, que é menos seguro e foi sendo substituido desde as versões do Windows 2000, largamente utilizado na era WinNT.

Vamos lá:

Editando o arquivo /etc/krb5.conf:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMINIO.LOCAL

[realms]
DOMINIO.LOCAL = {
kdc = domaincontroller.dominio.local
admin_server = domaincontroller.dominio.local
kpasswd_server = domaincontroller.dominio.local
default_domain = dominio.local
}

[domain_realm]
.dominio.local = DOMINIO.LOCAL


[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

Com estas configurações acima (adequando as nomenclaturas de acordo com o seu ambiente), o kerberos estará pronto para "entender" o domínio do AD.

No arquivo /etc/hosts.conf corrija e insira algumas informações:

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.0.20 proxy.dominio.local proxy
::1 localhost6.localdomain6 localhost6

Novamente faça a adequação necessária dos nomes e ip conforme o seu ambiente

Segunda parte -

Agora faremos a configuração do Samba para que o nosso servidor Linux entre como uma "estação windows" cadastrada no domínio do AD.

Abaixo o arquivo smb.conf personalizado para que seja possível a conexão do Squid ao Active Directory:

Local do arquivo:

/etc/samba/smb.conf

[global]

workgroup = [DOMÍNIO_NO_FORMATO_NETBIOS]
server string = Proxy Server

netbios name = [NOME_NETBIOS_SERVIDOR_PROXY]

log level = 3
log file = /var/log/samba/%m.log
max log size = 50

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
security = ads
realm = [NOME_DOMÍNIO_NO_FORMATO_DNS]
encrypt passwords = yes
ldap ssl = no
password server = [NOME_SERVIDOR_DC_AD]

idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = yes

preferred master = no

dns proxy = no

Após configurar o arquivo acima, sincronize a hora do servidor linux com o servidor active directory:

ntpdate -4 [IP_DC_AD]

No arquivo /etc/resolv.conf deverá estar indicado os ips dos servidores DNS do AD. Digite o seguintes comandos para associar o servidor linux ao AD como membro do domínio:

Inicie o samba e o winbind:

service smb restart
service winbind restart

e depois:

#kinit administrator@DOMAIN.LOCAL.

#net ads join -U administrator@DOMAIN.LOCAL.

Substitua DOMAIN.LOCAL por suas configurações

Para verificar se tudo ocorreu como esperado:

#wbinfo -t <-- testa a conexão com o AD e retorna a seguinte mensagem em caso de sucesso: checking the trust secret via RPC calls succeeded

#wbinfo -u <-- retorna a lista de usuários do AD

Terceira Parte -

Agora vamos finalizar as configurações no arquivo do squid.conf, afim de completarmos a integração da autenticação squid juntamente ao active directory:

No arquivo /etc/squid/squid.conf:

O primeiro passo é ativar o processo de autenticação no squid:

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30

o segundo criar algumas acl's para efetivar o processo de autenticação:

acl AuthorizedUsers proxy_auth REQUIRED

http_access allow all AuthorizedUsers

Com isso, basta você configurar o proxy em seu navegador, estar logado no domínio onde o seu servidor proxy está associado e pronto! Você vai observar que no log vai aparecer algumas mensagens de TCP_DENIED/407, isso é normal e tem haver com a tentativa de autenticação NTLM - vide informações em: http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory

Aprimorando suas regras:

Para criar uma acl específica para um usuário ou grupo, utiliza uma acl buscando informações de um comando externo:

external_acl_type ldap_group ttl=300 children=200 %LOGIN /usr/lib/squid/wbinfo_group.pl

Ela retornará os grupos de um determinado usuário autenticado, basta criar uma acl para selecionar o grupo:

acl TIN1 external ldap_group -i proxytin1

onde o grupo no active directory estará como "proxytin1"

Ai você pode criar uma acl para um determinado site:

acl sitesTIC1 url_regex orkut.com

E bloquear logo abaixo:

http_access deny sitesTIC1 TIN1

Agora teste tudo.

Obs: Realizei testes em varios windows o unico que não funciona e 2008R2.







Nenhum comentário: