Instalação do Squid com autenticação NTLM e Kerberos

Criei este artigo com a ajuda de todos os contribuintes com sites e outros artigos para a instalação de um servidor com firewall iptables para compartilhar a internet, proxy Squid, Sarg para monitoração dos acessos e com iptraf para monitoramento dos pacotes da rede.

[ Hits: 130.299 ]

Por: Perfil removido em 24/08/2010


Instalando o Kerberos



Estou partindo do princípio que na rede a ser implementada essa solução já exista um Active Directory e um servidor DNS instalado. O servidor DNS é de fundamental importância para o trabalho do Kerberos assim como um servidor de NTP. Então instale esse 3 serviços na rede e configure-os da maneira correta. Antes da instalação do cliente kerberos atente para os seguinte itens:

Antes de instalar qualquer coisa, verificar se o sistema operacional usado está atualizado para não haver nenhum problema como por exemplo: instalar o pacote apt-build que contém compiladores entre outros softwares.

Primeiro, edite o arquivo /etc/hosts colocando o nome e o ip do seu Domain Controller:

# vi /etc/hosts

xxx.xxx.xxx.xxx nomedomicro@dominio.com.br nome do micro
127.0.0.1 localhost.localdomain localhost prx

Obs.: Onde está xxx.xxx.xxx.xxx coloque o ip servidor Active Directory.

Depois edite o seu resolv.conf e coloque o nome do servidor DNS:

# vi /etc/resolv.conf

nameserver xxx.xxx.xxx.xxx
search nomedodomínio.com.br

Obs.: Onde está xxx.xxx.xxx.xxx coloque o ip servidor DNS.

Depois atualize o relógio do micro com o servidor Ntp da rede ou com um Ntp Server.

# ntpdate [nome do servidor ntp]
ou
# ntpdate ntp.cais.rnp.br (onde está nome do servidor é o servidor de Ntp da rede)

Para instalar o ntpdate use:

# apt-get install ntpdate

Depois vá até seu servidor DNS e crie um host para seu servidor Proxy com o ip do mesmo.

Agora vamos instalar o cliente Kerberos:

# apt-get install krb5-kdc krb5-config krb5-clients libpam-krb5 krb5-user

Obs.: Se for pedido o nome do domínio, disponibilize.

Depois é necessário alterar o aquivo /etc/krb5.conf:

# vi /etc/krb5.conf

[libdefaults]

default_realm = ELETROMOTORES.COM.BR
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {

   host = {
      rcmd = host
      ftp = ftp
   }

   plain = {
      something = something-else
   }

   fcc-mit-ticketflags = true
}

[realms]

ELETROMOTORES.COM.BR = {
   kdc = xxx.xxx.xxx.xxx
   admin_server = xxx.xxx.xxx.xxx
   default_domain = xxx.xxx.xxx.xxx
}

[domain_realm]

.eletromotores.com.br = ELETROMOTORES.COM.BR
eletromotores.com.br = ELETROMOTORES.COM.BR

[login]

krb4_convert = true
krb4_get_tickets = false

[logging]

kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log

Obs.: Onde está xxx.xxx.xxx.xxx coloque o ip do Domain Controller e onde está ELETROMOTORES.COM.BR troque pelo domínio da rede respeitando maiúsculas e minúsculas.

Depois altere o arquivo /etc/krb5kdc/kdc.conf:

# vi /etc/krb5kdc/kdc.conf

[kdcdefaults]

kdc_ports = 88

[realms]

ELETROMOTORES.COM.BR = {
   database_name = /var/lib/krb5kdc/principal
   admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
   acl_file = /etc/krb5kdc/kadm5.acl
   key_stash_file = /etc/krb5kdc/stash
   kdc_ports = 88
   max_life = 10h 0m 0s
   max_renewable_life = 7d 0h 0m 0s
   master_key_type = des3-hmac-sha1
   supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
   default_principal_flags = +preauth
}

