Logo Hardware.com.br
The Pretender
The Pretende... Zumbi Registrado
8.5K Mensagens 82 Curtidas

Autenticação automática do Squid/Samba

#1 Por The Pretende... 01/07/2009 - 10:14
Pessoal.

Seguinte, estou a cata de uma forma de autenticação automatica do squid com o samba.

Tem-se um PDC no samba, os usuários logam no domínio, e gostaria que o squid efetua-se a consulta no samba, se o usuário esta ou não logado, e libera-se a internet para ele (é claro que com as regras contidas na conf.) com base nisso, sem a necessidade de pedir usuário e senha no Brownser novamente.

Para entender melhor.

O usuário loga com seu usuário no samba, e este mesmo usuário é utilizado no squid, a ideia é que o squid não solicite novamente o usuário e senha (já que o mesmo foi fornecido ao Samba).

Andei fazendo uma pesquisa onde fala-se em utilizar o PAM para isso:


http://www.pollon.org/download2/squid.txt
http://www.vivaolinux.com.br/topico/Squid-Iptables/Autenticacao-automatica-com-AD-e-Squid-2.6/

No segundo link, o cara fez com um AD, e parece ter funcionado. Mas nçao entendi bem, pelo visto o winbind é quem consula as informações. Mas como o Squid recebe o usuário e senha para autenticar? Ou isto não ocorre? Se o cara estiver logado no Samba, o squid vai solicitar senha através do Brownser neste modo ou não? Onde configuro o domínio que será consultado (no winbid)???




PS: Alguém sabe o que é o parâmetro "-n" passado ao "pam_auth"?

[editado, errei, era no segundo link que o cara testou com winbind]

Falow!!!!!!!!!!!!!!!!!!!!!!
Responder
arthas_dk
arthas_dk Super Participante Registrado
871 Mensagens 29 Curtidas
#2 Por arthas_dk
01/07/2009 - 11:36
Ola the pretender, tudo bom???

Vou tentar colocar os passos aqui, se precisar de ajuda em relação a algum deles poste aqui no forum.

Bem o squid precisa então fazer a autenticação automática em um samba pdc correto?

1) A autenticação automática para os usuários do windows só vai funcionar com o Internet Explorer, de modo que quando a pessoa logar no computador automaticamente ela já navega com usuário e senha dela;

2) No firefox é necessário configurar para usar proxy, mas todas as vezes que for fechado e aberto irá pedir a senha (a única maneira de não pedir a senha seria colocando um servidor kerberos + samba + winbind + squid mas isto é por demais complicado o tutorial tem quase 70 pgs e requer conhecimentos aprofundados de todos os topicos).

Dito isso, vamos aos requisitos para contemplar o item 1:

Pacotes necessários: samba, winbind, squid, smbclient (este ultimo para testes).



SAMBA

O próprio PDC precisa estar dentro do dominio que ele representa (exatamente porque ele vai precisar pesquisar os usuários e grupos do domínio). Para isto crie uma conta para o computador que é o pdc (por exemplo se o nome do servidor é "pdcserver" então crie esta conta, se tiver alguma dúvida consulte o livro "Servidores Linux, guia prático" on Line para ver como se cria uma conta para o computador).

Em seguida coloque esta máquina dentro do domínio com o comando:

net rpc join pdc --ipaddress=IPDOSERVIDORPDC -Uroot


Se aparecer:

Sucessfuly joined domain NOMEDODOMINIO.

é pq deu certo.

Se não verifique se você criou a conta para o computador corretamente.



WINBIND

Com isto feito reinicie agora o winbind. Vou assumir que você está usando uma distribuição debian então o comando para reiniciar o winbind é:

/etc/init.d/winbind restart

Se estiver usando outro vá até a pasta init.d e veja qual o nome do winbind na sua distribuição.

Vamos testar agora para ver se o winbind está conseguindo ver os usuários e grupos do servidor:

wbinfo -g (retornar lista dos grupos)
wbinfo -u (retorna os usuarios)
wbinfo -t (checa se as chamadas rpc estão funcionando).

Se tudo tiver correndo bem até aqui é hora de fazer as configurações finais para o squid encontrar os usuários e grupos do samba e fazer com que os usuários de windows não precisem ficar colocando a senha no IE a cada vez que o mesmo é aberto.

No arquivo smb.conf (arquivo principal do samba) veja se os seguintes parametros estão no arquivo (se não tiver adicione):

winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users =yes
winbind enum groups = yes
winbind use default domain = yes

VOcê está vendo esta ultima linha? (winbind use default domain) ela diz para o winbind utilizar o mesmo servidor que o samba está utilizando, como nosso samba é um PDC o domínio já é o padrão!!!

Adicione também o usuário do squid ao grupo do winbind para que o squid tenha as permissões necessárias para visualizar usuários do domínio:

adduser proxy winbindd_privileged

(verifique qual é o usuario do squid e também qual é o grupo winbind na sua distribuição pois pode ser diferenciado entre distribuições).

Reinicie o samba e o winbind.

