Splunk SAML SSO de um IdP com o Apache mod_mellon falha

1

Estou tentando configurar o SSO de um IdP para o Apache com o mod_mellon e mod proxy para splunk.

Ambiente: Ubuntu 14.04; Apache 2.4.7; mod-auth-mellon 0.7.0.

O Apache foi configurado com a chave / certificado gerada pelo mellon no site ssl padrão. O mod proxy está sendo usado para fazer o proxy do splunk localmente na porta 8000.

auth_mellon.conf :

MellonCacheSize 100
MellonLockFile "/var/lock/mod_auth_mellon.lock"
MellonPostDirectory "/var/cache/apache2/mod_auth_mellon/"

ProxyRequests Off
ProxyPass /secret/ !
ProxyPassInterpolateEnv On
<Location />
        MellonEnable "info"
        Require valid-user
        AuthType "Mellon"
        MellonVariable "cookie"
        MellonSamlResponseDump On
        MellonSPPrivateKeyFile /etc/apache2/mellon/urn_splunk.key
        MellonSPCertFile /etc/apache2/mellon/urn_splunk.cert
        MellonSPMetadataFile /etc/apache2/mellon/urn_splunk.xml
        MellonIdpMetadataFile /etc/apache2/mellon/idp-meta.xml
        MellonEndpointPath /secret/endpoint
        MellonUser "NAME_ID"
        MellonDefaultLoginPath /en-US/
        RequestHeader set SplunkWebUser %{MELLON_NAME_ID}e
        MellonSamlResponseDump On

        ProxyPass http://127.0.0.1:8000/
        ProxyPassReverse http://127.0.0.1:8000/
        ProxyPassInterpolateEnv On
</Location>

idp-meta.xml contém os metadados do IDP (incluindo os parâmetros IDP x509 cert e HTTP Post / HTTP Redirect). os arquivos urn_service.* são gerados a partir de um script mellon_create_metadata.sh que cria um certificado x509 e chave no arquivo de configuração SP e xml.

Quando tento acessar o splunk do IdP, vejo erros no arquivo de log do apache e obtenho uma resposta de erro do servidor 500 / interno:

[authz_core:debug] mod_authz_core.c(802): AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
[authz_core:debug] mod_authz_core.c(802): AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[core:error] AH00027: No authentication done but request not allowed without authentication for /secret/endpoint/login. Authentication not configured?

Parece que a autenticação SAML está falhando. Estou seguindo este guia: link

O Splunk está configurado para autenticar com o LDAP e está sendo autenticado corretamente. O apache também precisa ser configurado com autenticação ldap para identificar usuários válidos também? (não tenho certeza sobre como os usuários são autenticados no apache / mellon, assumido que é tudo tratado pelo payload do IdP e mellon apenas sabe sobre a identidade

    
por Brett 30.11.2015 / 14:55

3 respostas

2

Parece que várias coisas estavam erradas. Em primeiro lugar, não percebi que os metadados precisavam ser recopiados do meu IdP de volta para as configurações do apache quando modifiquei as configurações de SAML desse lado. De qualquer forma, depois de ter certeza que os arquivos xml do IdP e do SP foram configurados corretamente no Apache, eu pude seguir em frente (eu acho que mudei o ID da entidade)

Eu ainda estava recebendo um erro ao exigir um usuário válido nos registros de erros. Acontece que MellonEnable "auth" cuida de garantir que haja um usuário válido, enquanto, por algum motivo, os parâmetros Require valid-user e AuthType "Mellon" estavam acionando erros e 500 respostas do servidor.

Depois de remover essas duas diretivas, eu ainda estava recebendo erros, desta vez Could not find metadata for the IdP "(null)" - após uma pesquisa rápida, descobriu-se que a versão mais recente do lasso disponível no Ubuntu 14.04 LTS (2.4.0) não funciona as assinaturas SHA256 às quais o IdP foi padronizado. Suporte 2.5 de Lasso SHA256. Depois de atualizar a configuração do IdP com um algoritmo compatível, a identificação estava ocorrendo corretamente.

No entanto, fui confrontado com loops de redirecionamento devido ao contexto. Eu encontrei outro post que sugeriu mover a raiz da web do splunk para um contexto /splunk em vez de na raiz ( / ), e atualizando isso, agora sou capaz de autenticar no Splunk via mellon a partir do IdP. Aqui estão as configurações de trabalho relevantes:

MellonLockFile "/var/lock/mod_auth_mellon.lock"
MellonPostDirectory "/var/cache/apache2/mod_auth_mellon/"

ProxyRequests Off
ProxyPassInterpolateEnv On
# Move the proxy directives out of <location> and specify the context / mapping
ProxyPass /splunk http://127.0.0.1:8000/splunk
ProxyPassReverse /splunk http://127.0.0.1:8000/splunk

<Location />
        MellonEnable "info"
        MellonVariable "cookie"
        MellonSamlResponseDump On
        MellonSPPrivateKeyFile /etc/apache2/mellon/urn_splunkweb.key
        MellonSPCertFile /etc/apache2/mellon/urn_splunkweb.cert
        MellonSPMetadataFile /etc/apache2/mellon/urn_splunkweb.xml
        MellonIdpMetadataFile /etc/apache2/mellon/idp-metadata.xml
        MellonEndpointPath /secret/endpoint
        MellonUser "NAME_ID"
        MellonDefaultLoginPath /splunk/en-US/
        RequestHeader set SplunkWebUser %{MELLON_NAME_ID}e
        ProxyPassInterpolateEnv On
</Location>
<Location /splunk/>
        # Forces /splunk requests to be authenticated via the IdP.
        MellonEnable "auth"
</Location>

$ SPLUNK_HOME / etc / system / local / web.conf:

[settings]
trustedIP=127.0.0.1
remoteUser SplunkWebUser
SSOMode=permissive
root_endpoint = /splunk

E $ SPLUNK_HOME / etc / system / local / server.conf

[general]
trustedIP=127.0.0.1

Isso é obviamente para uma configuração em que o servidor apache / mellon é executado no mesmo host que o splunk. web.conf (splunk) e auth_mellon.conf (apache) precisam ser atualizados com IPs remotos, se não. web.conf suporta uma lista separada por vírgulas de hosts confiáveis, enquanto server.conf não e deve permanecer como host local.

    
por 01.12.2015 / 14:52
1

Prepare uma página da Web de depuração com o seguinte:

<?php
header('Content-Type: text/plain');

foreach($_SERVER as $key=>$value) {
  if(substr($key, 0, 7) == 'MELLON_') {
    echo($key . '=' . $value . "\r\n");
  }
}
?>

Você pode verificar se o users'id está no

  MellonUser "NAME_ID"

NAME_ID attribute? Parece suspeito para mim. Geralmente é uid ou similar. Na fase de teste você poderia mudar para qualquer atributo que você conhece os lançamentos do IdP (mail, cn ... o que for) apenas para evitar o problema do 500.

    
por 01.12.2015 / 12:44
0

Mais provavelmente, o IDP não está configurado corretamente com o LDAP & não há necessidade de configuração extra para o Mellon / Apache.

Se você puder postar o dump da resposta SAML, isso ajudará a detalhar ainda mais o problema.

Por favor, deixe-me saber se você quer discutir mais.

Obrigado Sandy E- [email protected]

    
por 01.12.2015 / 14:35