Redirecione usuários com Apache e LDAP

Redirecione usuários com Apache e LDAP

no trabalho, estamos tendo o problema de querer redirecionar os usuários dependendo se eles são membros de um determinado grupo LDAP, quando acessam uma URL gerenciada via Apache2.

Existem três casos:

  • O usuário fornece credenciais válidas e é membro do grupo LDAP => redireciona para o aplicativo ABC (funciona)
  • O usuário fornece credenciais válidas, mas não é membro do grupo LDAP => redireciona para a página de manutenção (não funciona e é o problema)
  • O usuário fornece credenciais inválidas ou clica em cancelar => redirecionar para Manutenção (funciona)

Nosso problema é: Como podemos redirecionar usuários, se eles são válidos e não são membros do grupo LDAP “THE-GROUP”?

No momento, a sobreposição para inserir credenciais é exibida ad finitum, a menos que você clique em cancelar ou em um membro do “GRUPO”.

Nosso aplicativo ABC está hospedado em nossas instalações, rodando em Ubuntu. Nosso proxy reverso é o Apache 2.4.18-2ubuntu3.10 rodando no Ubuntu 16.04. Os clientes usarão uma ampla variedade de navegadores e sistemas operacionais de todo o mundo, portanto, a filtragem por IP não é uma opção. O proxy reverso está localizado em nossa DMZ e o App-Server está localizado fora. Foi criada uma regra NAT, para que ambos os sistemas possam se comunicar via 8080 (a porta onde o ABC está rodando).

Nossa configuração (de teste) fica assim:

<VirtualHost *:443>
    ServerName testabc.company.com

    SSLProxyEngine On
    SSLEngine On
    SSLCertificateKeyFile  /etc/ssl/private/our_company.key
    SSLCertificateFile /etc/ssl/certs/company_com/fullchain.cer


    ErrorLog ${APACHE_LOG_DIR}/LDAP_test_error.log
    CustomLog ${APACHE_LOG_DIR}/LDAP_test_access.log combined

    # error document shown to unauthorized users
    DocumentRoot /var/www/Maintenance_Page
    ErrorDocument 401 /TTT/index.html

        <Location />
            ProxyPass http://internal-vm-name:8080/
            ProxyPassReverse http://internal-vm-name:8080/
        </Location>

    # the following block applies to all proxied content
    <Proxy "*">
        AuthType Basic
        AuthBasicProvider ldap
        AuthUserFile /dev/null
        AuthName "Auth with our LDAP Server"

        # configuration of the mod_authnz_ldap module
        AuthLDAPURL "ldap://SOMETHING"
        AuthLDAPBindDN "FOO,BAR "
        AuthLDAPBindPassword "FOOBAR"

        # Only users belonging to group THE-GROUP can access ABC,
        # all others will see the error document specified above.
        Require ldap-group CN=THE-GROUP,OU=Company,DC=ad,DC=Company,DC=com
    </Proxy>
</VirtualHost>

# virtual host required to access images and style-sheets from the error document
<VirtualHost *:80>
    ServerName maintenance.company.com
    DocumentRoot /var/www/Maintenance_Page

    ErrorLog ${APACHE_LOG_DIR}/maintenance -error.log
    CustomLog ${APACHE_LOG_DIR}/maintenance.log combined
</VirtualHost>

# redirection from HTTP to HTTPS
<VirtualHost *:80>
    ServerName abc.company.com
    Redirect Permanent /  https://abc.company.com/
    Redirect /  https://abc.company.com/
</VirtualHost>

Responder1

Não existe uma boa solução para o seu problema. Você está usando HTTP Basic Auth, o que significa que o navegador está tentando abrir uma página, está obtendo um status 401 com um cabeçalho WWW-Authenticate: Basic realm="Whatever" enviado.

Nesse ponto, o navegador mostra a caixa de diálogo de autenticação e, uma vez inserido o usuário e a senha, eles são enviados ao servidor web dentro do cabeçalho de autorização.

Se o servidor rejeitar a solicitação, ele enviará novamente o status 401 com o cabeçalho WWW-Authenticate. O navegador abrirá a caixa de diálogo novamente ad infinitum. Em nenhum momento o servidor pode dizer que uma senha foi rejeitada definitivamente.

Se você estivesse usando um banco de dados com suporte mod_dbd, você poderia usar mod_rewrite para fazer uma consulta SQL para o grupo e redirecionar de acordo. Não acredito que isso seja possível com o manipulador LDAP Auth.

informação relacionada