
Era uma vez uma bela e quente selva virtual na América do Sul, e um servidor Squid morava lá. aqui está uma imagem perceptiva da rede:
<the Internet>
|
|
A | B
Users <---------> [squid-Server] <---> [LDAP-Server]
Ao Users
solicitar acesso à Internet, squid
pergunte seu nome e passaporte, autentique-os LDAP
e se o ldap os aprovar, ele os concedeu.
Todos ficaram felizes até que alguns farejadores roubaram o passaporte no caminho entre os usuários e o squid [caminho A]. Este desastre aconteceu porque a lula usou Basic-Authentication
o método.
O povo da selva se reuniu para resolver o problema. Alguns coelhinhos ofereceram uso NTLM
do método. Cobras preferidas Digest-Authentication
enquanto Kerberos
recomendadas por árvores.
Afinal, muitas soluções foram oferecidas por pessoas da selva e tudo ficou confuso! O Leão decidiu acabar com a situação. Ele gritou as regras para soluções:
- A solução será segura!
- A solução deve funcionar para a maioria dos navegadores e softwares (por exemplo, download de softwares)?
- A solução será simples e não precisará de outro subsistema enorme (como o servidor Samba)
- O método não dependerá de domínio especial. (por exemplo, Active Directory)
Então, uma solução muito razoável, abrangente e inteligente oferecida por um macaco, tornando-o o novo rei da selva!
você consegue adivinhar qual foi a solução?
Dica:
O caminho entre squid
e LDAP
é protegido pelo leão, então a solução não é protegê-lo.
Observação:desculpe se a história é chata e confusa, mas a maior parte é real! =)
/~\/~\/~\ /\~/~\/~\/~\/~\ ((/~\/~\/~\/~\/~\)) (/~\/~\/~\/~\/~\/~\/~\) (//// ~ ~ \\\\) (\\\\( (0) (0) )////) (\\\\( __\-/__ )////) (\\\( /-\ )///) (\\\( (""""") )///) (\\\( \^^^/ )///) (\\\( )///) (\/~\/~\/~\/) ** (\/~\/~\/) *####* | | **** /| | | |\ \\ _/ | | | | \_ _________// Thanks! (,,)(,,)_(,,)(,,)--------'
Atualizar:
Massimoexplicou que o método de autenticação entre Users
- squid
e squid
- LDAP
não precisa ser o mesmo. podemos usar o método arbitrário para obter informações de autenticação dos usuários e o método arbitrário para autenticar os dados coletados.
Mas há um problema: a entrada/saída de todos os tipos de autenticadores não é a mesma. Por exemplo:
- um
Basic
autenticador deve ler o par "senha do nome de usuário" em uma linha e responderOK
se a senha do usuário estiver correta ouERR
- um
Digest
autenticador deve ler ausername:realm
e responder um código hexadecimal deHA(A1)
ou umERR
.
Embora não exista uma relação direta entre o método cliente-squid e o método squid-ldap, os dados coletados do cliente devem ser compatíveis com o método usado na parte squid-ldap. Portanto, se alterarmos o método de autenticação do lado do usuário, talvez devêssemos alterar nosso autenticador também.
Então o problema se simplifica para:
No primeiro nível, eu (o macaco!) Estou procurando um bom método de autenticação no lado do usuário. Qual método você recomenda qualé seguro e compatível com a maioria dos navegadores? estou confuso entre
NTLM
e .Kerberos
Digest
Onde posso encontrar um autenticador que suporte informações de credenciais do método selecionado e autentique por meio de LDAP.
Responder1
Kerberos não é uma opção para autenticação HTTP. NTLM não é bem suportado em nenhum navegador diferente do IE. O Basic não é seguro, a menos que você o coloque atrás de HTTPS, o que o AFAIK squid não pode fazer. Então você fica com o Digest.
Responder2
Um recurso interessante que pode ajudá-lo aqui é que o método que o Squid usa para solicitar autenticação ao navegador do cliente (caminho A) não precisa estar relacionado ao método que ele usa para realmente validar as credenciais fornecidas pelo usuário (caminho B ). Isso significa, por exemplo, que você pode fazer o Squid "falar" NTLM com navegadores clientes, mas ele poderia muito bem validar usuários no banco de dados interno de usuários do Linux (/etc/passwd). Hánãonecessidade de credenciais adquiridas usando NTLM (no caminho A) para serem realmente validadas em um domínio do Windows (no caminho B). O mesmo se aplica a qualquer combinação possível de métodos de autenticação do lado do cliente e métodos de autenticação do lado do servidor.
O que isso significa no seu caso é que você pode configurar com segurança o Squid para solicitar autenticação NTLM dos navegadores do cliente em vez da autenticação básica, e isso não exigirá de forma alguma que você realmente use Samba/WinBind/AD/qualquer coisa.
Assim, você pode escolher qualquer método desejado para autenticação do lado do cliente e ainda assim continuar validando os usuários em um servidor LDAP depois que eles fornecerem suas credenciais usando o método selecionado.
A mágica acontece, claro, em squid.conf
:
#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
Cada auth_param
diretiva permite uma autenticação específicapara navegadores clientes(caminho A), enquanto a parte "programa" define o que o Squid realmente usará para validar as credenciais fornecidas pelos usuários. Você pode usar qualquer programa autenticador que desejar aqui (mesmo um personalizado), desde que receba um ID de usuário e uma senha e responda "sim" ou "não".
Você só precisa pegar qualquer autenticador que estiver usando para fazer sua consulta LDAP e inseri-lo nas instruções "auth_param ntlm" ou "auth_param digest", em vez do "auth_param basic" onde está agora.
Atualizar:
Você definitivamente deveria usarsquid_ldap_authcomo seu autenticador, mas não posso dizer exatamentecomosem nenhum detalhe sobre o servidor LDAP específico que você está usando.
Com relação à autenticação do lado do cliente, qualquer uma deveria ser boa; Estou muito feliz com o NTLM e a maioria dos navegadores o suporta hoje em dia.
Tal configuração ficaria assim no squid.conf:
auth_param ntlm program /usr/lib/squid/squid_ldap_auth <parameters>
Isso solicitará credenciais do usuário (caminho A) usando NTLM e, em seguida, validará-as em um servidor LDAP (caminho B); mas esses "parâmetros" dependem estritamente da implementação e configuração do LDAP.
Isso também pode ajudar:http://www.cyberciti.biz/tips/howto-configure-squid-ldap-authentication.html.