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