Pfsense + Squid + NTLM (Autenticação AD transparente)
-
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)
-
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/ktpassCaso 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 -
@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 authps.: o PC pfsense precisa estar adicionado ao dominio?
antes com o pf2ad ele adicionava e agora q não tem não está adicionado. -
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
-
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 -
@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.LANKrb5.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 -
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.logA 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?
-
This post is deleted! -
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
-
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.
-
@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:
com ip ou nome não bloqueia.
usuário abaixo era pra ser bloqueado o acesso no grupo Internet_L0:
-
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 -
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.
-
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?
-
@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/pingerlogfile_rotate 14
debug_options rotate=14
shutdown_lifetime 3 secondsAllow local network(s) on interface(s)
acl localnet src 10.0.0.0/22
forwarded_for on
uri_whitespace stripacl dynamic urlpath_regex cgi-bin ?
cache deny dynamiccache_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 563acl purge method PURGE
acl connect method CONNECTDefine protocols used for redirects
acl HTTP proto HTTP
acl HTTPS proto HTTPS
http_access allow manager localhosthttp_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !safeports
http_access deny CONNECT !sslportsAlways 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 allsrcReverse 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=0Custom 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 authSetup 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
}
} -
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?
-
já tinha tentado antes assim e tb não rolou.
notei q não registrou no log do squidguard depois do dia 26-10
já no log do squid tá ok.
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.
-
É pra ficar assim os logs caso você configure corretamente...
No squidguard, você habilitou a autenticação?
No squid, ela deve ficar desabilitada.
-
squid autenticação desabilitada
e no squid guard configurado LDAP versão 3 -
Eu to online, posso compartilhar minha tela pra você ver a configuração e comparar com a sua
Inclusive o samba, krb5.conf e etc, te passei o contato por msg, abraço