Obs.: Faça o mesmo do que no arquivo anterior troque ELETROMOTORES.COM.BR pelo domínio usado na rede.

Depois altere o arquivo /etc/default/krb5-kdc:

# vi /etc/default/krb5-kdc

KRB4_MODE=disable
RUN_KRB524D=false

Obs.: Isso é para desabilitar o Kerberos 4.

Em seguida, vamos iniciar a comunicação entre o Linux e o Domain Controller utilizando Kerberos.

# kinit administrator@ELETROMOTORES.COM.BR

Lembrando que estamos usando o domínio ELETROMOTORES.COM.BR como teste, então troque pelo domínio da sua rede.

Será solicitada a senha do usuário "administrator". Depois deste passo use o comando klist e veja se retorna isto:

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@LAB.VIRTUAL
Valid starting Expires Service principal
02/22/07 14:25:47 02/23/07 00:25:47 krbtgt/LAB.VIRTUAL@LAB.VIRTUAL
Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

Caso não seja este o retorno do comando, reveja os passos acima. Gostaria de salientar que encontrei diversos sites com abordagens da instalação do Kerberos no Linux e seus arquivos .conf, mas a única maneira que consegui realizar os testes foi com os arquivos .conf desta maneira descrita no projeto. Portanto se copiarem como está no projeto e só trocar o que for pedido correrá tudo certo. Para testes execute o comando kinit com outros usuários do domínio.

Em seguida vamos editar o arquivo nsswitch.conf:

# vi /etc/nsswitch.conf

Alterar as linhas:

De:

passwd: compat
group: compat

Para:

passwd: compat winbind
group: compat winbind

Página anterior     Próxima página

Páginas do artigo
   1. Sumário
   2. Como tudo funciona
   3. Instalando o Kerberos
   4. Instalando o Winbind
   5. Instalando o Squid
   6. Instalação do Sarg
   7. Instalação do Iptraf
Outros artigos deste autor

Slackware não tem gerenciador de pacotes?! Não tinha!

Configurando uma pasta compartilhada para os usuários do seu Linux

Por que existem mais games para Windows do que para Linux?

Sudoers 1.8.12 - Parte II - Manual

Removendo dependências desnecessárias no Debian

Leitura recomendada

Squid como proxy transparente: Instalando e configurando

Squid atuando como proxy reverso

Autenticando usuários do Squid em um banco de dados MySQL

Squid Plus 2007 para Debian 4

SQUID e as autenticações em NTLM e RADIUS

  
Comentários
[1] Comentário enviado por esrever_fl em 25/08/2010 - 09:56h

Muito Bom, fico imaginando o tempo que leva pra fazer tudo isso.
Parabéns, apesar de eu não ter tanto conhecimento para avaliar achei muito loko.

[]´s

[2] Comentário enviado por removido em 25/08/2010 - 10:19h

Meu camarada, você está de parabéns. Excelente artigo.

Já tinha feito algumas implementações como esta, e quando fiz queria eu ter encontrado algum material de ajuda como este.


Continue assim.


Flw té +

[3] Comentário enviado por danielrsj em 25/08/2010 - 11:30h

Tem uma coisa que nao entendi muito bem aqui.

Eu ja havia feito o squid autenticar no dominio utilizando outros tutoriais daqui do VOL, porem toda vez que o usuario iria utilizar a internet teria que digita o nome de usuario e senha.

Entao mesmo que o usuario estivesse logado no dominio, ao usar a internet teria que digitar novamente o nome de usuario e senha.

Minha pergunta e a seguinte:
Nessa configuracao feita aqui neste tutorial, se o usuario logar no computador com a senha do dominio, ao usar o browser a autenticacao sera feita de forma transparente ou o usuario devera digitar novamente o login dele?

[4] Comentário enviado por removido em 26/08/2010 - 08:30h

Bom dia escrever_fl. Na verdade demora um pouco sim para escrever o artigo mas isso é bom porque vc aprende melhor pois o que seria da prática se não fosse a parte didática. Obrigado pelo comentário e abraço.

