Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Pfsense + Squid + NTLM (Autenticação AD transparente)

    Scheduled Pinned Locked Moved Portuguese
    108 Posts 41 Posters 64.7k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mcury Rebel Alliance
      last edited by mcury

      Não seria melhor utilizar autenticação SSO por Kerberos? Já que não precisa utilizar nenhum pacote extra?

      SETSPN:

      Criar usuário svc_quid no AD

      C:\WINDOWS\system32>setspn -S HTTP/pfsense.local.lan svc_squid
      Verificando o domínio DC=local,DC=lan

      Depois, através do samba-tools, ou através diretamente do AD, através do ktpass

      sudo samba-tool domain exportkeytab mykeytab.keytab --principal=HTTP/pfsense.local.lan

      Squid:

      acl whitelist dstdomain .local.lan
      auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -k /usr/local/etc/squid/mykeytab.keytab
      auth_param negotiate children 100
      auth_param negotiate keep_alive on
      http_access allow whitelist
      acl auth proxy_auth REQUIRED
      http_access deny !auth
      http_access allow auth

      Squidguard

      ldapusersearch ldap://raspsrv.local.lan:3268/dc=local,dc=lan?userPrincipalName?sub?(&(memberof=CN=internet_group%2cCN=Users%2cDC=local%2cDC=lan)(userPrincipalName=%s))

      Depois de configurado, loguem novamente no AD, e chamem o proxy pelo nome, ele deve associar ao ticket kerberos.
      Digitem klist no CMD do DOS para ver se ele foi adicionado corretamente.

      Maiores detalhes:

      https://journeyofthegeek.com/2017/12/30/pfsense-squid-kerberos/

      dead on arrival, nowhere to be found.

      F 1 Reply Last reply Reply Quote 1
      • F
        fabiogleao @mcury
        last edited by

        @mcury
        Meu DC é samba4 vou pesquisar se encontro um guia pra ele, vlw pela dica

        1 Reply Last reply Reply Quote 0
        • M
          mcury Rebel Alliance
          last edited by

          Olá Fabio,

          Esse tutorial que pus ali em cima, funciona para samba 4.
          Funciona em AD de servidor Windows tambem.

          dead on arrival, nowhere to be found.

          F 1 Reply Last reply Reply Quote 1
          • F
            fabiogleao @mcury
            last edited by

            @mcury

            quando vou criar o keytab me retorna esse erro:
            ktpass : O termo 'ktpass' não é reconhecido como nome de cmdlet, função, arquivo de script ou programa
            operável. Verifique a grafia do nome ou, se um caminho tiver sido incluído, veja se o caminho está
            correto e tente novamente.
            No linha:1 caractere:1

            • ktpass -out c:\pfsense.keytab -princ HTTP/pfsense.dominio.lan@DOMINIO ...

            Estou tentando pelo CMD no windows (membro do dominio)

            1 Reply Last reply Reply Quote 0
            • M
              mcury Rebel Alliance
              last edited by

              O seu comando ktpass está igualzinho lá no link que eu passei?
              https://journeyofthegeek.com/2017/12/30/pfsense-squid-kerberos/

              Caso queira dar uma aprofundada no ktpass:
              https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ktpass

              Caso não funcione pelo ktpass, voce pode extrair a chave utilizando o samba-tools:
              Abaixo segue o comando que eu usei no meu domínio:

              sudo samba-tool domain exportkeytab mykeytab.keytab --principal=HTTP/pfsense.local.lan

              Quando fiz esse comando, o meu samba 4 era o domain controller
              Depois copiei a chave para a pasta do pfsense /usr/local/etc/squid/mykeytab.keytab

              dead on arrival, nowhere to be found.

              F 1 Reply Last reply Reply Quote 1
              • F
                fabiogleao @mcury
                last edited by fabiogleao

                @mcury
                Obrigado pelas dicas.
                Eu fiz pelo samba-tools, mas agora o navegador fica solicitando login infinitamente.
                não importa o que eu use ele fica solicitando e não deixa navegar.

                usei: samba-tool domain exportkeytab pfsense.keytab --principal=HTTP/pfsense.dominio.lan

                qual seria o comando pra gerar o spn no samba-tools? vou tentar fazendo tudo por ele.

                squid ficou assim:
                auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -d -k /usr/local/etc/squid/pfsense.keytab
                auth_param negotiate children 1000
                auth_param negotiate keep_alive on
                acl auth proxy_auth REQUIRED
                http_access deny !auth
                http_access allow auth

                ps.: o PC pfsense precisa estar adicionado ao dominio?
                antes com o pf2ad ele adicionava e agora q não tem não está adicionado.

                1 Reply Last reply Reply Quote 0
                • M
                  mcury Rebel Alliance
                  last edited by

                  Olá Fabio, o pfsense não precisa estar no domínio.
                  O que aparece nos logs do Squid/Squidguard durante os acessos?

                  O comando que eu utilizei foi exatamente esse:

                  sudo samba-tool domain exportkeytab mykeytab.keytab --principal=HTTP/pfsense.local.lan

                  Você configurou o krb5.conf no /etc/ do samba server?
                  Ele também precisa ser configurado conforme no link que te mandei.

                  Eu infelizmente agora não estou em casa, mas assim que chegar copio o meu krb5.conf aqui pra ajudar.

                  Teste inicialmente um usuário com uma senha simples (sem caracteres especiais), e se possível, que seja membro de um grupo de AD onde o caminho da arvore não tenha espaços ou caracteres especiais.

                  Isso me atrapalhou bastante no inicio.

                  Até breve

                  dead on arrival, nowhere to be found.

                  1 Reply Last reply Reply Quote 1
                  • M
                    mcury Rebel Alliance
                    last edited by

                    Segue:

                    Estou utilizando o mesmo domínio do exemplo acima.
                    O que está em maiúsculo precisa ficar em maiúsculo, exatamente como está aí embaixo, ok?

                    pi@raspsrv:~ $ cat /etc/krb5.conf
                    [libdefaults]
                    default_realm = LOCAL.LAN
                    dns_lookup_realm = false
                    dns_lookup_kdc = true
                    [realms]
                    LOCAL.LAN = {
                    kdc = raspsrv.local.lan
                    admin_server = raspsrv.local.lan
                    default_domain = local.lan
                    }
                    [domain_realm]
                    .local.lan = LOCAL.LAN
                    local.lan = LOCAL.LAN

                    dead on arrival, nowhere to be found.

                    F 1 Reply Last reply Reply Quote 0
                    • F
                      fabiogleao @mcury
                      last edited by fabiogleao

                      @mcury
                      Bom dia amigo.

                      o usuário do pFsense é pfsense e a senha é somente com números e fica no Users do AD.

                      qual seria o comando que indica o usuário como SPN para que depois se exporte a keytab? o correspondente ao comando do windows "setspn".

                      no log do meu squid:

                      Date IP Status Address User Destination
                      24.10.2018 08:29:59 10.0.2.106 TCP_DENIED/407 clients4.google.com:443 - -

                      Date-Time Message
                      31.12.1969 21:00:00 negotiate_kerberos_auth: WARNING: received type 1 NTLM token
                      31.12.1969 21:00:00 negotiate_kerberos_auth: DEBUG: Decode 'TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKAO5CAAAADw==' (decoded length: 40).

                      Krb5.conf (PFSENSE)

                      [logging]
                      default = FILE:/var/log/krb5libs.log
                      kdc = FILE:/var/log/krb5kdc.log
                      admin_server = FILE:/var/log/kadmind.log

                      [libdefaults]
                      default_realm = DOMINIO.LAN
                      dns_lookup_realm = false
                      dns_lookup_kdc = true
                      ticket_lifetime = 48h
                      forwardable = yes
                      ; for Windows 2008 with AES
                      default_tgs_enctypes = aes128-cts-hmac-sha1-96 aes256-cts-hmac-s
                      ha1-96 rc4-hmac des-cbc-crc des-cbc-md5
                      default_tkt_enctypes = aes128-cts-hmac-sha1-96 aes256-cts-hmac-s
                      ha1-96 rc4-hmac des-cbc-crc des-cbc-md5
                      permitted_enctypes = aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha
                      1-96 rc4-hmac des-cbc-crc des-cbc-md5

                      [appdefaults]
                      pam = {
                      debug = false
                      ticket_lifetime = 36000
                      renew_lifetime = 36000
                      forwardable = true
                      krb4_convert = false
                      }

                      [realms]
                      DOMINIO.LAN = {
                      kdc = ad-dc.dominio.lan
                      admin_server = ad-dc.dominio.lan
                      default_domain - dominio.lan

                      }

                      [domain_realm]
                      .dominio.lan = DOMINIO.LAN
                      dominio.lan = DOMINIO.LAN

                      Krb5.conf (AD)

                      [libdefaults]
                      default_realm = DOMINIO.LAN
                      dns_lookup_realm = false
                      dns_lookup_kdc = true

                      [realms]
                      DOMINIO.LAN = {
                      kdc = ad-dc.dominio.lan

                      }

                      [domain_realm]
                      .dominio.lan = DOMINIO.LAN
                      dominio.lan = DOMINIO.LAN

                      1 Reply Last reply Reply Quote 0
                      • M
                        mcury Rebel Alliance
                        last edited by

                        Infelizmente o setspn só pode ser feito no Windows, com o pacote RSAT.
                        Já o ktpass pode ser usado tanto no samba como no Windows Server.

                        Primeiro ponto:

                        O pfsense está com domain override no DNS para o seu dominio, e apontando pro DNS do AD?
                        Ou o pfsense está configurado para utilizar apenas o DNS do AD?

                        Tudo que for relacionado ao seu AD, inclusive as atividades do Kerberos, precisam resolver corretamente, portanto precisa de uma dessas configurações.

                        Segundo ponto:

                        O /etc/krb5.conf do PFSENSE precisa estar da forma abaixo, observe que removi alguns parâmetros de criptografia para facilitar (dessa forma funciona), pois existem diferenças entre o MIT e o Heimdal, que não vem ao caso agora.

                        [2.4.4-RELEASE][root@pfsense.local.lan]/root: cat /etc/krb5.conf
                        [libdefaults]
                        default_realm = LOCAL.LAN
                        dns_lookup_realm = false
                        dns_lookup_kdc = true

                        [realms]
                        LOCAL.LAN = {
                        kdc = raspsrv.local.lan
                        }

                        [domain_realm]
                        .local.lan = LOCAL.LAN
                        local.lan = LOCAL.LAN

                        [logging]
                        kdc = FILE:/var/log/kdc.log
                        Default = FILE:/var/log/krb5lib.log

                        A configuração do smb.conf localizado no AD, eu já postei anteriormente.

                        Após ter feito essas configurações, você já pode testar com o kinit svc_squid ou pfsense como você criou diretamente do PFSENSE.

                        Caso funcione, você conseguirá listar o ticket com o comando klist em seguida.

                        Depois desse passo, você segue com as configurações que já citei acima ok?

                        dead on arrival, nowhere to be found.

                        F 2 Replies Last reply Reply Quote 1
                        • F
                          fabiogleao @mcury
                          last edited by

                          This post is deleted!
                          1 Reply Last reply Reply Quote 0
                          • F
                            fabiogleao @mcury
                            last edited by

                            @mcury

                            Consegui, muito obrigado.

                            no navegador estava o IP do proxy e ao mudar pro nome funcionou.
                            NS Lookup funcionando e reconhecendo normalmente quando informo o nome do PC, não entendi pq não encontrou com o IP e somente com o nome.

                            Agora vou pra 2a etapa que é com o sarg. Vou seguir as suas orientações. Obrigado

                            1 Reply Last reply Reply Quote 0
                            • M
                              mcury Rebel Alliance
                              last edited by

                              De nada Fabio, é um prazer ajudar.
                              Agora, SSO sem precisar alterar os pacotes originais do Pfsense.

                              Saiu atualização, voce atualiza, sem se preocupar com samba.

                              Abraços.

                              dead on arrival, nowhere to be found.

                              F 1 Reply Last reply Reply Quote 0
                              • F
                                fabiogleao @mcury
                                last edited by fabiogleao

                                @mcury
                                agora pode atualizar sem preocupação, bem melhor.

                                Mas o Squidguard não tá bloqueando reconhece o usuário, mas não faz o bloqueio.

                                segue as configs dele:
                                0_1540558367651_ead44ee6-fd4f-44dd-a7f5-b1f11d72acfd-image.png

                                0_1540559908872_ae4bcc86-7ffc-40e1-b576-4fc36970217c-image.png
                                com ip ou nome não bloqueia

                                .

                                usuário abaixo era pra ser bloqueado o acesso no grupo Internet_L0:

                                0_1540558562748_7f69719b-b1e1-4ba2-a023-77b3590c4707-image.png

                                1 Reply Last reply Reply Quote 0
                                • M
                                  mcury Rebel Alliance
                                  last edited by

                                  Desmarca as opções de STRIP NT domain e STRIP Kerberos Kealm e tenta de novo.

                                  Caso não funcione, checa o ldapusersearch para ver se está de acordo, o que eu colei aqui, funcionou perfeitamente para o meu AD em samba 4.

                                  ldapusersearch ldap://raspsrv.local.lan:3268/dc=local,dc=lan?userPrincipalName?sub?(&(memberof=CN=internet_group%2cCN=Users%2cDC=local%2cDC=lan)(userPrincipalName=%s))

                                  Você pode estar testando a porta 389 também.

                                  Você desativou a autenticação do Squid, certo?
                                  A configuração é praticamente toda no Squidguard

                                  dead on arrival, nowhere to be found.

                                  1 Reply Last reply Reply Quote 0
                                  • F
                                    fabiogleao
                                    last edited by

                                    nada amigo, quebrando cabeça aqui.

                                    fiz o que me orientou, mas não bloqueia por grupo.

                                    se o problema fosse no ticket ele também não mostraria o usuário no log do squid né?

                                    no log squidguard ele nem mostra nada, somente no cache.

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      mcury Rebel Alliance
                                      last edited by

                                      Exato, o mais difícil você já fez, que é o ticket e a autenticação no proxy.
                                      O problema agora é simplesmente a sintaxe do ldapusersearch.

                                      O meu funcionou daquela maneira, já testou outras sintaxes?

                                      dead on arrival, nowhere to be found.

                                      F 1 Reply Last reply Reply Quote 0
                                      • F
                                        fabiogleao @mcury
                                        last edited by

                                        @mcury
                                        mano do céu!!!

                                        já tentei de tudo velho.

                                        ldapusersearch ldap://ad-dc.dominio.lan:389/dc=dominio,dc=lan?userPrincipalName?sub?(&(userPrincipalName=%s)(memberof=cn=internet_L0%2cou=Ti%2cdc=dominio%2cdc=lan))

                                        ldapusersearch ldap://10.0.0.22:389/dc=dominio,dc=lan?userPrincipalName?sub?(&(userPrincipalName=%s)(memberof=cn=internet_L0%2cou=Ti%2cdc=dominio%2cdc=lan))

                                        ldapusersearch ldap://ad-dc.dominio.lan:3268/dc=dominio,dc=lan?userPrincipalName?sub?(&(userPrincipalName=%s)(memberof=cn=internet_L0%2cou=Ti%2cdc=dominio%2cdc=lan))

                                        ldapusersearch ldap://10.0.0.22:3268/dc=dominio,dc=lan?userPrincipalName?sub?(&(userPrincipalName=%s)(memberof=cn=internet_L0%2cou=Ti%2cdc=dominio%2cdc=lan))

                                        squid.conf

                                        This file is automatically generated by pfSense

                                        Do not edit manually !

                                        http_port 10.0.0.250:3128
                                        icp_port 0
                                        digest_generation off
                                        dns_v4_first off
                                        pid_filename /var/run/squid/squid.pid
                                        cache_effective_user squid
                                        cache_effective_group proxy
                                        error_default_language en
                                        icon_directory /usr/local/etc/squid/icons
                                        visible_hostname localhost
                                        cache_mgr admin@localhost
                                        access_log /var/squid/logs/access.log
                                        cache_log /var/squid/logs/cache.log
                                        cache_store_log none
                                        netdb_filename /var/squid/logs/netdb.state
                                        pinger_enable on
                                        pinger_program /usr/local/libexec/squid/pinger

                                        logfile_rotate 14
                                        debug_options rotate=14
                                        shutdown_lifetime 3 seconds

                                        Allow local network(s) on interface(s)

                                        acl localnet src 10.0.0.0/22
                                        forwarded_for on
                                        uri_whitespace strip

                                        acl dynamic urlpath_regex cgi-bin ?
                                        cache deny dynamic

                                        cache_mem 2000 MB
                                        maximum_object_size_in_memory 256 KB
                                        memory_replacement_policy heap GDSF
                                        cache_replacement_policy heap LFUDA
                                        minimum_object_size 0 KB
                                        maximum_object_size 4 MB
                                        cache_dir ufs /var/squid/cache 60000 256 256
                                        offline_mode off
                                        cache_swap_low 90
                                        cache_swap_high 95
                                        cache allow all
                                        ###Add any of your own refresh_pattern entries above these.
                                        refresh_pattern ^ftp: 1440 20% 10080
                                        refresh_pattern ^gopher: 1440 0% 1440
                                        refresh_pattern -i (/cgi-bin/|?) 0 0% 0
                                        refresh_pattern . 0 20% 4320

                                        ###Remote proxies

                                        Setup some default acls

                                        ACLs all, manager, localhost, and to_localhost are predefined.

                                        acl allsrc src all
                                        acl safeports port 21 70 80 210 280 443 488 563 591 631 777 901 3128 3129 1025-65535
                                        acl sslports port 443 563

                                        acl purge method PURGE
                                        acl connect method CONNECT

                                        Define protocols used for redirects

                                        acl HTTP proto HTTP
                                        acl HTTPS proto HTTPS
                                        http_access allow manager localhost

                                        http_access deny manager
                                        http_access allow purge localhost
                                        http_access deny purge
                                        http_access deny !safeports
                                        http_access deny CONNECT !sslports

                                        Always allow localhost connections

                                        http_access allow localhost

                                        request_body_max_size 0 KB
                                        delay_pools 1
                                        delay_class 1 2
                                        delay_parameters 1 -1/-1 -1/-1
                                        delay_initial_bucket_level 100
                                        delay_access 1 allow allsrc

                                        Reverse Proxy settings

                                        Package Integration

                                        url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/etc/squidGuard/squidGuard.conf
                                        url_rewrite_bypass off
                                        url_rewrite_children 16 startup=8 idle=4 concurrency=0

                                        Custom options before auth

                                        acl whitelist dstdomain .local.lan
                                        auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -k /usr/local/etc/squid/squidproxy.keytab
                                        auth_param negotiate children 100
                                        auth_param negotiate keep_alive on
                                        http_access allow whitelist
                                        acl auth proxy_auth REQUIRED
                                        http_access deny !auth
                                        http_access allow auth

                                        Setup allowed ACLs

                                        Allow local network(s) on interface(s)

                                        http_access allow localnet

                                        Default block all to be sure

                                        http_access deny allsrc

                                        SquidGuard

                                        logdir /var/squidGuard/log
                                        dbhome /var/db/squidGuard
                                        ldapbinddn CN=pfsense,CN=Users,DC=dominio,DC=lan
                                        ldapbindpass 123456
                                        ldapprotover 3

                                        #ACL Bloqueio Nivel 1
                                        src Internet_L0 {
                                        ldapusersearch ldap://ad-dc.dominio.lan:389/dc=dominio,dc=lan?userPrincipalName?sub?(&(userPrincipalName=%s)(memberof=cn=internet_L0%2cou=Ti%2cdc=dominio%2cdc=lan))
                                        log block.log
                                        }

                                        dest blk_BL_adv {
                                        domainlist blk_BL_adv/domains
                                        urllist blk_BL_adv/urls
                                        log block.log
                                        }

                                        rew safesearch {
                                        s@(google../search?.q=.)@&safe=active@i
                                        s@(google..
                                        /images.q=.)@&safe=active@i
                                        s@(google../groups.q=.)@&safe=active@i
                                        s@(google..
                                        /news.q=.)@&safe=active@i
                                        s@(yandex../yandsearch?.text=.)@&fyandex=1@i
                                        s@(search.yahoo..
                                        /search.p=.)@&vm=r&v=1@i
                                        s@(search.live../.q=.)@&adlt=strict@i
                                        s@(search.msn..
                                        /.q=.)@&adlt=strict@i
                                        s@(.bing..*/.q=.)@&adlt=strict@i
                                        log block.log
                                        }

                                        acl {
                                        # ACL Bloqueio Nivel 1
                                        Internet_L0 {
                                        pass permitidos_todos none
                                        log block.log
                                        }
                                        #
                                        default {
                                        pass none
                                        redirect http://10.0.0.250:80/sgerror.php?url=403%20&a=%a&n=%n&i=%i&s=%s&t=%t&u=%u
                                        log block.log
                                        }
                                        }

                                        1 Reply Last reply Reply Quote 0
                                        • M
                                          mcury Rebel Alliance
                                          last edited by

                                          Pelo que eu vi nas suas tentativas, você não usou o memberof logo após o sub como está ai embaixo, tem que por memberof antes do caminho da arvore.

                                          O seu ficaria assim:

                                          ldapusersearch ldap://ad-dc.dominio.lan:3268/DC=dominio,DC=lan?userPrincipalName?sub?(&(memberof=CN=internet_L0%2cOU=Ti%2cDC=dominio%2cDC=lan)(userPrincipalName=%s))

                                          Testa ai e me fala ok?

                                          dead on arrival, nowhere to be found.

                                          F 1 Reply Last reply Reply Quote 0
                                          • F
                                            fabiogleao @mcury
                                            last edited by fabiogleao

                                            @mcury

                                            já tinha tentado antes assim e tb não rolou.

                                            notei q não registrou no log do squidguard depois do dia 26-10

                                            0_1541009428353_d81a71b6-a923-4c79-8669-886a5fe025d9-image.png

                                            já no log do squid tá ok.

                                            0_1541009494356_163c54c3-5119-4207-b9a6-a0af00222367-image.png

                                            vou tentar as variações de porta e mudar pra IP do AD, mas acredito que não seja isso.

                                            Mano se vc tiver tempo de dar uma olhada remotamente na minha config pra ter uma ideia melhor ou sei lá, te passo meu Cel e vc me add no whats ou telegram e te passo o id do TV ou Any Desk.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.