NTLM_AUTH
Para o squid nós vamos testar primeiro um mecanismo de autenticação chamado "ntlm_auth". Na verdade o NTLM_AUTH faz parte do samba: ele é um mecanismo de autenticação que a própria equipe do samba fez para que outras aplicações pudessem utilizar a autenticação do samba de forma rápida e simples, já que o trabalho de autenticação não fica na aplicação e sim no ntlm auth.

Normalmente esse programa fica em /usr/bin, mas isso pode depender da distribuição ou se vc compilou o samba. Em todo caso localize-o e troca pela localidade adequada.

/usr/bin/ntlm_auth --username=USUARIO


Se der tudo certo vai aparecer:



O que quer dizer que foi possível autenticar. Podemos passar a parte final que é a do Squid.

SQUID
No squid (squid.conf) as linhas que ativam essa autenticação são as seguintes:

Cria uma regra que requer que o usuário esteja autenticado:

acl AuthorizedUsers proxy_auth REQUIRED


Esse primeiro método server para que os usuários do IE se autentiquem automaticamente:
auth_param ntlm program /usr/lib/squid3/ntlm_auth
--helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 32

Nem todos os browsers suportam ntlm então essa segunda linha faz com
que os outros browsers (konqueror, opera, etc) consigam se autenticar
também, caso contrário so usuarios com firefox e IE vão conseguir navegar frown.png

auth_param basic program /usr/lib/squid3/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 32
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
auth_param basic realm FRASE QUE APARECERA AO USUARIO NO MOMENTO DA AUTENTICACAO
Libera o acesso para os usuários autenticados.

http_access allow AuthorizedUsers

Normalmente o pessoal utiliza esta solução para integrar a um Domínio Windows, mas funciona com o samba também (desta forma que coloquei é a que utilizo para que funcione com o samba).

Tem um link no squidcache.org que também se aproxima disso:

http://www.squid-cache.org.br/index.php?option=com_content&task=view&id=95&Itemid=27

Abraços!!!
Motherboard G8-IRX (Intel ICH2)
Processador Intel Pentium 4 1.70 GHZ
2GB RAM SAMSUNG DDR 4266
SAMSUNG 20GB
2 x SAMSUNG 40GB
GRAVADORA DE DVD LG H-20N
Geforce FX 5500, 256 MB AGP

SO:

Debian Lenny + Kernel 2.6.25-rt8 | Slackware 12 +Kernel 2.6.25-rt8
The Pretender
The Pretende... Zumbi Registrado
8.5K Mensagens 82 Curtidas
#3 Por The Pretende...
01/07/2009 - 11:54
Humm

Vou ver se consigo testar big_green.png

Pelo que pude ver todos os aplicativos e "modulos" necessários ja encontram-se compilados no servidor em questão smile.png

Vou ver se consigo realizar algum teste.


editado..

Esqueci-me, o servidor já esta rodando um squid que consulta o samba através do smb_auth. Este, por sua vez consulta um samba em outra máquina (que é o PDC), no caso eu devo configurar o samba local, para autenticar no outro dominio, certo, alterando o security para "domain", correto?




Falow!!!!!!!!!!!!!!!!!!!!!!
-->Blog Pessoal - Um pianista "desajeitado" <--
-->Eletrônica no YouTube - Bobsien P&D <--


- Sound Blaster Live 5.1! Digital e 3DFX Voodoo 4 4500PCI - Minhas relíquias!
The Pretender
The Pretende... Zumbi Registrado
8.5K Mensagens 82 Curtidas
#4 Por The Pretende...
02/07/2009 - 16:54
Upa..

Feito, implementei como manda o figurino.

Todos os testes foram ok, mas o Squid não sobe, e estou com estes logs no cache.log


You MUST specify at least one Domain Controller.
You can use either \ or / as separator between the domain name
and the controller name
(ntlm_auth): invalid option -- -
unknown option: -?. Exiting
(ntlm_auth) usage:
(ntlm_auth) [-b] [-f] [-d] [-l] domain\controller [domain\controller ...]
-b enables load-balancing among controllers
-f enables failover among controllers (DEPRECATED and always active)
-l changes behavior on domain controller failyures to last-ditch.
-d enables debugging statements if DEBUG was defined at build-time.


Alguma dica?





Falow!!!!!!!!!!!!!!!!!!!!!!!!!
-->Blog Pessoal - Um pianista "desajeitado" <--
-->Eletrônica no YouTube - Bobsien P&D <--


- Sound Blaster Live 5.1! Digital e 3DFX Voodoo 4 4500PCI - Minhas relíquias!
The Pretender
The Pretende... Zumbi Registrado
8.5K Mensagens 82 Curtidas
#5 Por The Pretende...
03/07/2009 - 16:27
Resolvido o problema.

auth_param basic program /usr/lib/squid3/ntlm_auth DOMINIO\pdc --helper-protocol=squid-2.5-basic


Apenas faltou o que estava em negrito smile.png

Para testar o server wins

nbmlookup pdc