[5] Comentário enviado por removido em 26/08/2010 - 08:31h

Bom dia Talysson S muito obrigado pelo seu comentário e fico feliz que tenha gostado.

[6] Comentário enviado por removido em 26/08/2010 - 08:38h

Bom dia danielrsj. Conforme especificado no artigo ele faz sim autenticação pelos usuários do domínio, para isso ele usa wbinfo e essa acl que especifiquei abaixo. Qualquer estou a disposição.
Abraço.

external_acl_type nt_group %LOGIN /usr/lib/squid/wbinfo_group.pl
acl AllowedWindowsGroups external nt_group GrupodoAD
http_access allow AllowedWindowsGroups

[7] Comentário enviado por lucasfs em 26/08/2010 - 10:04h

Olá, gostaria de saber se quando o usuário abrir o navegador e tentar acessar algum site, se vai pedir o login e senha, mesmo sendo login/senha do dominio ou se o browser/proxy irá reconhecer que esta estação já está logada no domínio e não vai pedir autenticação.

Aguardo!

[8] Comentário enviado por removido em 26/08/2010 - 11:32h

Ele irá reconhecer o usuário e senha do usuário autenticado no computador. Só irá pedir a senha quando vc setar o internet explorer para usar o proxy e quando der algum problema no servidor.
Mas sempre que for navegar ele irá reconhecer o usuário autenticado no micro.
Qualquer estou a disposição.
Só lembrando que ele faz essa consulta no domínio devido ao wbinfo e a acl que especifiquei acima.
Abraço.

[9] Comentário enviado por edusachs em 26/08/2010 - 16:27h

Meu amigo,

Acho (acho não, tenho certeza) que o titulo do seu artigo está um pouco errado.
Você integrou o Squid somente com autenticação NTLM.

Nesse teu artigo a autenticação Kerberos não está integrada no Squid, para você integrar a autenticação Kerberos do Active Directory ou MIT Kerberos ou até mesmo do Heimdal Kerberos, você deve usar um modulo chamado squid_auth_kerb no Squid.


[10] Comentário enviado por removido em 26/08/2010 - 17:51h

Bem postado caro colega no título do artigo eu coloquei autenticação ntlm e kerberos. Me expressei mal. Mas no artigo eu coloquei o funcionamento do kerberos e sua descrição e acho que deu pra entender que foi usado o protocolo kerberos como segurança na autenticação entre as estações, isso para proteção contra sniffer e como testes.
Mas me corrija se eu estiver errado.
Obrigado.

[11] Comentário enviado por edusachs em 02/09/2010 - 08:33h

Rafael,

Com certeza o titulo está induzindo o administrador de redes a fazer uma coisa que ele pensa que esta fazendo, mas na verdade ele não está fazendo, quando eu vi o seu artigo eu pensei que iria ver o squid_kerb_auth em funcionamento.

Você deveria de fazer um outro artigo separado ensinando como se faz a integração do Samba com o Active Directory utilizando a autenticação Kerberos, ou, o titulo do artigo deveria ser somente isso: Instalação do Squid com autenticação NTLM

Até

[12] Comentário enviado por removido em 02/09/2010 - 17:44h

Edusachs obrigado pela correção, mas em momento algum eu disse que a autenticação do squid era kerberos mas também não coloquei que era a autenticação da estação de trabalho que autentica em kerberos. Mas como você sugeriu vou trabalhar em outro artigo com autenticação do squid em kerberos. Obrigado novamente.

[13] Comentário enviado por ramos1986 em 14/09/2010 - 14:23h

Parabéns pelo artigo cara, me ajudou pra caramba.

[14] Comentário enviado por removido em 14/09/2010 - 15:49h

Obrigado ramos1986 fico feliz de poder ajudar

[15] Comentário enviado por wandz em 28/09/2010 - 15:33h

Rafael
Estou tendo muitos problemas pra fazer um servidor exatamente como o q vc fez o artigo

eu não consigo adicionar o linux no dominio ad

