A história da autenticação segura de usuário no squid

A história da autenticação segura de usuário no squid

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 Userssolicitar acesso à Internet, squidpergunte seu nome e passaporte, autentique-os LDAPe 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-Authenticationo método.

O povo da selva se reuniu para resolver o problema. Alguns coelhinhos ofereceram uso NTLMdo método. Cobras preferidas Digest-Authenticationenquanto Kerberosrecomendadas 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 squide 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- squide squid- LDAPnã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 Basicautenticador deve ler o par "senha do nome de usuário" em uma linha e responder OKse a senha do usuário estiver correta ouERR
  • um Digestautenticador deve ler a username:realme responder um código hexadecimal de HA(A1)ou um ERR.

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:

  1. 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 NTLMe .KerberosDigest

  2. 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_paramdiretiva 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.

informação relacionada