2010/10/08

SQUID + Autenticação Active Directory por NTLM e Grupos

Ambiente:
- CentOS 5.5 - IP 192.168.1.104
- Windows XP com IE 8 e Firefox 3.5
- Windows 2003 - Domínio EXZICA.SYTES.NET 192.168.1.23

Pacotes instalados no CentOS 5.5
- Samba 3.0
- Squid 3.0
- Winbind

- SELinux DESATIVADO

Arquivos que serão configurados:
- /etc/krb5.conf
- /etc/samba/smb.conf
- /etc/nsswitch.conf
- /etc/hosts

Instale os pacotes:
# yum install squid samba winbind

Configurando a autenticação kerberos
Conteúdo do arquivo /etc/krb5.conf
[libdefaults]
default_realm = EXZICA.SYTES.NET

[realms]
EXZICA.SYTES.NET = {
kdc = 192.168.1.23
}

Efetuando a autenticação:
# kinit administrator
Deve aparecer:
# Password for administrator@EXZICA.SYTES.NET:

Verificando o ticket:
# klist
Deve aparecer:
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@EXZICA.SYTES.NET

Valid starting Expires Service principal
10/08/10 16:43:01 10/09/10 02:44:48 krbtgt/EXZICA.SYTES.NET@EXZICA.SYTES.NET
renew until 10/09/10 16:43:01


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

Configurando o Samba:
Conteúdo do arquivo /etc/samba/smb.conf
[global]
workgroup = EXZICA
netbios name = FIREWALL
realm = EXZICA.SYTES.NET
server string = Firewall
security = ads
encrypt passwords = Yes
password server = W2K3.EXZICA.SYTES.NET
log file = /var/log/samba/%m.log
max log size = 0
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
preferred master = False
local master = No
domain master = False
dns proxy = No
wins server = W2K3.EXZICA.SYTES.NET
winbind separator = /
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
idmap uid = 10000-60000
idmap gid = 10000-60000

Edite o arquivo /etc/hosts e adicione o seu hostname configurado no Samba, "netbios name" da seguinte forma:
192.168.1.104 FIREWALL.EXZICA.SYTES.NET FIREWALL

Inicie o serviço:
# service samba start
# service winbind start

Adicione o computador ao domínio:
# net ads join -U administrator
Deve aparecer:
administrator's password:
Using short domain name -- EXZICA
Joined 'FIREWALL' to realm 'EXZICA.SYTES.NET'

Ou verifique da seguinte forma:
net rpc join -U administrador -w DOMAIN


Agora deve reiniciar o winbind:
service winbind stop

service winbind start

Verifique a relação de confiança do computador adicionado e o domínio:
# wbinfo -t
checking the trust secret via RPC calls succeeded

Verifique os usuários do domínio:
# wbinfo -u

Verique os grupos do domínio:
# wbinfo -g

Edite o arquivo /etc/nsswitch.conf para consultar a base winbind
passwd: compat files winbind
shadow: files
group: compat files winbind

Configurações do Squid:
A linha de autenticação é a seguinte:
...
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm keep_alive on
...
acl autenticado proxy_auth REQUIRED
...
http_access allow autenticado
...

Edite as permissões de pasta:

# chgrp squid /var/cache/samba/winbindd_privileged
# chmod 750 /var/cache/samba/winbindd_privileged  

CentOS 6.5 mudou o diretório para:
# chgrp squid /var/lib/samba/winbindd_privileged 
# chmod 750 /var/lib/samba/winbindd_privileged    

Inicie o serviço
# service squid start

Logue em qualquer computador que esteja no domínio e abrindo o Internet Explorer e não será solicitado login/senha pois o login que será enviado ao Squid é o login que efetuou logon na máquina.

Para a verificação dos grupos do Active Directory com o Squid:
Verificando se não á problemas:
# wbinfo -r administrator
Deve retornar os IDs dos grupos em que o usuário administrator pertence.

Caso não retorne, proceda da seguinte forma:
# service smb stop; service winbind stop; service squid stop
# rm /var/cache/samba/winbindd_idmap.tdb
# service smb start; service winbind start; service squid start

Verifique novamente o comando
# wbinfo -r administrator

Edite o arquivo /etc/squid/squid.conf
...
external_acl_type grupo %LOGIN /usr/lib/squid/wbinfo_group.pl
...
acl gr_internet external grupo internet
# acl nome_da_acl external nome_do_external nome_do_grupo_no_Active_Directory_que_o_login_deve_pertencer
...
http_access allow autenticado gr_internet
...

Reinicie o serviço
# service squid restart

A cada usuário que adicionado e removido do grupo do Active Directory deve-se efetuar um reload do squid:
# service squid reload

Um comentário:

Rodrigo Caldas disse...

Ajudou muito, só faltou mesmo informar que o arquivo /etc/resolv.conf deve estar apontando o nameserver para o AD, caso contrário ele não consegue achá-lo. Aqui estávamos usando um outro DNS e na hora de dar um net ads join não encontrava nunca o domínio. Depois de ajustar o resolv.conf funcionou sem problemas. Obrigado!