vou subir 2 vms e vou seguir esse seu tutorial

qual a versão do debian q vc esta usando?

poderia me passar tb seu sources.list?
desde ja obrigado

[16] Comentário enviado por removido em 29/09/2010 - 10:49h

Olá wandz blza?
Cara minha versão do Debian é a Etch. Mas quando estava em fase de testes eu estava usando a versão Lenny e também tive problemas para ingressar o Debian no AD. E como estava com pressa de fazer o servidor usei a versão Etch. Posta suas dificuldades que nos tentaremos fazer juntos e resolvermos o problema.

Abraço

[17] Comentário enviado por wandz em 29/09/2010 - 13:08h

Olá Rafael
Valeu por ter respondido

Então, estou usando o Debian 5.0.6 "Lenny", e o windows 2003 enterprise. tentei com o service pack atualizado, sem service pack

Eu segui seu tutorial igualzinho
orem na hora do net ads join
nao vai

configurei o krb5.conf, smb.conf e nada

vou chegar em casa e subir as vms e posto o erro

mais uma vez obrigado

[18] Comentário enviado por gregorio_rr em 23/11/2010 - 17:19h

Opa!

Não consigo autenticar meu squid pelo AD de forma alguma. Uso openSUSE 11.2 configurado Samba, Kerberos e tudo rodando com o sistema no domínio, quero que o squid autentique no AD pelo usuário que estiver "logado" na estação de forma que não apareça a tela de login no IE. Li seu artigo os posts, mas ainda não funcionou.

Tem alguma dica? Vou reformular meu squid.conf para rodar apenas apenas a autenticação.

E parabéns pelo artigo...

[19] Comentário enviado por removido em 24/11/2010 - 09:22h

Olá bom dia. Primeiro obrigado pela post e pelo agradecimento.
Pelo que entendi você não está conseguindo autenticar via ntlm. O que faz com que o squid autentique no AD é o winbind que você deve ter instalado se seguiu o artigo. Vou colocar os pontos onde pode apresentar erro e com isso não autenticar no AD.

Na hora de configurar o squid.

./configure --prefix=/usr --exec_prefix=/usr --bindir=/usr/sbin --sbindir=/usr/sbin --libexecdir=/usr/lib/squid --sysconfdir=/etc/squid --localstatedir=/var/spool/squid --datadir=/usr/share/squid --enable-auth="ntlm,basic" --enable-basic-auth-helpers="winbind" --enable-ntlm-auth-helpers="winbind" --enable-external-aclhelpers="winbind_group,wbinfo_group" --enable-delay-pools --enable-removal-policies --enable-underscores --enable-cache-digests --disable-ident-lookups --enable-truncate --enablearp-acl --with-winbind-auth-challenge

Ai ele diz para usar o winbind_group e wbinfo_group entre outras configurações.
A segunda coisa que é fundamental é

auth_param ntlm program /usr/bin/ntlm_auth LAB/DC01 --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm use_ntlm_negotiate off
auth_param ntlm children 10
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 5 minutes

external_acl_type nt_group %LOGIN /usr/lib/squid/wbinfo_group.pl
acl AllowedWindowsGroups external nt_group GrupodoAD
http_access allow AllowedWindowsGroups

Essas partes são as fundamentais para se autenticar o squid com o AD. Mas qualquer coisa posta ae que eu te ajudo.
Obrigado.

[20] Comentário enviado por rickbrandao em 24/05/2011 - 15:04h

Cara, Parabens pelo artigo, mas qd vou ingressar com o proxy no dominio, ingresso tranquilo com o comando net ads join -U administrator -S ELETROMOTORES, quando digito o comando wbinfo -t tudo tranquilo, mas qd digito wbinfo -u, aparece apenas os usuários locais do linux, e outra meu servidor AD nao deixa mais logar depois que ingresso com a maquina linux.

[21] Comentário enviado por removido em 24/05/2011 - 16:42h