Deve retornar um OK e o numero IP do servidor..

Funcionou que é uma maravilha, o Firefox também conseguiu autenticar automaticamente big_green.png

E foi confirmado, pois testamos com várias contas distintas, que possuem bloqueios diferentes e tudo funcionou numa boa.


Valeu pela dica.




Falow!!!!!!!!!!!!!!!!!!!!!!!!!!
-->Blog Pessoal - Um pianista "desajeitado" <--
-->Eletrônica no YouTube - Bobsien P&D <--


- Sound Blaster Live 5.1! Digital e 3DFX Voodoo 4 4500PCI - Minhas relíquias!
The Pretender
The Pretende... Zumbi Registrado
8.5K Mensagens 82 Curtidas
#6 Por The Pretende...
07/07/2009 - 09:57
Opa.. smile.png

Cara, podes me dar uma ajudinha aqui?

Estou tentando fazer o mesmo, desta vez com um AD..

Bom, efetuei tudo como manda o figurino, compilei o Squid (tulizando Slackbuild) com as opções abaixo:


./configure \
--prefix=/usr \
--sysconfdir=/etc/squid \
--mandir=/usr/man \
--libexecdir=/usr/libexec/squid \
--datadir=/usr/share/squid \
--localstatedir=/var \
--enable-ssl \
--with-openssl=/usr \
--with-pthreads \
--enable-delay-pools \
--enable-linux-netfilter \
--enable-follow-x-forwarded-for \
--enable-auth="ntlm basic digest" \
--enable-external-acl-helpers="wbinfo_group ip_user unix_group" \
--enable-basic-auth-helpers="getpwnam NCSA PAM SMB" \
--enable-ntlm-auth-helpers="SMB no_check fakeauth" \
--enable-digest-auth-helpers="password" \
--enable-ntlm-fail-open \
--program-prefix= \
--program-suffix=
Instalei o Samba com Winbind, fiz a configuração do mesmo:


[global]
workgroup = DOMINIO
os level = 2
server string = PROXY
netbios name = PROXY
socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY
#socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
encrypt passwords = no
log file = /var/log/samba/%m.log
max log size = 50
security = domain
password server = PDC
wins server = PDC
dns proxy = no
winbind separator = "+"
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users =yes
winbind enum groups = yes
template homedir = /dev/null
template shell = /dev/null
winbind use default domain = yes
interfaces = 192.168.0.1
Iniciei o winbind

/usr/sbin/winbindd

Entrei no dominio

net rpc join -S pdc -W DOMINIO -U squid%senha

Sendo que o usuário squid é um usuário com permissão para consultar a base de usuário e ingressar no domínio.

Ao dar um wbinfo -g/-u/-t ele retorna tudo com sucesso

Ao rodar o /usr/bin/ntlm_auth --username=user

Ele autentica numa boa, retornando o "OK"

Adicionei as linahs no squid.conf para a autenticação e ele subiu numa boa, porém a autenticação não obtém sucesso.

No cache.log está tudo normal (nenhum erro, apenas as msgs normais de start do Squid).

No access.log, aparece o seguinte:


192.168.0.10 - - [07/Jul/2009:09:54:05 -0300] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 407 1763 TCP_DENIED:NONE
192.168.0.10 - - [07/Jul/2009:09:54:05 -0300] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 407 2017 TCP_DENIED:NONE
192.168.0.10 - user [07/Jul/2009:09:54:05 -0300] "GET http://www.microsoft.com/isapi/redir.dll? HTTP/1.1" 407 3138 TCP_MISSbig_green.pngEFAULT_PARENT
Ele pede usuário e senha, mas pelo que percebo, ele o pede pois de alguma forma não consegue autenticar..

Se eu coloco usuário e senha inválido, por exemplo, ele me lista o seguinte, TCP_DENIED.

Alguma dica para resolver isso?

Algo que notei, pé que o nmblookup não consegue encontrar os nomes dos computadores pelo WinsServer, bem como tem alguns erros do nmbd/snmbd nos logs, avisando que não foi possível encontrar o PDC da rede e etc...
Só não entendo como isso, se o wbinfo consegue listar os usuários.

EDITADO

Segue o log do Samba


Jul 7 09:03:17 tc nmbd[12285]: [2009/07/07 09:03:17, 0] nmbd/nmbd_browsesync.c:find_domain_master_name_query_fail(350)
Jul 7 09:03:17 tc nmbd[12285]: find_domain_master_name_query_fail:
Jul 7 09:03:17 tc nmbd[12285]: Unable to find the Domain Master Browser name DOMINIO<1b> for the workgroup DOMINIO.
Jul 7 09:03:17 tc nmbd[12285]: Unable to sync browse lists in this workgroup.





Falow!!!!!!!!!!!!!!!!!!!!!!!!!!!
-->Blog Pessoal - Um pianista "desajeitado" <--
-->Eletrônica no YouTube - Bobsien P&D <--


- Sound Blaster Live 5.1! Digital e 3DFX Voodoo 4 4500PCI - Minhas relíquias!
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal