sexta-feira, 17 de dezembro de 2010

Squid Autenticado no Active Directory

Para a autenticação sem a solicitação de senha devemos utilizar o protocolo NTLM disposto no diretório
/usr/bin/ntlm_auth. Este protocolor realizada a troca de desafios e autentica o usuário sem a necessidade
de informar senha, utilizando para tal o login e senha logados no Windows.

Mãos na massa. Instalação realizada com Debian 5.07 lenny

:: Ingresse a máquina no Domínio AD 
Clique Aqui para Visualizar o POST
Após realizado os testes da integração conforme descrito no POST anterior vamos instalar o squid

:: Instalando o squid
# apt-get install squid

:: Configurando o squid
# cp /etc/squid/squid.conf /etc/squid/squid.conf.ori
# vim /etc/squid/squid.conf

Encontre as linhas
[...]
#Recommended minimum configuration per scheme:
#auth_param negotiate program <uncomment and complete this line to activate>
#auth_param negotiate children 5
#auth_param negotiate keep_alive on
#auth_param ntlm program <uncomment and complete this line to activate>
#auth_param ntlm children 5
#auth_param ntlm keep_alive on
#auth_param digest program <uncomment and complete this line>
#auth_param digest children 5
#auth_param digest realm Squid proxy-caching web server
#auth_param digest nonce_garbage_interval 5 minutes
#auth_param digest nonce_max_duration 30 minutes
#auth_param digest nonce_max_count 50
#auth_param basic program <uncomment and complete this line>
#auth_param basic children 5
#auth_param basic realm Squid proxy-caching web server
#auth_param basic credentialsttl 2 hours
#auth_param basic casesensitive off
[...]

Copie as linhas abaixo e altere conforme segue
[...]
# Autenticacao direta sem Pop-up de Senha
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 20
auth_param ntlm keep_alive on

# Autenticacao direta computadores não ingressadas no dominio
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
[...]

# ACL para autenticacao
acl all proxy_auth REQUIRED

# Liberando acesso
http_access allow all

:: Reinicie o squid
# squid -k shutdown
# squid -k kill
# squid -d 2

:: Olho nos logs do squid
# tail -f /var/log/squid/access.log

Tive uma série de problemas com esta autenticação, pois o Windows 7 insistia em solicitar a senha
e não era possível realizar a navegação. Depois de uma série de testes e mudanças, descobri que
o Windows 7 vem configurado por padrão para utilizar o NTLMv2. Foi só alterar para a versão anterior
do protocolo que a autenticação/navegação ocorreu certinho.

:: Alterando a versão do NTLM
1) Iniciar > Executar > secpol.msc
2) Navegue até Diretivas Locais > Opções de Segurança
3) Encontre o Item Segurança de Rede: nível de autenticação LAN Manager
4) Altere seu valor para Enviar LM e NTLM - usar segurança da sessão NTLMv2, se negociada

Obs.: Esta configuração pode ser realizada via GPO.

:: Utilizando os Grupos do AD para permissões

Crie o diretorio acl para manter as configurações organizadas
# mkdir /etc/squid/acl

Crie o arquivo que conterá os grupos Restritos por exemplo
# touch /etc/squid/acl/Grupos_Restritos.txt
# echo "Grupo Restrito AD" >> /etc/squid/acl/Grupos_Restritos.txt

# vim /etc/squid/squid.conf
[...]
acl Usuarios_Autenticados proxy_auth REQUIRED
external_acl_type groups children=20 %LOGIN /usr/lib/squid/wbinfo_group.pl
acl Grupos_Restritos external groups "/etc/squid/acl/Grupos_Restritos.txt"
http_access allow Usuarios_Autenticados Grupos_Restritos
[...]

sexta-feira, 3 de dezembro de 2010

Ingressar Linux no domínio Windows

:: Instale os seguintes pacotes
# apt-get install ntpdate samba-common winbind krb5-config krb5-user

:: Edite o arquivo /etc/krb5.conf e adicione as seguintes linhas
# vim /etc/krb5.conf

[libdefaults]
        default_realm = MICROSOFT.MSFT
 [...]
 [realms]
        MICROSOFT.MSFT = {
                kdc = 192.168.0.1
                kdc = 192.168.0.2
                admin_server = 192.168.0.1
               default_domain = microsoft.msft
        }
 [...]
 [domain_realm]
        .microsoft.msft = MICROSOFT.MSFT
        microsoft.msft = MICROSOFT.MSFT

:: Sincronize o horário com o Controlador de Domínio
# ntpdate 192.168.0.1

:: Teste a configuração do arquivo krb5.conf
# kinit administrator
password´s administrator@MICROSOFT.MSFT: **********

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@ALDO.COM.BR

Valid starting     Expires            Service principal
12/03/10 11:12:35  12/03/10 21:12:41  krbtgt/MICROSOFT.MSFT@MICROSOFT.MSFT
        renew until 12/03/10 21:12:35

:: Configure o arquivo smb.conf, edite o arquivo e incluia os seguintes comandos
# vim /etc/samba/smb.conf
[...]
   workgroup = MICROSOFT
   server string = ServProxy
   netbios name = PROXY
   realm = MICROSOFT.MSFT
   winbind use default domain = yes
   security = ads
   idmap gid = 10000-20000
   idmap uid = 10000-20000
   os level = 20
   winbind enum users = yes
   winbind enum groups = yes

:: Adicionar servidor ao domínio
# net ads join -U administrator
Enter administrator's password:
Using short domain name -- MISCROFOT
Joined 'PROXY' to realm 'microsoft.msft'

:: Testar adição no domínio
# net ads testjoin
Join is Ok

# net ads info
LDAP server: 192.168.0.1
LDAP server name: dc1.microsoft.msft
Realm: MICROSOFT.MSFT
Bind Path: dc=MICROSOFT,dc=MSFT
LDAP port: 389
Server time: Sex, 03 Dez 2010 11:26:08 BRST
KDC server: 192.168.0.1
Server time offset: 0

:: Reinicie o winbind
# /etc/init.d/winbind restart

:: Teste se o servidor consegue recuperar usuários do domínio
# wbinfo -u

:: Teste de o servidor consegue recuperar grupos do domínio
# wbinfo -g

:: Alterar o arquivo /etc/nsswitch.conf
# vim /etc/nsswitch.conf
[...]
passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind
[...]

:: Teste a configuração do nsswitch.conf
# getent passwd
<Retornara os usuários do Linux e do AD>

Tudo OK.