1 de 5 4/2/2007 14:40 Squid autenticado no Active Directory com Winbind Autor: Anderson Leite <asleite at velonet.net> Data: 30/08/2006 Introdução Este é um artigo bem resumido, entrando em detalhes somente das configurações específicas dos softwares aqui tratados. Cenário do artigo: Rede com PDC Windows 2003 Standard; Linux box (Debian Sarge) atuando como gateway, rodando SQUID + iptables. Pré-requisitos: Samba 3.x SQUID 2.5.x Winbind Estou presumindo que você já tem conhecimentos com ferramentas de edição de texto numa Linux box (no meu caso específico vi), conhecimento de Squid, Samba e iptables. Preparação do ambiente Instalar os pacotes necessários: # apt-get install samba winbind krb5-clients krb5-user libpam-ccreds libpam-ldap nss-updatedb libnss-db libnss-mdns libnss-dev libnss3 Edição de parâmetros: Adicionar uma entrada no /etc/hosts para o servidor do Active Directory: <IP do servidor AD> SERVIDOR Configurar o Samba, alterando/adicionando os parâmetros: workgroup = GRUPO password server = SERVIDOR realm = DOMINIO.LOCAL.AD
2 de 5 4/2/2007 14:40 security = ADS netbios name = nomenetbios # Definições do winbind bind interfaces only = yes winbind separator = / winbind uid = 10000-20000 winbind gid = 10000-20000 winbind enum users = yes winbind enum groups = yes winbind use default domain = yes log file = /var/log/samba/log.%m log level = 2 max log size = 1000 Isso é o básico que precisamos no nosso Samba, após isto vamos alterar o arquivo /etc/nsswitch.conf para que possamos pegar a lista de usuários utilizando winbind. Altere as linhas passwd e group. De: passwd: group: compat compat Para: passwd: group: compat winbind compat winbind Após isto estamos quase prontos para começar, reinicie o Samba e o winbind. Adicionando o servidor no domínio Vamos agora pegar um ticket para adicionar o servidor no domínio com o comando: # kinit <usuário administrador do domínio>@dominio.local.ad Em seguida vamos adicionar o nosso servidor Samba ao domínio com o comando: # net ads join CARTAFRICA -U<usuário administrador>%'<senha>' OBS: Se em algum momento neste passo, receber uma mensagem de erro parecida com esta: [2006/06/26 10:01:07, 0] libads/kerberos.c:get_service_ticket(337) get_service_ticket: kerberos_kinit_password SERVER$@DOMINIO.LOCAL.AD@DOMINIO.LOCAL.AD failed: Clock skew too great
3 de 5 4/2/2007 14:40 Verifique a data e hora do sistema Linux e do servidor AD. Para testar se correu realmente tudo bem, utilize: # net ads testjoin # net ads info Vamos agora setar o usuário e a senha que o winbind irá utilizar para realizar as pesquisas, com o comando: # wbinfo --set-auth-user=<usuário administrador>%'<senha>' Reinicie o winbind, após isto vamos realizar os testes. Tudo já deverá estar funcional, para testar, utilize os comandos: wbinfo -u (Lista os usuários); wbinfo -t (Testa se o secret está ok); wbinfo -g (Lista os grupos); getent group (Lista os grupos); getent passwd (Lista os usuários). OBS: O winbind demora aproximadamente 20 segundos para se inicializar completamente, se nesse meio tempo receber mensagens de que não é possível pegar a lista de usuários ou checar o secret, não se desespere (ainda), aguarde um pouco e tente novamente. Configuração do SQUID Vamos remover as linhas que permitem o proxy transparente (caso já utilizasse o sistema desta forma), comente as linhas: #httpd_accel_host virtual #httpd_accel_port 80 #httpd_accel_with_proxy on Insira também um bloco de configuração como este: auth_param basic realm "Acesso a internet - Sua Empresa" # Autenticação básica HTTP auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic auth_param ntlm children 5 auth_param ntlm max_challenge_reuses 0 auth_param ntlm max_challenge_lifetime 2 minutes auth_param ntlm use_ntlm_negotiate off # Insira isto se você precisar que os usuários estejam contidos em grupos external_acl_type nt_group ttl=0 concurrency=5 %LOGIN /usr/lib/squid/wbinfo_group.pl
4 de 5 4/2/2007 14:40 OBS: Em algumas páginas que encontrei, se dizia para utilizar os helpers localizados em /usr/lib/squid (wb_ntlmauth), porém este helper não funciona com o SAMBA 3.x, utilize-o somente se você estiver usando SAMBA 2.x. OBS 2: Não consegui fazer funcionar corretamente utilizando o seguinte helper: auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp Se quiser tentar, esteja à vontade, caso consiga fazê-lo funcionar corretamente, por favor me informe para que a solução seja adicionada a este documento, obviamente seus créditos serão mantidos :) Após isto, insira as ACL's de acesso: acl restrictedusers external nt_group <Grupo Restrito> acl unrestrictedusers external nt_group <Grupo Liberado> OBS: Algumas páginas de documentação que encontrei falavam de usar a tag NT_global_group, porém com o release do SQUID que estou utilizando neste momento (2.5.STABLE14), esta TAG não funciona. Após inserir as ACL's, faça o trabalho sujo com o http_access: http_access allow unrestrictedusers http_access deny restrictedusers No meu caso específico o cliente só desejava liberar ou negar o acesso a determinadas pessoas, mas muito mais pode ser feito, incluindo restrições por horário, por tipo de acesso e o que mais sua imaginação de Bastard Operator From Hell permitir, é igual a Neston: existem mil maneiras de preparar, invente a sua! Após isto, se desejar, insira uma linha no seu script de firewall, para não permitir que ninguém navegue por fora do proxy: /sbin/iptables -A INPUT -p tcp --dport 80 -j DROP Um outro ponto importante é permitir que o usuário do Squid possa ler o diretório onde fica o socket do winbind, isso pode ser feito com o comando: # chgrp proxy /var/run/samba/winbindd_privileged Após a execução do comando, reinicie o winbind. Dica: não tente mudar as permissões do diretório, se elas estiverem diferente de 750 o winbind simplesmente não sobe. Considerações finais Depois disto é só configurar o navegador dos usuários para utilizar proxy, ou se quiser deixar tudo mais bonito ainda, utilizar um script de configuração automática via DHCP (que não será coberto no escopo deste artigo).
5 de 5 4/2/2007 14:40 Alguma documentação sobre isto pode ser encontrada em: http://www.slackware-brasil.com.br/.../artigo_completo.php?aid=3549 http://www.isaserver.org/.../configuring-dhcp-dns-automatic-discovery.html http://archives.neohapsis.com/archives/openbsd/2002-08/1507.html http://www.grape-info.com/doc/win2000srv/internet-gw/wpad/index.html É isto pessoal, espero que este artigo ajude a vocês a terem algumas noites mais tranqüilas de sono, diferentes das minhas antes de conseguir fazer essa coisa funcionar :) http://www.vivaolinux.com.br/artigos/verartigo.php?codigo=5346 Voltar para o site