Cara seguinte, desculpe as perguntas mas é só para eu me interar com seu problema:
Primeiro: Você tem um domínio na sua rede
Segundo: Seu active directory é um win 2003 ou superior

E cara esse comando que você descreve acima foi o comando que usei na minha rede pois meu usuário era um administrator e meu domínio era ELETROMOTORES. Bom depois de feito isso ai ela me mostrar com o comando wbinfo os meus usuários e grupos do AD. O que parece estar acontecendo ai é que vc não ingressou em domínio algum e o seu comando wbinfo está te trazendo os usuários e grupos do seu server linux.
Qualquer estamos ai. Abraço

[22] Comentário enviado por rickbrandao em 25/05/2011 - 14:13h

Olá amigão, bom meu AD é um 2008 enterprise sp1, entendi seu questionamento, realmente estou colocando meu dominio, sendo que o mesmo está configurado em Maiusculo. Então, tendo ingressar com o usuário "administrador" mesmo.
Estou usando o Ubuntu server 10.04.
Erro au tentar entrar no dominio
root@PROXY:/etc/samba# net ads join -U administrador -S SUFRACGPAM.BR
Enter administrador's password:
[2011/05/25 14:14:06, 0] libads/sasl.c:819(ads_sasl_spnego_bind)
kinit succeeded but ads_sasl_spnego_krb5_bind failed: Server not found in Kerberos database
Failed to join domain: failed to connect to AD: Server not found in Kerberos database
Mas o computador aparece no AD.


[23] Comentário enviado por rickbrandao em 25/05/2011 - 15:35h

Consegui meu amigo ingressar no dominio mas quando digito
root@PROXY:/etc/samba# wbinfo -t
checking the trust secret via RPC calls failed
error code was NT_STATUS_INVALID_COMPUTER_NAME (0xc0000122)
Could not check secret

esse erro é apresentado.

[24] Comentário enviado por removido em 25/05/2011 - 16:57h

Cara seguinte quando fiz essa implementação eu utilizei o windows 2003 server, e acredito que com o windows 2008 você vai encontrar mais resistência para concluir essa instalação. O que pode ser feito é o seguinte:

Crie manualmente uma entrada dns no seu server para o servidor Linux, depois coloque em seu resolv.conf o seu domínio e o ip do servidor dns e revise os passos. Mas procure rever os arquivos do kerberos no linux pois lá tem que ter os dados corretos de sua rede e de seu dns server. Mas cara uma dica, use essa instalação mas pule a parte do kerberos, pois nessa implantação eu usei o kerberos apenas como teste, pois a troca das senhas entre os micros de sua rede e seu servidor squid é feito através de ntlm e não kerberos. Qualquer chama ae abraço.

Esse último erro que vc relatou é devido ao dns server, faça testes entre seu linux e seu dns e outra revise o seu resolv.conf. Mas eu lembro deste erro que vc está falando eu vou revisar uns documentos meus aqui e vou te mandar. Araço.

[25] Comentário enviado por rickbrandao em 25/05/2011 - 18:40h

Cara ele usa so o samba? ou também o samba-common e o client?

[26] Comentário enviado por removido em 26/05/2011 - 14:10h

Na minha implementação instalei o samba completo.

[27] Comentário enviado por markennedy em 15/03/2012 - 18:32h

olá amigo,

seu artigo ficou muito bom, parabens.

Estou tentando fazer a mesma configuração aqui na minha rede mas estou tendo alguns problemas.
Meu servidor já está integrado com o AD, a autenticação do kerberos funciona com através do kinit -U user
consigo lista todos os grupos do AD e users do AD.

PORÉM

Na hora de criar o cache do Squid tenho o seguinte problema:

#squid -z

