Buenas!!
Após um tempinho de correria voltei para publicar aqui mais uma ótima solução para nosso dia-a-dia.
Todos conhecem Squid e todos conhecem AD.
É muito comum termos organizações com as bases de usuários totalmente centralizadas no AD. Isso é fato.
Porém sempre houve uma dificuldade de se implementar ótimos proxies como o Squid por motivos que não nos estressam, mas estressam os usuários. O maior exemplo disso é a maldita janela de autenticação.
O motivo!
Em uma estrutura que administro, após uma mudança de topologias de Firewall precisei instalar proxies em cada filial (antes todas usavam o proxy da Matriz).
A opção!
Obviamente a solução de proxy escolhida para as filiais foi o Squid. Há quem diga que ele não é bom, mas basta ler e estudar suas funcionalidades que rapidamente achará diferenciais que colocam outros proxies vários anos atrás. O que você prefere para suas soluções? Algo fácil e medilcre ou a melhor e mais segura solução mesmo que você precise estudá-la e entendê-la? Estudar não mata ninguém!! O que ferra é o "profissional" ter a cara de pau de implementar algo "nas coxas" mesmo sabendo que podia ser melhor. Mas cada caso é um caso. No meu caso essa foi a MELHOR solução. : )
O problema!
Todos os usuários estavam acostumados com uma estrutura completamente integrada, onde a única vez que ele precisava colocar sua senha para serviços de rede era na autenticação do Windows. Todo o resto era feito através de kerberos, o que particularmente acho muito interessante. Para que fazer trabalho repetitivo se o objetivo final é o mesmo?
Outro fato é que essa solução de Squid integrado com Kerberos, AD e fazendo controles baseados em usuários e grupos é muito difícil de ser encontrada até mesmo pela sua complexidade. Não basta dar um "rpm -ivh" e fazer algumas configurações que o negócio saí funcionado. Isso seria ótimo!!! Até tive uma idéia: Vou mandar um e-mail para o pessoal do Squid e/ou gerar os pacotes para as distros que uso.
A solução!
Bom, vamos dar um jeito de fazer isso funcionar de forma profissional. Gambiarras qualquer um consegue fazer. Vamos fazer algo um pouco mais decente do que os preguiçosos costumam fazer... hehehehe Não é nada pessoal com ninguém, mas para o seu próprio bem, espero que o chapéu não sirva... e por favor, se alguém achar uma solução ainda melhor compartilhe. Sempre temos algo para aprender com os próximos.
Também é fato que muitos profissionais bons nem mesmo sabiam dessa possibilidade. Não devemos julgar ninguém ainda mais de forma preconceituosa. Para isso estou colocando a solução aqui. Algo construtivo.
Importante: Não é integração com LDAP, isso é fácil e está cheio de tutorial na Internet. Isso é Kerberos!
Resumo:
Basicamente faremos uma compilação da última versão do squid pois nas versões das oferecidas pelas distros (testei em CentOS) não vem com o módulo de integração com kerberos.
Depois vamos baixar e compilar um módulo bem interessante para fazermos buscas de grupos e usuários através de kerberos.
Por fim vamos ajustar nosso SO para se comunicar com o servidor kerberos e criar um arquivo de credenciais para consultas vindas do Squid.
Se tudo funcionar legal você pode pedir aumento, replicar a solução, abrir uma cerveja, pagar um churras para os amigos (me chama), etc etc... Como preferir.
Let's Start!!
FQDN do meu servidor Squid: squidserver.macus.net
FQDN do meu servidor AD: adserver.marcus.net
Distro Linux: CentOS 5.5 x86
Versão AD: 2008 R2
Preparando o Squid
Fiz o download da última versão do Squid no site http://www.squid-cache.org/. Antes do download dê uma olhada se já não tem uma versão mais nova.
$ wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.4.tar.gz
$ tar -xvzf squid-3.1.4.tar.gz
$ cd squid-3.1.4
As opções em negrito são importantes na hora de compilar, pode colocar outras se quiser...
$ ./configure --enable-negotiate-auth-helpers=squid_kerb_auth --enable-stacktraces --prefix=/opt/squid-3.1
$ make
$ make install
Antes de configurarmos nosso Squid vamos fazer os outros procedimentos que ele depende.
Compilando módulo de consulta em grupos por Kerberos
Bem interessante esse módulo, mas infelizmente não vem nativamente no Squid.
$ cvs -z3 -d:pserver:anonymous@squidkerbauth.cvs.sourceforge.net:/cvsroot/squidkerbauth co -P squid_kerb_ldap
$ cd squid_kerb_ldap
$ ./configure ; make
$ cp -a squid_kerb_ldap /opt/squid-3.1/sbin
Gerando o Keytab pelo Windows
Para que o Squid consiga trocar tickets com o servidor kerberos, o mesmo precisa de credenciais para isso. Não temos como ficar autenticando o squid manualmente a cada incialização do mesmo, por isso vamos criar um arquivo keytab e adicioná-lo no nosso arquivo de inicialização do Squid.
Esse processo pode ser feito pelo próprio Linux usando o msktutil, mas encontrei alguns problemas nele quando o servidor Squid não está no domínio. Como não vou colocar ele no domínio usei a própria ferramenta do Windows 2008 (AD) que é nativa no SO.
Antes de gerar o keytab é necessário criar um usuário no AD que será cadastrado nessas credenciais.
No meu caso criei o usuário "squid.filial" e rodei o seguinte comando no meu PDC.
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
Mande o arquivo keytab gerado para o servidor Squid. No meu caso coloquei na pasta /opt/squid.
Em alguns materiais da Internet o pessoal usava criptografia "rc4-hmac-nt", mas tive alguns problemas com autenticação. Dei uma pesquisada por cima e encontrei algumas referênias dizendo que no Windows 7 e 2008 foram alteradas algumas questões de criptografia. Com o all todos os serviços funcionaram legal. Algo interessante é usar o Wireshark para monitorar as requisições de tickets entre cliente e servidor.
Adicione as estradas do keytab no script de inicialização do Squid.
Caso não tenha o script de inicialização do mesmo, aconselho pegar de um pacote do squid específico da distro.
De volta ao Linux
No arquivo /etc/init.d/squid adicione as seguintes linhas:
KRB5_KTNAME=/opt/squid/squid.filial.keytab
export KRB5_KTNAME
Kerberos Client
Edite o arquivo /etc/krb5.conf
No meu caso ficou assim:
##################
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = MARCUS.NET
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
; 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
[realms]
MARCUS.NET = {
kdc = adserver.marcus.net:88
admin_server = adserver.marcus.net:749
default_domain = marcus.net
}
[domain_realm]
.marcus.net = MARCUS.NET
marcus.net = MARCUS.NET
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
##################
Configurações do Squid
Antes de mexer no squid copiei mais um arquivo para a pasta sbin.
$ cd /opt/squid-3.1
$ cp -a libexec/squid_kerb_auth sbin/
Dentre as demais configurações, o que interessa para a autenticação kerberos é:
##################
# KERBEROS - Integracao completa com AD
auth_param negotiate program /opt/squid-3.1/sbin/squid_kerb_auth -s HTTP/squidserver.marcus.net
auth_param negotiate children 10
auth_param negotiate keep_alive on
# ACLs externas para buscar grupo baseado em Kerberos.
external_acl_type Internet_Full ttl=3600 negative_ttl=3600 %LOGIN /opt/squid-3.1/sbin/squid_kerb_ldap -g Internet_Full
##################
Beleza! Feito isso é só criar os diretórios de cache e iniciar o squid.
Configure o proxy e porta no navegador das estações e teste.
Detalhes e Dicas:
- Certifique-se que os servidores conseguem resolver nomes DNS do Squid e do AD.
- Verifique as permissões dos arquivos e pastas do Squid.
- Verifique se os horários dos servidores e clientes estão sincronizados.
- Observe o arquivo cache.log do Squid para resolver problemas ou entender o funcionamento.
- Da para colocar os módulos squid_kerb_auth e squid_kerb_ldap em modo dedug apenas adicionando um "-d" depois do comando no squid.conf.
Fontes que li durante a implementação
Belo Tutorial:
http://klaubert.wordpress.com/2008/01/09/squid-kerberos-authentication-and-ldap-authorization-in-active-directory/
Squid Kerb Helper
http://sourceforge.net/projects/squidkerbauth/
Informações sobre KeyTabs
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/tsec_SPNEGO_config_dc.html
Informações sobre erros comuns:
http://sammoffatt.com.au/jauthtools/Kerberos/Troubleshooting
Legal! :-)
ResponderExcluirUma curiosidade: mesmo utilizando o keytab gerado pelo ktpass, ainda aparecem os "TCP_MISS" no log do squid?
Olá Rodrigo!
ResponderExcluirSim, a tag "TCP_MISS/200" é normal nos logs de acesso do squid usando essa configuração.
Abração!
Excelente artigo, muito bem explicado e refinado!
ResponderExcluirParabéns!
Este comentário foi removido pelo autor.
ResponderExcluirOlá Juliano!
ResponderExcluirUsando somente o squid_kerb_auth não, pois ele é específico para trabalhar com kerberos e mais especificamente com autenticação.
Para regras de grupos precisamos, nesse caso, procurar nas bases ldap (AD, OpenLDAP, etc), pois são nelas que acharemos as informações de grupos e usuários.
Nesse mesmo post tem exemplo de configuração do squid_kerb_ldap.
Abraço!
Ola Marcus, ainda fiquei com uma duvida desse seu post. Trabalho numa grande corporação e estou precisando implantar uma solução de entrega de internet mais inteligente, com filtro de conteúdo. Mas então me interessei por sua postagem. O que voce quis dizer com ela foi autenticação no AD utilizando Kerberos. Assim dispensava a famosa tela de autenticação. Mas ai que mora a dúvida. Esse usuário utilizado para autenticar é o mesmo sempre? Assim toda navegação fica atras dessa autenticação? Ou apenas voce trocou o protocolo utilizado de NTLM para Kerberos, ocorrendo uma autenticação inetragada ao AD, ou seja, todos os browsers captam o usuário logado na maquina e essa ao AD, e ja autenticam automaticamente?
ResponderExcluirObrigado.
Olá Luisinho!
ResponderExcluirKerberos é o método de autenticação usado pelas ferramentas para fazer a chamada "integração", ou seja, o usuário se autentica apenas uma vez e as demais ferramentas se autenticam a partir dessa primeira autenticação.
Dessa forma realmente não aparecerá mais a janela de autenticação do navegador. Se você está integrando com AD, acredito que cada pessoa tenha seu próprio usuário/senha de domínio. Nesse caso a pessoa digita o usuário e senha apenas uma vez. Para acessar o Windows, por exemplo. E quando abrir o navegador, o proxy fará a autenticação usando kerberos, ou seja, usará as mesmas credenciais usadas no logon do Windows.
Os logs de SARG, por exemplo, mostraram os acessos daquele usuário autenticado na máquina.
Acredito que tenha respondido suas questões. Qualquer coisa entre em contato.
Abraço!
Olá Thalysson!
ResponderExcluirPrimeiramente desculpe a demora na resposta. Não pude olhar antes...
Muito obrigado! Fico feliz que tenha sido útil o artigo.
Quanto ao XP, essa implementação é completamente compatível, inclusive já vi em alguns fóruns que o pessoal já a implementou. O que eu não tinha visto ainda era com o Windows 7 (por isso publiquei... hehe).
Com a entrada do Windows Server 2008 como AD, houveram algumas mudanças em relação aos algoritmos de criptografia de kerberos, mas isso comentei ali no artigo mesmo. O segredo está na hora de gerar o keytab.
Pode seguir em frente com esse cenário que funcionará legal. E conte comigo no que for possível.
Grande abraço!
Marcus
ResponderExcluirEstou utilizando o seu post para implantamos o SSO aqui no proxy da empresa.
Você chegou a encontrar o este erro?
squid_kerb_auth: parseNegTokenInit failed with rc=101
Não autenticação nem a pau, já fiz de tudo.
Olá William!
ResponderExcluirNão me recordo de ter visto esse erro.
Mas uma dica interessante é habilidar o modo de debug nele com a opação "-d".
Outros detalhes que precisam ser observados são a sincronização do horário e a forma como foi gerado o keytab.
Abração!
Marcus!
ResponderExcluirParabéns pelo artigo, simples mas extremamente eficiente.
O meu squid estava autenticando beleza, mas não estava conseguindo consultar os grupos com o squid_kerb_ldap...
Já estava batendo cabeça, e acredito que o problema que estava relacionado ou ao parâmetro "-crypto All" ou "-mapop".
Refiz o arquivo keytab, com esta dica e tudo aconteceu.
Forte abraço!
César Menezes
Marcus,
ResponderExcluirEstou tentando seguir o passo-a-passo e me deparo com algumas dependencias no SO. Estou com a versão do CENTOS 5.6 e squid-3.1.14, a última. Gostaria de pedir que me passe, se possível, os requisitos de pacotes para esse processo. No momento me deparo com o seguinte erro:
make[4]: Entrando no diretório `/root/program/squid-3.1.14/helpers/negotiate_auth/squid_kerb_auth'
make[5]: Entrando no diretório `/root/program/squid-3.1.14/helpers/negotiate_auth/squid_kerb_auth'
gcc -DHAVE_CONFIG_H -I. -I../../../ -I../../../include/ -I/root/program/squid-3.1.14/include -I/root/program/squid-3.1.14/src -I/root/program/squid-3.1.14 -g -O2 -Wall -Wextra -Werror -Wcomment -Wpointer-arith -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wdeclaration-after-statement -Wshadow -MT squid_kerb_auth.o -MD -MP -MF .deps/squid_kerb_auth.Tpo -c -o squid_kerb_auth.o squid_kerb_auth.c
In file included from squid_kerb_auth.c:32:
ska_config.h:247:2: error: #error "GSSAPI header required"
squid_kerb_auth.c:88: error: expected â)â before âmajor_statusâ
squid_kerb_auth.c:144: error: expected â)â before âmajor_statusâ
squid_kerb_auth.c: In function âmainâ:
squid_kerb_auth.c:212: error: âOM_uint32â undeclared (first use in this function)
squid_kerb_auth.c:212: error: (Each undeclared identifier is reported only once
squid_kerb_auth.c:212: error: for each function it appears in.)
squid_kerb_auth.c:212: error: expected â;â before âret_flagsâ
cc1: warnings being treated as errors
To tentando debugar, mas tá difícil. Parece que é relacionado com o GSS-API, mas não faço idéia de como solucionar o problema.
Att,
Hiro
Olá César!!
ResponderExcluirMuito obrigado pelo feedback.
Abração!
Olá Hiro!
ResponderExcluirPossivelmente os pacotes de Kerberos não estão instalados no seu CentOS 5.6. Procure os pacotes de kerberos com o comando:
# yum search kerberos ou
# yum search krb
Instale os pacotes necessários de kerberos do MIT e tente compilar novamente.
Grande abraço!
Olá Marcus!
ResponderExcluirDepois de apanhar um pouco, consegui resolver. Muito obrigado.
Tem alguma forma de passar essa autenticação para o squidGuard? Se sim, tem algum exemplo de como utilizá-lo no squidGuard?
Abraço!
Olá Marcus! Tudo bem? Artigo muito bom. Consegui implementar. Gostaria de saber como faço para criar ACLs a partir de grupos do AD. É possível eu buscar grupos do AD e declarar ACLs com esse grupos restringindo tempo de acesso, sites a determinados grupos? Grato
ResponderExcluirWladner
Bom dia, meu nome é carlos
ResponderExcluirEstou com dificuldades para criar o arquivo KTPASS, está dando o seguinte erro.
Cannot DsCrackNames: 0x57
Ktpass: failed getting target domain for specified user.
meu arquivo é:
C:\> ktpass -princ HTTP/firewall-cpd.fit21.com.br@FIT21.COM.BR -mapuser fit21.com.br\teste -crypto All -mapop set -pass 12345 -ptype KRB5_NT_SRV_HST -out teste.keytab
Meu usuário é: teste
Meu server Squid é: firewall-cpd
Agradeço pela atenção.
Meu e-mail é carlosalexandre@crtisolutions.com.br
Ola Marcus, Belo tutorial. Esse exemplo que voce deu serve para o AD do Windows 2003 tambem? muda alguma coisa?
ResponderExcluirAbraço
Ass. Douglas
Olá Hiro!
ResponderExcluirDescilpe da demora na resposta. Nunca testei essa solução com o SquidGuard, mas acredito que não haja problemas, pois o SquidGuard usaria a autenticação do próprio Squid.
Abraço!
Olá Anônimo!
ResponderExcluirPrimeiramente obrigado!
Nesse próprio artigo está descrito como fazer acls por grupos. Da uma olhadinha ali em cima. : )
A acl é tratada como todas as outras, então tudo isso é possível sim de combinar nas regras de acessos (http_access) seguindo os padrões do próprio Squid.
Abraço!
Olá Carlos!
ResponderExcluirTente usar o "domínio netbios":
C:\> ktpass -princ HTTP/firewall-cpd.fit21.com.br@FIT21.COM.BR -mapuser fit21\teste -crypto All -mapop set -pass 12345 -ptype KRB5_NT_SRV_HST -out teste.keytab
Pelo erro ele diz que não encontra o domínio para o usuário teste. As configurações de DNS estão ok também? É válido checar.
Abraço!
Olá Douglas!
ResponderExcluirEsses procedimentos devem funcionar normalmente no Windows 2003.
Talvez você tenha que mudar apenas a criptografia na hora de gerar o KeyTab para "rc4-hmac-nt".
Descrevi alguma coisa ali em cima na sessão "Gerando o keytab pelo Windows".
Abraço!
Marcus
ResponderExcluirTenho algumas dúvidas:
o meu linux squid precisa estar no dominio do AD windows 2003?
Eu preciso instalar o samba para integração entre eles?
Quando isso estiver funcionando, ele só vai pedir a senha uma unica vez?
Grato
Douglas
Olá Douglas!
ResponderExcluirSeu Linux não precisa estar no domínio (net ads join) devido ao uso do keytab.
Não há necessidade de instalar samba. Essa é uma das grandes vantagens dessa solução (ao meu ver).
O Squid usará a mesma senha do Logon do Usuário, ou seja, uma vez digitada a senha no logon o Kerberos se encarrega de deixar tudo transparente ao usuário.
Abraço!
Este post e os comentários me ajudaram em várias dúvidas que eu tinha. Agora a próxima missão é botar a mão na massa e seguir o roteiro, hehe. Caso tenha alguma outra dúvida, comentarei aqui, Marcus.
ResponderExcluirExcelente artigo Marcus, Já fiz algumas implementações de squid com kerberos usando Debian e Ubuntu Server, e agora estou fazendo uma em CENTOS e pelo que vi no seu artigo, o processo é basicamente o mesmo.
ResponderExcluirSó complementando o artigo, na versão 6.2 do CENTOS o squid já vem com o squid_kerb_auth compilado no pacote RPM, então pode-se instalar atraves do yum mesmo para facilitar na hora de instalar/atualizar.
Respondendo a duvida do colega acima, já fiz com domínios 2003 SP2 e 2008 R2 e a solução funciona sim, a única diferença é, como o Marcus falou, na hora de gerar o KEYTAB, mudar a criptografia. Para quem tiver problemas usando criptografia "ALL", pode consultar as específicas para cada versão de AD no site abaixo que tem uma tabela bem completa, pesquise por "Use ktpass options as describe in the table below":
http://www.grolmsnet.de/kerbtut/
[]'s
Alexandre
Olá Alexandre!
ExcluirMuito obrigado pela contribuição.
Agradecemos.
Abraço!
Oi Marcus,
ResponderExcluirParabéns pelo artigo, estou querendo implantar aqui, gostaria da sua ajuda se possível, eu preciso implantar esta solução junto com a opção de grupo no ad coisa que não achei aqui, vc poderia me ajudar?
Grato,
Ass: Erik P. Ghijs - eghijs@gmail.com
Olá Erik, tudo bem?
ExcluirAli em cima tem a sessão "Compilando módulo de consulta em grupos por Kerberos" que descreve como isso é feito.
Da uma olhadinha lá e qualquer dúvida entre em contato.
Abraço!
Srs, outra observação:
ResponderExcluirEm uma instalação com CENTOS 6.2 + Squid +kerberos do pacote, nem conseguia inicializar o squid, dava erro de permissão no acesso ao squid.conf logo na inicialização... Descobri que o SELINUX estava bloqueando e coloquei-o em modo "permissive". Assim o squid inicializou, mas os processos do squid_kerb_auth estavam consumindo 90% da CPU, Tentei o parâmetro no /etc/init./squid que desabilita a checagem de cache do kerberos, isso abre a possibilidade para replay attacks de curta duração, mas é uma alternativa válida em ambientes de alta carga e que não precisam de tanta segurança:
#########################
KRB5RCACHETYPE=none
export KRB5RCACHETYPE
#########################
Isso amenizou a fome de processamento do kerberos, mas não resolveu... O problema foi resolvido definitivamente apenas desabilitando completamente o SELINUX, que mesmo no modo permissivo estava causando problemas com o kerberos. Fica ai a dica para quem utiliza essa solução de proxy em ambientes de alta carga, agora a utilização da CPU caiu para 10%, vou ficar devendo o teste removendo o CACHETYPE.
[]'s
Alexandre
Boa noite Marcus Implantar esse artigo em distribuições derivado do Debian tem algum problema? Pois estou entrando em uma empresa que há muitos problemas com o Squid referente a autenticação no AD e estarei incumbido de resolver. Preciso estudar bastante sobre isso. Inclusive, se você puder me indicar material de estudo ficaria muito grato.
ResponderExcluirEmail: genius.tux@gmail.com
Olá!
ExcluirApesar de ainda não ter feito essa implementação com o Debian ou derivados, não vejo nenhum impedimento para que não funcione.
No final do post coloquei umas fontes nas quais encontrei informações úteis.
Basicamente, o conteúdo que seria interessante estudar e dominar para essa solução é Kerberos e AD. Claro, entender bem o funcionamento do Squid e o conceito de proxy também agrega.
Abraço!
Marcus,
ResponderExcluirVocê já testou a solução com o Firefox? No IE funciona tudo certinho, mas no Firefox não.
Marcus,
ExcluirSegue o recomentado acima passo a passo, mais quando testo o meu acesso, o squid da o erro abaixo. Vc sabe onde estou comendo bola?
Grato
Douglas
squid_kerb_auth: WARNING: received type 1 NTLM token
2012/06/05 13:48:31| authenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned 'BH received type 1 NTLM token'
Olá!
ExcluirJá testei com o Firefox e tive um problema de autenticação. Ele não estava aceitando kerberos. Naquela ocasião, o firefox não era usado na estrutura então acabei não pesquisando como ativar o suporte a kerberos nele (acredito que tenha como).
Uma alternativa para o momento foi criar um segundo método de autenticação no Squid, no caso, o LDAP. Na prática, quando eu acessava do meu computador com Firefox, ele não passava no kerberos e acabava mostrando a janela de autenticação. Nela eu digitava minhas credenciais do AD (LDAP) e navegava normalmente.
Caso encontre como habilitar o kerberos no firefox, compartilhe conosco. Se eu achar essa informação antes também publico aqui.
Abração!
Olá, Douglas!
ExcluirEsse erro parece algum problema com a conta do Squid criada no AD. Por favor, acesse as propriedades dessa conta no AD e vá na aba "Account".
Nessa aba, observe se a conta está semelhante a "HTTP/squidserver.dominio.net".
Caso não esteja nesse formato, por favor, revise a sessão "Gerando o Keytab pelo Windows".
Compartilhe o resultado conosco.
Abraço!
Marcus,
ResponderExcluirComando executado no AD com Windows 2003.
ktpass -princ HTTP/srvsquid.intranet-sede.local@INTRANET-SEDE.LOCAL -mapuser squid1 -crypto rc4-hmac-nt -pass prod%2@12% -ptype KRB5_NT_PRINCIPAL -out c:\
srvsquid175.keytab
Propriedades do AD:
Nome de Logon do Usuario:
HTTP/srvsquid.intranet-sede.local @intranet-sede.local
Linha do SQUID
auth_param negotiate program /usr/local/squid/libexec/squid_kerb_auth -d -s HTTP/estiva-nd1.intranet-sede.local@INTRANET-SEDE.LOCAL
auth_param negotiate children 20
auth_param negotiate keep_alive on
acl autentica proxy_auth REQUIRED
Obs:
No Meu servidor squid só subi o processo do squid, preciso subir outros processos, como por exemplo winbind,samba,kerberos?
Tambem não instalei o squid_kerb_ldap, pois não tenho grupos, isso faz diferença?
também não coloquei a máquina do dominio do AD.
Não sei mais o que fazer. Tem alguma outra idéia?
Grato Marcus.
SDS
Douglas
Marcus,
ResponderExcluirQuando executo o comando abaixo para testar a conversa
com o AD 2008
/usr/local/bin/squid_kerb_ldap -i -d -g AcessoTI -N proxyuser.g3.local@G3.LOCAL -D G3.LOCAL -S michigan.g3.local@g3.local
Aparece a mensagem de erro:
2012/07/05 18:20:40| squid_kerb_ldap: Error while binding to ldap server with SASL/GSSAPI: Unknown authentication method
2012/07/05 18:20:40| squid_kerb_ldap: Setting up connection to ldap server G3.LOCAL:389
2012/07/05 18:20:40| squid_kerb_ldap: Bind to ldap server with SASL/GSSAPI
2012/07/05 18:20:40| squid_kerb_ldap: ldap_sasl_interactive_bind_s error: Unknown authentication method
2012/07/05 18:20:40| squid_kerb_ldap: Error while binding to ldap server with SASL/GSSAPI: Unknown authentication method
2012/07/05 18:20:40| squid_kerb_ldap: Error during initialisation of ldap connection: Bad file descriptor
2012/07/05 18:20:40| squid_kerb_ldap: Error during initialisation of ldap connection: Bad file descriptor
2012/07/05 18:20:40| squid_kerb_ldap: User is not member of group@domain AcessoTI@NULL
ERR
O que pode estar errado? Agradeço antecipadamente
Glauco
Marcus,
ResponderExcluirComplementando o problema relatado, vi em outro tutorial que precisa instalar o pacote cyrus-sasl-ldap, contudo este pacote não existe para a minha versão do Mandriva 2010.2. A informação que tenho é que este pacote ficou obsoleto. No meu linux o serviço de Kerberos não está rodando, está apenas instalado e alterei o arquivo krb5.conf conforme seu tutorial.
Será que posso compilar o pacote squid_kerb_ldap sem utilizar o SASL/GSSAPI?
Agradeço antecipadamente
Glauco
Marcus,
ResponderExcluirConsegui resolver o problema do SASL/GSSAPI. Instalei o pacote libsasl2.
Agora meu problema é que sempre retorna ERR. Não acha o usuário que está no grupo especificado.
Estrutura do meu AD:
UO - Internet
Grupo - AcessoTI com usuários do AD
Executo o teste com o comando abaixo e sempre retorna ERR.
**PRIMEIRA PARTE do ERRO**
[root@ggssf_g3 squid]# squid_kerb_ldap -d -i -g AcessoTI@g3.local -N proxyuser.g3.local@G3.LOCAL -D G3.LOCAL -S michigan.g3.local@g3.local -u demo -p demo 2012/07/06 09:43:02| squid_kerb_ldap: Starting version 1.2.2
2012/07/06 09:43:02| squid_kerb_ldap: Group list AcessoTI@g3.local
2012/07/06 09:43:02| squid_kerb_ldap: Group AcessoTI Domain g3.local
2012/07/06 09:43:02| squid_kerb_ldap: Netbios list proxyuser.g3.local@G3.LOCAL
2012/07/06 09:43:02| squid_kerb_ldap: Netbios name proxyuser.g3.local Domain G3.LOCAL
2012/07/06 09:43:02| squid_kerb_ldap: ldap server list michigan.g3.local@g3.local
2012/07/06 09:43:02| squid_kerb_ldap: ldap server michigan.g3.local Domain g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Got User: set default domain: G3.LOCAL
2012/07/06 09:43:03| squid_kerb_ldap: Got User: Domain: G3.LOCAL
2012/07/06 09:43:03| squid_kerb_ldap: User domain loop: group@domain AcessoTI@g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Found group@domain AcessoTI@g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Setup Kerberos credential cache
2012/07/06 09:43:03| squid_kerb_ldap: Get default keytab file name
2012/07/06 09:43:03| squid_kerb_ldap: Got default keytab file name /etc/krb5.keytab
2012/07/06 09:43:03| squid_kerb_ldap: Get principal name from keytab /etc/krb5.keytab
Agradeço antecipadamente.
Glauco
Marcus,
ResponderExcluirQuebrei a mensagem em duas devido ao limite de caracteres.
** SEGUNDA PARTE DO ERRO **
2012/07/06 09:43:03| squid_kerb_ldap: Keytab entry has realm name: G3.LOCAL
2012/07/06 09:43:03| squid_kerb_ldap: Found principal name: HTTP/saci.g3.local@G3.LOCAL
2012/07/06 09:43:03| squid_kerb_ldap: Set credential cache to MEMORY:squid_ldap_28437
2012/07/06 09:43:03| squid_kerb_ldap: Got principal name HTTP/saci.g3.local@G3.LOCAL
2012/07/06 09:43:03| squid_kerb_ldap: Stored credentials
2012/07/06 09:43:03| squid_kerb_ldap: Initialise ldap connection
2012/07/06 09:43:03| squid_kerb_ldap: Canonicalise ldap server name for domain G3.LOCAL
2012/07/06 09:43:03| squid_kerb_ldap: Ldap server loop: lserver@domain michigan.g3.local@g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Found lserver@domain michigan.g3.local@g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Resolved address 1 of G3.LOCAL to michigan.g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Resolved address 2 of G3.LOCAL to michigan.g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Resolved address 3 of G3.LOCAL to michigan.g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Adding G3.LOCAL to list
2012/07/06 09:43:03| squid_kerb_ldap: Sorted ldap server names for domain G3.LOCAL:
2012/07/06 09:43:03| squid_kerb_ldap: Host: michigan.g3.local Port: -1 Priority: -1 Weight: -1
2012/07/06 09:43:03| squid_kerb_ldap: Host: G3.LOCAL Port: -1 Priority: -2 Weight: -2
2012/07/06 09:43:03| squid_kerb_ldap: Setting up connection to ldap server michigan.g3.local:389
2012/07/06 09:43:03| squid_kerb_ldap: Bind to ldap server with SASL/GSSAPI
2012/07/06 09:43:03| squid_kerb_ldap: Successfully initialised connection to ldap server michigan.g3.local:389
2012/07/06 09:43:03| squid_kerb_ldap: Search ldap server with bind path "" and filter: (objectclass=*)
2012/07/06 09:43:03| squid_kerb_ldap: Search ldap entries for attribute : schemaNamingContext
2012/07/06 09:43:03| squid_kerb_ldap: 1 ldap entry found with attribute : schemaNamingContext
2012/07/06 09:43:03| squid_kerb_ldap: Search ldap server with bind path CN=Schema,CN=Configuration,DC=g3,DC=local and filter: (ldapdisplayname=samaccountname)
2012/07/06 09:43:03| squid_kerb_ldap: Found 1 ldap entry
2012/07/06 09:43:03| squid_kerb_ldap: Determined ldap server as an Active Directory server
2012/07/06 09:43:03| squid_kerb_ldap: Search ldap server with bind path dc=G3,dc=LOCAL and filter : (samaccountname=)
2012/07/06 09:43:03| squid_kerb_ldap: Found 0 ldap entries
2012/07/06 09:43:03| squid_kerb_ldap: User is not member of group@domain AcessoTI@g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Default domain loop: group@domain AcessoTI@g3.local
2012/07/06 09:43:03| squid_kerb_ldap: Default group loop: group@domain AcessoTI@g3.local
ERR
2012/07/06 09:43:03| squid_kerb_ldap: ERR
Glauco
Marcus,
ResponderExcluirDescobri que o squid_kerb_ldap está funcionando normalmente. Eu que não estava digitando o nome do usuário para ele buscar no grupo AcessoTI do AD.
Agora meu problema é no squid. Recompilei conforme sua orientação porém não está funcionando.
Como este módulo utiliza o krb5.conf e o arquivo .keytab então acredito que o problema possa estar no módulo squid_kerb_auth que é o que pega o login do windows e passa para o squid_kerb_ldap. Verifiquei que na pasta /usr/lib/squid tem um módulo chamado squid_kerb_auth_test. Estou tentando entender como testar este módulo fora do squid.
Caso você tenha alguma sugestão para o meu problema, agradeço antecipadamente.
Glauco
Marcus,
ResponderExcluirSó consegui gerar o arquivo keytab no windows com os parâmetros abaixo.
ktpass -princ HTTP/saci.g3.local@G3.LOCAL -mapuser proxyuser@g3.local -crypto All -mapop set -pass minha_senha -ptype KRB5_NT_PRINCIPAL -out proxyuser.keytab
Isto pode estar influenciando?
O Kerberos está instalado com seus arquivos de configuração porém não tem nenhum serviço dele rodando no linux. Também não tem SAMBA e nem adicionei o servidor linux no domínio.
Quando executo pelo prompt do linux o comando squid_kerb_auth -S HTTP/saci.g3.local@G3.LOCAL ele pede alguma entrada que ainda não sei o que é.
Grato!
Glauco
Marcus,
ResponderExcluirMeu servidor é o windows 2008 std 32bits (Português)
Quando gero o arquivo keytab com os parâmetros que você recomenda aparece a seguinte mensagem:
- Comando:
c:\> ktpass -princ HTTP/saci.g3.local@G3.LOCAL -mapuser g3.local\proxyuser -crypto All -mapop set -pass ggssf7 -ptype KRB5_NT_SRV_HST -out proxyuser.key
- Mensagem de erro:
Cannot DsCrackNames : 0x57
ktpass: failed getting target domain for specified user
- Meu arquivo krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
ticket_lifetime = 24000
default_realm = G3.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
forwardable = true
; 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
[realms]
G3.LOCAL = {
kdc = michigan.g3.local
admin_server = michigan.g3.local
default_domain = g3.local
}
[domain_realm]
.g3.local = G3.LOCAL
g3.local = G3.LOCAL
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
login = {
krb4_convert = false
krb4_get_ticket = false
}
Grato
Glauco
glaucojr@g3comercial.com.br
Marcus,
ResponderExcluirOutra informação é que na compilação do squid tive problemas com os parâmetros --enable-epoll e --disable poll que pelo que li no site do projeto squid está em desuso desde a versão 2.??. E tive também problemas com a compilação do parâmetro --enable-basic-auth-helpers com as opções "PAM" e --enable-external-acl-helpers "session". Só consegui compilar sem elas. Confesso que fiquei na dúvida em relação ao parâmetro PAM, as demais acredito pelo que pesquisei que não tem influência na utilização do Kerberos.
Este problema de compilação tem ocorrido em muitas versões do squid com muitos usuários.
Utilizo o Mandriva 2010.2 com kernel versão 2.6.33.7.
O squid que veio na minha distribuição já tinha o parâmetro enable-negotiate-auth-helpers=squid_kerb_auth.
O que não tinha é o --enable-stacktraces. Preciso deste segundo parâmetro mesmo?
Aguardo um retorno breve.
Obrigado.
Glauco
Marcus,
ResponderExcluirMais uma informação.
Utilizei o kinit para fazer teste do kerberos no meu linux. Segue o que obtive.
[root@ggssf_g3 squid]# kinit
Password for administrador@G3.LOCAL:
[root@ggssf_g3 squid]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrador@G3.LOCAL
Valid starting Expires Service principal
07/10/12 08:14:49 07/10/12 14:54:49 krbtgt/G3.LOCAL@G3.LOCAL
[root@ggssf_g3 squid]# klist -f
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrador@G3.LOCAL
Valid starting Expires Service principal
07/10/12 08:14:49 07/10/12 14:54:49 krbtgt/G3.LOCAL@G3.LOCAL
Flags: FIA
Posso concluir que o kerberos está ok?
Também coloquei o meu arquivo proxyuer.keytab em etc com o nome krb5.keytab
Glauco
Prezado Marcus,
ResponderExcluirBom dia!
Talvez você possa me ajudar.
Estamos tendo sérios problemas de performance com essa solução adotada, principalmente quando o cliente é o Windows 7.
Nosso SO é o Red Hat EL 6.3 + win 2008 R2.
Você tem alguma dica em relação a este problema?
Desde já, MUITO obrigado!
Att.,
Fabiano
Alguem Pode Me ajuda Nao Entendi Algumas regras do Blog sobre a autenticação SOu novo No linux mas ja tentei quase Tudo ldap_auth NT_auth etc... se alguem Puder me add skype ( fomezero5 ) ou Msn f0mezero@hotmail.com Obrigado
ResponderExcluirPrezado Marcus,
ResponderExcluirExecutei o comando conforme esta no blog:
ktpass -princ HTTP/proxy.srv2008.com.br@SRV2008.COM.BR -mapuser srv2008.com.br\squid -crypto All -mapop set -pass pass@123 -ptype KRB5_NT_SRV_HST -out c:\squid.keytab
Mas eu obtive a seguinte mensagem de erro:
ktpass:failed getting target domain for specified user.
Após ler os posts vi que outro usuário teve o mesmo problema e você pediu para colocar o domínio netbios (srv2008\squid), a key foi gerada, porém o windows retornou uma mensagem de aviso:
WARNING: pType and account type do not match. This might cause problems.
Tem algum problema esta mensagem?????
meu e-mail é:
Excluirrodrigo.ultrazone@gmail.com