Autenticação "transparente" com pfsense + squid + active directory



  • Senhores,

    Seguindo um tutorial um pouco antigo sobre squid+ntlm, compilei o kerberos(heimdal) e o samba(3.6.3) para o pfsense e consegui autenticar sem popup de tela de autenticação.

    Estou agora adaptando este tutorial do site para o squid3 usando negotiate com kerberos e ldap.

    http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory

    Os pacotes necessarios no pfsense são:

    i386
    http://e-sac.siteseguro.ws/packages/8/All/samba36-3.6.3.tbz
    http://e-sac.siteseguro.ws/packages/8/All/heimdal-1.4_1.tbz

    amd64
    http://e-sac.siteseguro.ws/packages/amd64/8/All/samba36-3.6.3.tbz
    http://e-sac.siteseguro.ws/packages/amd64/8/All/heimdal-1.4_1.tbz

    Algo que já percebi é que os keytabs serão gerados no proprio ad e transferidos para o pfsense.

    Não gosto de instalar o samba no pfsense por ele ser um firewall, mas existem situações onde o cliente só tem uma maquina para isso.

    Se eu conseguir finalizar o procedimento posto aqui.
    Se alguem já conseguiu isso no pfsense, pode postar aqui tambem  😉

    att,
    Marcello Coutinho



  • Então Marcello, eu não consegui configurar isso no pfSense, minha solução para uma máquina só foi instalar o vmware no host e criar 2 máquinas virtuais, uma com pfSense e outra com o Squid no modo NTLM.

    Se conseguir fazer iso com uma máquina só vai agilizar e muito minha vida, então mais do que nunca já me disponho a ajudar como testador ou de outra maneira que você precise, compilando gerando algum script ou etc…

    Atenciosamente…



  • fneto,

    Com ntlm eu já consegui, estou tentando via negociate e keytab.

    Segui este tutorial antigo com o squid do pfsense apenas prestando atenção nas pastas.

    /etc/krb5.conf ok
    mude /var/kerberos/krb5kdc/kdc.conf para /var/heimdal/kdc.conf
    mude /var/kerberos/krb5kdc/kadm5.acl para /var/heimdal/kadm5.acl
    mude gpasswd -a proxy winbindd_priv para chgrp proxy /var/run/squid/windindd_priv…

    squid_auth_ad.pdf.txt



  • O arquivo do tutorial não está legal, não consegui abrir nem como TXT nem como PDF, aparece todo zoado!





  • Então, olá para todos, boa noite.

    Bem eu estou a procura exatamente disso, fazer o ntlm funcionar no squid do pfsense. Abri até um tópico para isso.

    Lí o arquivo abaixo, mas parece que o ambiente é diferente.

    Eu preciso instalar todos esses pacotes, mesmo na distribuição no pfSense ?

    Ou basta alterar esses arquivos ?

    Seria interessante nos ajudar, já que voce já conseguiu fazer funcionar …



  • Filipe,

    Juntando tudo em um único post, fica assim:

    Instale os pacotes no seu pfsense através da console/ssh respeitando a plataforma instalada e por garantia, copie algumas libs necessárias para gssapi e kerberos que não estão incluídas no pfsense

    i386

    
    pkg_add -r http://e-sac.siteseguro.ws/packages/8/All/samba36-3.6.3.tbz
    pkg_add -r http://e-sac.siteseguro.ws/packages/8/All/heimdal-1.4_1.tbz
    cd /usr/local/lib
    fetch http://e-sac.siteseguro.ws/pfsense/8/All/ldd/libasn1.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/All/ldd/libgssapi.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/All/ldd/libheimntlm.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/All/ldd/libhx509.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/All/ldd/libkrb5.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/All/ldd/libroken.so.10
    
    

    amd64

    pkg_add -r http://e-sac.siteseguro.ws/packages/amd64/8/All/samba36-3.6.3.tbz
    pkg_add -r http://e-sac.siteseguro.ws/packages/amd64/8/All/heimdal-1.4_1.tbz
    cd /usr/local/lib
    fetch http://e-sac.siteseguro.ws/pfsense/8/amd64/All/ldd/libasn1.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/amd64/All/ldd/libgssapi.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/amd64/All/ldd/libheimntlm.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/amd64/All/ldd/libhx509.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/amd64/All/ldd/libkrb5.so.10
    fetch http://e-sac.siteseguro.ws/pfsense/8/amd64/All/ldd/libroken.so.10
    
    

    Siga este tutorial antigo com o squid do pfsense instalado acertando os caminhos de pastas/comandos por conta da divergência entre os sistemas operacionais.

    /etc/krb5.conf está ok
    mude /var/kerberos/krb5kdc/kdc.conf para /var/heimdal/kdc.conf
    mude /var/kerberos/krb5kdc/kadm5.acl para /var/heimdal/kadm5.acl
    mude gpasswd -a proxy winbindd_priv para chgrp proxy /var/db/samba/winbindd_privileged

    Quando estiver com o pfsense no domínio e conseguindo fazer os testes via kinit/klist e wbinfo -t, acesse:

    services -> proxy server -> general settings -> custom options

    e cole estas linhas

    auth_param ntlm program /usr/local/bin/ntlm_auth --use-cached-creds --helper-protocol=squid-2.5-ntlmssp;auth_param ntlm children 30;auth_param ntlm keep_alive on;acl password proxy_auth REQUIRED;http_access allow password
    

    Agora no cliente, basta marcar o proxy no browser.

    NOTA IMPORTANTE PARA WINDOWS 7

    No windows 7 são implementadas uma série de novas politicas de segurança , uma delas inclusive barra a autenticação transparente que usamos em nossos proxys. Para resolver este problema siga este pequeno manual que orienta como dever ser feita esta liberação

    Antes de mais nada , para rodar este procedimento é necessário que você seja administrador da máquina local.
    Execute o Execute o comando “gpedit.msc” e navegue na arvore seguindo esta sequencia:

    • Diretiva computador local

    • Configurações do windows

    • Configurações de segurança

    • Diretivas locais

    • Opções de segurança

    • Segurança de rede: nível de autenticação lan manager

    • Marque a opção: enviar lm e ntlm - usar nivel de segurança NTLMv2

    att,
    Marcello Coutinho



  • Ok, muito obrigado pela atenção.  ;D

    Vou fazer os testes já agora, e posto aqui os resultados ….



  • Marcelo, o primeiro arquivo quando fui procurar, não achei …

    /etc/krb5.conf está ok

    Voce escreveu que está ok, significa que preciso criá-lo ?

    Essa parte de atentar para mudança, não entendi muito bem, quer dizer que no tutorial, onde estiver esses nomes, o caminho dos arquivos será diferente por causa da versão, mas o conteudo devemos alterar de acordo com o tutorial ?

    O arquivo smb.samba.conf tambem está aparecendo como novo.



  • @filipe.nanclarez:

    Marcelo, o primeiro arquivo quando fui procurar, não achei …

    /etc/krb5.conf está ok

    Voce escreveu que está ok, significa que preciso criá-lo ?

    Isso mesmo

    @filipe.nanclarez:

    Essa parte de atentar para mudança, não entendi muito bem, quer dizer que no tutorial, onde estiver esses nomes, o caminho dos arquivos será diferente por causa da versão, mas o conteudo devemos alterar de acordo com o tutorial ?

    certo denovo, onde voce encontrar no doc a referencia para /var/kerberos/krb5kdc/kdc.conf leia e configure como /var/heimdal/kdc.conf

    @filipe.nanclarez:

    O arquivo smb.samba.conf tambem está aparecendo como novo.

    procure o arquivo com este comando
    find / -name smb.conf
    Não estou perto da maquina agora para conferir o caminho.



  • Ok, os que não achei, fui criando segundo seu caminho, os que achei, editei conforme o tutorial. Mas antes de inserir o pf no dominio, o comando kinit está dadno “not found”.

    Seguem abaixo os conteúdos dos meus arquivos com a minhas configurações tentando seguir o tutorial.

    Estou fazendo em um ambiente virtual, antes de por em produção

    Ip do meu pdc = 192.168.15.2
    nome do meu PDC = pdc001
    OS do pdc = W2K8R2 x64
    FQDN do dominio = virtual.local
    Nome Admin = Administrator
    senha admin = 1@abcde

    /usr/local/etc/smb.conf
    [global]
    netbios name = pdc001
    workgroup = virtual
    realm = virtual.local
    server string = Domain Proxy Server
    encrypt passwords = yes
    security = ADS
    password server = pdc001.virtual.local
    log level = 3
    log file = /var/log/samba/%m.log
    max log size = 50
    socket options = TCP_NODELAY SO_SNDBUF=8192
    printcap name = /etc/printcap
    preferred master = no
    dns proxy = no
    ldap ssl = no
    idmap uid = 10000-20000
    idmap gid = 10000-20000
    winbind use default domain = yes
    cups options = raw

    /etc/krb5.conf
    [logging]
      default = FILE:/var/log/krb5libs.log
      kdc = FILE:/var/log/krb5kdc.log
      admin_server = FILE:/var/log/ksadmind.log
    [libdefaults]
      default_realm = virtual.local.
      dns_lookup_realm = false
      dns_lookup_kdc = false
      ticket_lifetime = 24h
      forwardable = yes
      default_tgs_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC
      default_tkt_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC
      preferred_enctypes = DES-CBC-CRC DES-CBC-MD5 RC4-HMAC
    [realms]
      virtual.local = {
              kdc = pdc001.virtual.local.:88
              admin_server = pdc001.virtual.local.:749
              default_domain = domain.
      }
    [domain_realm]
      .domain. = virtual.local.
      domain. = virtual.local.
    [kdc]
      profile = /var/kerberos/krb5kdc/kdc.conf
    [appdefaults]
      pam = {
              debug = false
              ticket_lifetime = 36000
              renew_lifetime = 36000
              forwardable = true
              krb4_convert = false
      }

    /var/heimdal/kdc.conf
    [kdcdfefaults]
           acl_file = /var/kerberos/krb5kdc/kadm5.acl
           dict_file = /usr/share/dict/words
           admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
           v4_mode = noreauth
    [libdefaults]
           default_realm = virtual.
    [realms]
           virtual. = {
                   master_key_type = des-cbc-crc
                   supported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
    des-cbc-crc:v4 des-cbc-crc:afs3
                }

    /var/heimdal/kadm5.acl
    */administrator@virtual.local     *



  • Depois que você instalou o heimdal e o samba você fez um logoff em seguida logon para ele atualizar o path dos binários?



  • @marcelloc:

    Depois que você instalou o heimdal e o samba você fez um logoff em seguida logon para ele atualizar o path dos binários?

    Ops, não.

    Estou reiniciando …



  • Só um logoff na console já resolve, não precisa de boot.  😉



  • @marcelloc:

    Só um logoff na console já resolve, não precisa de boot.  😉

    Ok, confesso, não sei como fazer logoff no pfsense, mas já tá reiniciado. Vou tentar o kinit agora …



  • @filipe.nanclarez:

    Ok, confesso, não sei como fazer logoff no pfsense, mas já tá reiniciado. Vou tentar o kinit agora …

    Sem problema :). Para fazer o logoff basta digitar exit



  • agora recebo o seguinte erro:

    kinit: krb5_get_init_creds: unable to reach any KDC in realm virtual.local

    teria alguma coisa a ver com colocar o ip no arquivo hosts para ele achar ?

    editado

    coloquei o seguinte conteudo no meu /etc/hosts

    127.0.0.1 localhost localhost.localdomain
    192.168.15.101 pfsense.localdomain pfsense
    192.168.15.2    pdc001.virtual.local pdc001

    mas mesmo assim, o erro permanece …



  • Tentei ignorar esse passo, e dar o join

    net ads join -U Administrator@virtual.local
    retorna a seguinte mensagem

    kinit succeeded but ads_sasl_spnego_krb5_bind failed: Invalid credentials
    Failed to join domain: failed to connect do AD: Invalid credentials



  • Não vejo a hora de arrumar tempo pra testar o ambiente!



  • @Thiago:

    Não vejo a hora de arrumar tempo pra testar o ambiente!

    Estou tentando com pf 2.0.1 e Windows 2008 Server R2 …

    marcelloc, o seu ambiente era esse mesmo ?



  • Como devo substituir essa linha do tutorial ?

    password server = ad-master.domain.com.au

    eu fiz assim, mas fiquei na dúvida

    password server = pdc001.virtual.local



  • filipe.nanclarez,

    Marque o dns do firewall com o ip do ad, o samba/kerberos precisam saber quem são os hosts do seu domínio.



  • @marcelloc:

    filipe.nanclarez,

    Marque o dns do firewall com o ip do ad, o samba/kerberos precisam saber quem são os hosts do seu domínio.

    sim sim, eu já tinha feito, inclusive testei na tela “diagnostics>ping” com o nome e como ip pra saber se estava ok …

    alterei algumas coisas nos arquivos que acredito que estavam erradas (eu não interpretei direito) agora está dando “Password incorrect” tem alguma coisa a ver com ser 2008 server ? Nesse site, diz que precisa ser outra config pra o 2008 server …

    http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory



  • Você pode seguir o tutorial ntlm mais atual do site do squid sem problemas. Toma cuidado só com a questão da localização das pastas.



  • @marcelloc:

    Você pode seguir o tutorial ntlm mais atual do site do squid sem problemas. Toma cuidado só com a questão da localização das pastas.

    então, usei ele só para verificar como deveria fazer as substituições dos valores, mas estou seguindo o seu pra não bagunçar aqui.

    estou recebendo o primeiro erro novamente (depois de arrumar o dns, e acertar o ntp):

    kinit: krb5_get_init_creds: unable to reach any KDC in realm virtual.local

    no join, retorna:

    Failed to join domain: failed to connect to AD: Operations error

    tentei olhar nos não estou achando os arquivos dos logs pra verificar … ???



  • pessoal, alguma luz ?

    marcelloc, quando voce conseguiu foi no windows 2003 ?



  • Toda vez que arrumo o dns, ele dá outro erro, dá password incorrect.

    Já mudei a senha, mas continua dando isso.

    Há algum log onde eu possa identificar o que está acontecendo ?



  • @filipe.nanclarez:

    tentei olhar nos não estou achando os arquivos dos logs pra verificar … ???

    da uma olhada nos logs do samba /var/log/samba/

    olha tambem nos logs no windows para ver se aparece alguma coisa

    @filipe.nanclarez:

    marcelloc, quando voce conseguiu foi no windows 2003 ?

    Sim, foi no 2003



  • @marcelloc:

    @filipe.nanclarez:

    tentei olhar nos não estou achando os arquivos dos logs pra verificar … ???

    da uma olhada nos logs do samba /var/log/samba/

    a pasta esta vazia …



  • marcelloc, tem um arquivo que eu não estou vendo

    é o /var/kerberos/krb5kdc/kadm5.keytab

    eu mudei a pasta de acordo com o caminho para

    /var/heimdal/kadm5.keytab

    ele não está gerando … algo a mais que preciso fazer ?



  • O keytab é gerado no ad. ainda não vi nenhum port do mskutil para o freebsd.



  • marcelloc, vou instalar um 2003 para podermos isolar as variaveis

    em qual versão do pf voce fez ? e a versão do squid ?



  • Senhores Boa Noite!

    Primeiramente obrigado marcelloc pelo caminho das pedras :).

    Durante o dia realizei alguns testes seguindo a orientação do macelloc e consegui uns tropeços e acertos, agora vim informar que obtive êxito na configuração com autenticação transparente sem o pop-up.

    Cenário:

    Controlador de dominio usado para autenticar: Windows Server 2008 R2.
    Clientes testados: Windows XP e 7
    Versão do squid utilizado: Squid Cache: Version 2.7.STABLE9

    Problemas encontrados:

    Ao reiniciar o servidor pfsense e tentar navegar novamente… a janela de autenticação era apresentada… logo fui ver se o serviço do samba (winbindd) estava e iniciado, mas o mesmo estava parado.

    Tentei iniciar e o serviço não subia:

    [2.0.1-RELEASE][root@trinity.domain.local]/: /usr/local/etc/rc.d/samba onestart
    Removing stale Samba tdb files: . done
    Starting winbindd.
    [2.0.1-RELEASE][root@trinity.domain.local]/: /usr/local/etc/rc.d/samba onestatus
    winbindd is not running.

    Fui ver o log do samba e encontro:

    lib/pidfile.c:130(pidfile_create ERROR: can’t open /var/run/samba/winbindd.pid: Error was No such file or directory

    Ou seja… quando o pfsense reiniciou o diretorio /var/run/samba tinha sumido!.. só foi cria-lo novamente na mão e o serviço voltou a funcionar juntamente com à autenticação transparente.

    Agora vem as dúvidas:

    1. Como fazer para que o serviço seja iniciado automaticamente? (criei e editei o arquivo /etc/rc.conf mas ele some depois que inicia o servidor).
    2. Depois que o servidor inicia é necessário utilizar novamente o comando kinit?
    3. Quando instalei o samba ele gerou um erro informando que havia um conflito de pacote que existia, porém se eu removesse ele implicava dizendo que o squid depende dele… o que fiz foi forçar a instalação e ele pulou essa etapa.


  • Peraí pessoal, não é possível. Todo mundo tá fazendo isso dar certo.

    Estou a três dias nisso. Não é possível que eu sou tão leigo assim.

    doug, como voce fez isso funcionar. Segui o tutorial, e ainda não achei a parte onde precisa instalar o winbind. Na realidade, tentei dar um start no serviço do samba e não rolou, sem falar nos logs que até agora não aparecem.

    Fiz passo a passo, e quando tento usar o kinit, ele dá password invalid ….

    Já fiz, e refiz, e formatei várias vezes.

    Tem algo que eu não sei ? algum comando que está sendo dado, por se muito óbvio e eu não estou fazendo ?

    Por gentileza, meu ambiente é o mesmo que o seu, me ajude a fazer funcionar, pelo menos uma vez …



  • @filipe.nanclarez:

    marcelloc, vou instalar um 2003 para podermos isolar as variaveis

    Em qual versão do pf voce fez ? e a versão do squid ?

    pfsense 2.0.1 64 bits
    squid 2.x da instalação dos pacotes



  • @dougf4nnie:

    1. Como fazer para que o serviço seja iniciado automaticamente? (criei e editei o arquivo /etc/rc.conf mas ele some depois que inicia o servidor).

    Edite o arquivo /usr/local/etc/rc.d/samba e mude tudo o que estiver com NO para YES

    @dougf4nnie:

    1. Depois que o servidor inicia é necessário utilizar novamente o comando kinit?

    Acredito que não. Já vi minha chave vencer e o serviço continuou no ar. Porém é melhor testar

    @dougf4nnie:

    1. Quando instalei o samba ele gerou um erro informando que havia um conflito de pacote que existia, porém se eu removesse ele implicava dizendo que o squid depende dele… o que fiz foi forçar a instalação e ele pulou essa etapa.

    pkg_add -r é utilizado com uma certa freqüência nas instalações de pacotes no pfsense.

    Parabéns pelo setup.  😉



  • @filipe.nanclarez:

    Segui o tutorial, e ainda não achei a parte onde precisa instalar o winbind. Na realidade, tentei dar um start no serviço do samba e não rolou, sem falar nos logs que até agora não aparecem.

    Altere o script de inicialização como descrito acima.
    O winbind é um dos binarios instalados pelo pacote do samba

    @filipe.nanclarez:

    Fiz passo a passo, e quando tento usar o kinit, ele dá password invalid ….

    Já tentou uma senha sem caracteres especiais ou a prova de configuração de teclados?

    @filipe.nanclarez:

    Já fiz, e refiz, e formatei várias vezes.
    Tem algo que eu não sei ? algum comando que está sendo dado, por se muito óbvio e eu não estou fazendo ?
    Por gentileza, meu ambiente é o mesmo que o seu, me ajude a fazer funcionar, pelo menos uma vez …

    Continue tentando, não desista! Tenho certeza que o problema vai estar em algum detalhe deixado para trás. 🙂



  • puxa gente … que sofrimento …

    venho compartilhar com vocês como fiz para conseguir fazer o kinit funcionar …

    lendo um artigo a respeito em http://www.vivaolinux.com.br/artigo/Linux-e-Active-Directory-(Integrando-COMPLETAMENTE-sua-estacao-Linux-a-um-dominio-MS-Windows-2000-2003-Server)?pagina=5

    vi a seguinte frase …

    IMPORTANTE: Observe que o realm foi especificado com caracteres em maiúsculo. Este é um requisito do krb5. Caso você se esqueça e coloque em minúsculo ocorrerá um erro (que será visto mais adiante).

    dificil de acreditar, mas era exatamente isso que estava dando problema ….

    agora vou continuar com os testes …

    obrigado a todos …



  • Bom, estava nos pequenos detalhes.  🙂

    Se você voltar no tutorial, vai ver que o realm está em maiúsculo.

    Segunda dica, o universo unix/linux é praticamente 100% case sensitive, ou seja, caracteres minúsculos são diferentes de caracteres maiúsculos.



  • é, não tenho como negar que eu já sabia do case sensitive, só não tive essa percepção por estar acostumado com windows.

    agora, só estou estranhando o seguite, quando dou o net ads join, e digito a senha, ele fica sem fazer nada, não dá msg, não volta para o prompt, fica lá …

    demora tudo isso mesmo ? já cancelei tentei denovo, esperei mais de 20min … e nada …


 

© Copyright 2002 - 2018 Rubicon Communications, LLC | Privacy Policy