#squid -z
2012/03/15 18:25:31| AuthNTLMConfig::parse: unrecognised ntlm auth scheme parameter 'use_ntlm_negotiate'
2012/03/15 18:25:31| AuthNTLMConfig::parse: unrecognised ntlm auth scheme parameter 'max_challenge_reuses'
2012/03/15 18:25:31| AuthNTLMConfig::parse: unrecognised ntlm auth scheme parameter 'max_challenge_lifetime'
2012/03/15 18:25:31| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2012/03/15 18:25:31| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2012/03/15 18:25:31| WARNING: For now we will assume you meant to write /22
2012/03/15 18:25:31| WARNING: (A) '10.100.56.0/22' is a subnetwork of (B) '::/0'
2012/03/15 18:25:31| WARNING: because of this '10.100.56.0/22' is ignored to keep splay tree searching predictable
2012/03/15 18:25:31| WARNING: You should probably remove '10.100.56.0/22' from the ACL named 'all'
2012/03/15 18:25:31| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2012/03/15 18:25:31| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2012/03/15 18:25:31| WARNING: For now we will assume you meant to write /16
2012/03/15 18:25:31| WARNING: (A) '10.1.0.0/16' is a subnetwork of (B) '::/0'
2012/03/15 18:25:31| WARNING: because of this '10.1.0.0/16' is ignored to keep splay tree searching predictable
2012/03/15 18:25:31| WARNING: You should probably remove '10.1.0.0/16' from the ACL named 'all'
2012/03/15 18:25:31| WARNING: Netmasks are deprecated. Please use CIDR masks instead.
2012/03/15 18:25:31| WARNING: IPv4 netmasks are particularly nasty when used to compare IPv6 to IPv4 ranges.
2012/03/15 18:25:31| WARNING: For now we will assume you meant to write /32
2012/03/15 18:25:31| Creating Swap Directories


Uso o RedHat 6.2 e o AD é de um Windows 2008 R2.
versão do squid: squid-3.1.10-1.el6_2.1.x86_64

Através do comando:

#ntlm_auth --help

Ele me mostra as seguintes opções, mas como não tenho experiências com o Squid, estou precisando de ajuda.

Usage: ntlm_auth [OPTION...]
--helper-protocol=helper protocol to use operate as a stdio-based helper
--username=STRING username
--domain=STRING domain name
--workstation=STRING workstation
--challenge=STRING challenge (HEX encoded)
--lm-response=STRING LM Response to the challenge (HEX encoded)
--nt-response=STRING NT or NTLMv2 Response to the challenge (HEX encoded)
--password=STRING User's plaintext password
--request-lm-key Retrieve LM session key
--request-nt-key Retrieve User (NT) session key
--use-cached-creds Use cached credentials if no password is given
--diagnostics Perform diagnostics on the authentictaion chain
--require-membership-of=STRING Require that a user be a member of this group (either name or SID) for
authentication to succeed
--pam-winbind-conf=STRING Require that request must set WBFLAG_PAM_CONTACT_TRUSTDOM when krb5 auth
is required

Agradeço desde já;

[28] Comentário enviado por lndr.simon em 10/04/2012 - 14:37h

Otimo, simples e objetivo

[29] Comentário enviado por tbksly em 17/04/2012 - 15:30h

Boa tarde. otimo material. bem detalhado e complete.
inclusive muito bom por fornecer a parte teorica dos mecanismos utilizados.

tabem estou enfrentando problemas com algumas sintaxes:
2012/04/17 15:56:30| unrecognised ntlm auth scheme parameter 'use_ntlm_negotiate'
2012/04/17 15:56:30| unrecognised ntlm auth scheme parameter 'max_challenge_reuses'
2012/04/17 15:56:30| unrecognised ntlm auth scheme parameter 'max_challenge_lifetime'


Pelo que vi estes parametros foram retirados entao tentei comentando estas linhas mas ele nao consegue autenticar o usuario do dominio no navegador.
consigo listar os usuarios no linux mas quanto faço o teste no navegador da minha maquina ele nao aceita minha credencial do dominio.


[30] Comentário enviado por patrickpfp em 30/07/2013 - 10:52h

Ótimo material, mas fiquei perdido quando a autenticação por grupos.

Como seria para o squid buscar os grupos do AD?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts