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: 126.202 ]

Por: Rafael da Silva Rosa em 24/08/2010 | Blog: http://rafaelsuporteonline.blogspot.com.br/


Instalação do Sarg



Instalando e configurando o Sarg:

# apt-get install update
# apt-get install sarg


Após o processo de instalação, o principal arquivo de configuração denominado 'sarg.conf' poderá ser localizado no diretório /etc/squid. Apenas para efeitos de backup, pois é sempre bom se ter o arquivo original em reserva para eventuais problemas que possam surgir.

Crie o seu próprio 'sarg.conf':

# touch sarg.conf

Edite o arquivo utilizando o seu editor de preferência (no meu caso o mcedit) e adicione o conteúdo abaixo ao mesmo:

# Script para configuração do Sarg [sarg.conf]
# Desenvolvido por Júnior Jones de Menezes

# TAG: Linguagem
language Portuguese

# TAG: Caminho para o arquivo Access.log
access_log /etc/squid/access.log

# TAG: Gráficos
graphs yes
graph_days_bytes_bar_color green

# TAG: Título do Relatório
title "[Acessos a Internet]"

# TAG: Visual
font_face Arial
header_color #666666
header_bgcolor #EEEEEE
header_font_size 9px
title_font_size 11px
background_color #FFFFFF
text_color #666666
text_bgcolor #FFFFFF
title_color #009999

# TAG: Temporários
temporary_dir /tmp

# TAG: Diretório de Saída (Modifique de acordo com sua necessidade)
output_dir /var/www/squid-reports

# TAG: Top Users
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse

# TAG: URL Excluídas do Relatório
exclude_hosts /etc/squid/sarg.hosts

# TAG: Filtragem de Strings
exclude_string /etc/squid/sarg.strings

# TAG: Filtragem de Usuários
exclude_users /etc/squid/sarg.users

# TAG: Formato de Data
date_format e

# TAG: Limite de Logs [0 = Sem limites]
lastlog 0

# TAG: Mostrar IP
user_ip no

# TAG: Mostrar Usuário
usertab /etc/squid/sarg.usertab

# TAG: Gerando Relatório
remove_temp_files yes
index yes
overwrite_report yes
records_without_userid ignore
use_comma no
topsites_num 100
topsites_sort_order BYTES D
exclude_codes /etc/squid/sarg.exclude_codes
max_elapsed 28800000
report_typie topsites users_sites sites_users date_time denied auth_failures site_user_time_date
long_url no
show_successful_message no
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
topuser_num 0 download_suffix "zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,mdb,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"

Algumas TAGs podem ser modificadas sem maiores problemas, pois tratam-se apenas de formatação dos relatórios, outras tratam-se dos caminhos de arquivos importantes ao bom funcionamento do Sarg e o restante diz respeito a forma que o mesmo vai funcionar, por isso, é de alta importância uma revisão com fins de verificar se existe alguma discrepância entre os dados do sarg.conf aqui sugerido e as características de seu servidor.

As TAGs apresentadas abaixo são exatamente as que indicarão ao Sarg que nos relatórios gerados por ele deverá aparecer ao invés do endereço IP, o nome do usuário ou máquina devidamente setado por você.

# TAG: Mostrar IP
user_ip no

# TAG: Mostrar Usuário
usertab /etc/squid/sarg.usertab

Logo após o arquivo criado e salvo, procure no mesmo diretório (/etc/squid) um arquivo denominado 'sarg.usertab', se ele não existir, fique calmo (hehehe), crie-o você mesmo. Este arquivo será altamente importante para que nosso trabalho tenha o devido sucesso. É nele que o administrador irá setar os IPs das máquinas e o nome equivalente as mesmas. O conteúdo a ser adicionado no mesmo é exemplificado abaixo, sendo mudado de acordo com sua rede.

Exemplo:

192.168.52.2 gabriel
192.168.52.3 daniel
192.168.52.4 rafael

Esta é a forma correta do arquivo, qualquer outra forma não dará o resultado esperado. Na ÚLTIMA LINHA do arquivo 'sarg.usertab' adicione o caractere '#'.

Como visto acima, é o 'sarg.usertab' que possibilita ao Sarg mostrar nomes amigáveis ao invés de endereços IPs, fator muito útil em redes de grande porte e não menos importante em pequenas redes.

Gerando os relatórios

Criaremos agora o script que irá orientar ao Sarg sobre o total de dias que se deseja apresentar nos relatórios. Crie um arquivo dentro do diretório /etc/squid denominado 'sarg.sh':

# touch diario.sh

Dê permissão total:

# chmod 777 sarg.sh

Para gerar os relatórios diariamente, insira o conteúdo abaixo no arquivo recém-criado (/etc/squid/sarg.sh):

#!/bin/bash
INICIO=$(date --date "0 days ago" +%d/%m/%Y)
FIM=$(date --date "0 day ago " +%d/%m/%Y)
sarg -f /etc/squid/sarg.conf -d $INICIO-$FIM -p -x -z

Para os relatórios semanalmente crie outro arquivo com o conteúdo:

# touch semanal.sh

#!/bin/bash
INICIO=$(date --date "7 days ago" +%d/%m/%Y)
FIM=$(date --date "0 day ago " +%d/%m/%Y)
sarg -f /etc/squid/sarg.conf -d $INICIO-$FIM -p -x -z

Para gerar os relatórios mensalmente outro arquivo:

# touch mensal.sh

#!/bin/bash
INICIO=$(date --date "31 days ago" +%d/%m/%Y)
FIM=$(date --date "0 day ago " +%d/%m/%Y)
sarg -f /etc/squid/sarg.conf -d $INICIO-$FIM -p -x -z

Muitos usam o crontab para gerar os relatórios, mas eu os gero executando os executáveis quando eu quero pois minha rede é pequena e não preciso dos relatórios sempre. Mas fica a dica.

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

Plugin MSofficeKey para OCS Inventory

Site Survey Plan

Script de firewall e análise de log

Vírus, a mesma praga mas diferentes entre plataformas

Servidor Openfire integrado ao Active Directory (Nível de Floresta 2008 R2)

Leitura recomendada

Squid 3 como proxy transparente + firewall Iptables

Gerenciando relatórios do SARG

SQUID autenticado - Bloqueando o acesso dos usuários por grupos

SUSE Linux - Squid autenticando no Active Directory (AD)

Proxy Squid com autenticação + Sarg + Webmin

  
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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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 rafaelrsr 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
[email protected]:/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
[email protected]:/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 rafaelrsr 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 rafaelrsr 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