Squid autenticando no AD utilizando o Debian Squeeze

E ai galera, aqui eu vou abordar a configuração do Squid no Debian Squeeze autenticando no AD, e vamos instalar o lightsquid um gerador de relatórios show de bola.

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialjessie_en para que não falte nenhum pacote ou configuração.

  1. Endereço Ip do Proxy: 192.168.1.30
  2. Endereço Ip do Ad PDC: 192.168.1.50
  3. Domínio utilizado: douglasqsantos.com.br
  4. Habilitar o dns do Windows a fazer atualizações seguras e não seguras, pois vamos inserir o centos no domínio.

Grupos que precisam ser criados no AD, não esqueça de inserir os usuários nos grupos ;)

  1. ti-admin
  2. matriz-diretoria
  3. matriz-gerencia
  4. matriz-administracao
  5. matriz-logistica

Vamos começar acertando algumas variáveis do sistema

export DEBIAN_PRIORITY=critical
export DEBIAN_FRONTEND=noninteractive

Agora vamos instalar os pacotes necessários para o samba ser inserido no domínio AD

aptitude update && aptitude dist-upgrade -y
aptitude install -y samba samba-common smbclient winbind krb5-config libpam-krb5

Agora vamos voltar as variáveis do ambiente ao normal

unset DEBIAN_PRIORITY
unset DEBIAN_FRONTEND

Vamos agora fazer um backup do arquivo /etc/resolv.conf

cp -Rfa /etc/resolv.conf{,.bkp}

Agora vamos ajustar o arquivo /etc/resolv.conf

vim /etc/resolv.conf
#Domínio e Ip do servidor AD
search douglasqsantos.com.br
nameserver 192.168.1.50

Agora vamos testar se o servidor ad esta respondendo corretamente

nslookup douglasqsantos.com.br
Server:   192.168.1.50
Address:  192.168.1.50#53

Name: douglasqsantos.com.br
Address: 192.168.1.50

Agora vamos atualizar o relógio do sistema

ntpdate -u ntp.usp.br

Agora vamos fazer backup do arquivo de configuração do cliente kerberos

cp -Rfa /etc/krb5.conf{,.bkp}

Agora vamos configurar o arquivo /etc/krb5.conf

vim /etc/krb5.conf
[libdefaults]
default_realm = DOUGLASQSANTOS.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]
DOUGLASQSANTOS.COM.BR = {
kdc = 192.168.1.50
admin_server = 192.168.1.50:749
default_server = 192.168.1.50
}
[domain_realm]
.douglasqsantos.com.br=DOUGLASQSANTOS.COM.BR
douglasqsantos.com.br=DOUGLASQSANTOS.COM.BR
[login]
krb4_convert = true
krb4_get_tickets = false
[kdc]
profile = /etc/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
[logging]
default = file:/var/log/krb5libs.log
kdc = file:/var/log/krb5kdc.log
admin_server = file:/var/log/kadmind.log 

Agora vamos acertar o arquivo /etc/security/limits.conf para não ficar mostrando erro no samba

vim /etc/security/limits.conf
[...]
#colocar no final do arquivo
root hard nofile 131072
root soft nofile 65536
mioutente hard nofile 32768
mioutente soft nofile 16384

Agora vamos fazer um backup do arquivo de configuração do samba

cp -Rfa /etc/samba/smb.conf{,.bkp}

Agora vamos a configuração do samba deixe o arquivo como no exemplo

vim /etc/samba/smb.conf
[global]
  workgroup = DOUGLASQSANTOS
  realm = DOUGLASQSANTOS.COM.BR
  netbios name = DEBIAN
  server string = Proxy Server
  security = ADS
  auth methods = winbind
  socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  load printers = No
  printcap name = cups
  disable spoolss = Yes
  local master = No
  domain master = No
  winbind cache time = 15
  winbind enum users = Yes
  winbind enum groups = Yes
  winbind use default domain = Yes
  idmap config * : range = 10000-15000
  idmap config * : backend = tdb
  idmap uid = 10000-15000
  idmap gid = 10000-15000
  template shell = /bin/bash
  template homedir = /home/%U

Vamos agora fazer um acerto no arquivo /etc/init.d/winbind para que o winbind não fique fazendo cache das consultas no ad

vim /etc/init.d/winbind
[...]
#na linha 36
start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- no-caching #\$WINBINDD_OPTS

Agora temos que fazer mais um acerto agora precisamos o ntlm_auth precisa de privilegio do winbind para funcionar então vamos adicionar o squid no grupo do winbind.

gpasswd -a proxy winbindd_priv 
Adicionando usuário proxy ao grupo winbindd_priv

Vamos fazer um backup do arquivo /etc/nsswitch.conf

cp /etc/nsswitch.conf{,.bkp}

Agora temos que acertar o arquivo /etc/nsswitch.conf que controla aonde vai ser consultado usuários e senhas deixe o arquivo como abaixo.

vim /etc/nsswitch.conf
passwd:         compat winbind
group:          compat winbind
shadow:         compat
 
hosts:          files dns
networks:       files
 
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
 
netgroup:       nis

Agora vamos reiniciar o samba e o winbind para eles pegarem a nova configuração

/etc/init.d/samba restart
/etc/init.d/winbind restart

Agora temos que inserir a maquina no domínio AD

net ads join douglasqsantos.com.br -U administrator
Enter administrator's password: senha
Using short domain name -- DOUGLASQSANTOS
Joined 'DEBIAN' to realm 'douglasqsantos.com.br'

Caso precise retirar a maquina do domínio da forma correta (Excluindo as ligações dela no AD), podemos fazer da seguinte forma

net ads leave douglasqsantos.com.br -U Administrator
Enter Administrator's password:
Deleted account for 'DEBIAN' in realm 'DOUGLASQSANTOS.COM.BR'

Agora temos que reiniciar os serviços novamente

/etc/init.d/samba restart
/etc/init.d/winbind restart

Agora já podemos testar a conexão do samba com o AD

wbinfo -t
checking the trust secret for domain DOMINIO via RPC calls succeeded

Agora vamos checar os grupos que temos no domínio.

wbinfo -g
winrmremotewmiusers__
domain computers
domain controllers
schema admins
enterprise admins
cert publishers
domain admins
domain users
domain guests
group policy creator owners
ras and ias servers
allowed rodc password replication group
denied rodc password replication group
read-only domain controllers
enterprise read-only domain controllers
cloneable domain controllers
dnsadmins
dnsupdateproxy
ti-admin
matriz-diretoria
matriz-gerencia
matriz-administracao
matriz-logistica

Agora vamos chegar os usuários do domínio

wbinfo -u
DEBIAN\nobody
DEBIAN\douglas
administrador
convidado
krbtgt
douglas

Fazendo backup dos arquivos da pam

cp -Rfa /etc/pam.d{,.bkp}

Vamos agora acertar a pam para que o sistema pegue primeiro o usuário e senha local e depois do AD caso precisarmos utilizar os usuários locais arquivo da pam /etc/pam.d/common-password

vim /etc/pam.d/common-password
password        sufficient                      pam_unix.so
password        requisite                       pam_krb5.so minimum_uid=1000
password        [success=2 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
password        [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so

Outra opção interessante que podemos utilizar é que podemos logar via ssh utilizando os usuários do AD porém temos que fazer mais um acerto na pam em /etc/pam.d/common-session

vim /etc/pam.d/common-session
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so 
session optional                        pam_winbind.so 
session optional                        pam_mkhomedir.so skel=/etc/skel umask=0027

Reinicie o servidor para ele carregar todas as novas configurações

reboot

Instalação e Configuração do Squid

Vamos precisar adicionar o repositório do wheezy para termos a versão mais atual do squid, pois até a versão 3.1.19 temos problemas de lentidão e outros problemas que prejudicam a navegação.

vim /etc/apt/sources.list
#REPOSITORIO PARA DO WHEEZY
deb ftp://ftp.br.debian.org/debian wheezy main contrib non-free
deb-src ftp://ftp.br.debian.org/debian wheezy main contrib non-free

Agora vamos fazer um update dos repositórios e vamos mandar instalar o squid

aptitude update && aptitude install squid3 squid3-common squid3-cgi -y

Comentar as linhas do arquivo “/etc/apt/sources.list” adicionadas para o download do squid.

vim /etc/apt/sources.list
#REPOSITORIO PARA DO WHEEZY
#deb ftp://ftp.br.debian.org/debian wheezy main contrib non-free
#deb-src ftp://ftp.br.debian.org/debian wheezy main contrib non-free

Vamos fazer um backup do arquivo de configuração do /etc/squid3/squid.conf

cp -Rfa /etc/squid3/squid.conf{,.bkp}

Agora vamos a configuração do squid

vim /etc/squid3/squid.conf
#Porta padrão do proxy
http_port 3128

#Endereco de E-mail do administrador do proxy
cache_mgr suporte@douglasqsantos.com.br

#Nao faz cache de dados de formularios html,em de resultados de programas cgi                      
#hierarchy_stoplist cgi-bin ?

#Cria uma access control list, baseando-se na url e utilizando exp. regulares nesta situacao   
#foi criado uma exp. regular para cgi e ?.        
acl QUERY urlpath_regex cgi-bin \?

#Nao faz cache da acl QUERY                        
cache deny QUERY

#Define o tamonho maximo de um objeto para seu armazenamento no cache local                 
maximum_object_size 4096 KB

#Define o tamanho minimo de um objeto para seu armazenamento no cache local                 
minimum_object_size 0 KB

#Define o tamanho maximo de um objeto para seu armazenamento no cache de memoria            
maximum_object_size_in_memory 64 KB

#Definicao da quantidade de memoria ram a ser alocada para cache                                
cache_mem 60 MB

#Para nao bloquear downloads                       
quick_abort_min -1 KB

# Resolve um problema com conexões persistentes que ocorre com certos servidores,
# e que provoca delays em nosso cache.
detect_broken_pconn on

# Provoca um ganho de performance ao usar conexões Pipeline (requisições em paralelo)
pipeline_prefetch on


#Para cache de fqdn
fqdncache_size 1024

#Tempo de atualizacao dos objetos relacionados aos prot ftp, gopher e http.  
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

#Definicao da porcentagem do uso do cache que fara o squid descartar os arquivos mais antigos                                    
cache_swap_low 90
cache_swap_high 95

#Logs   
access_log /var/log/squid3/access.log squid
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log

#Define a localizacao do cache de disco, tamanho, qtd de diretorios pai, e por fim a qtd de dir filhos                   
cache_dir aufs /var/spool/squid3 100 16 256

#Controle do arquivo de Log
logfile_rotate 10

#Arquivo que contem os nomes de maquinas           
hosts_file /etc/hosts

#Maquinas que nao precisaram de autenticacao   
acl liberados src "/etc/squid3/regras/liberados"
http_access allow liberados

#liberar o acesso ao site da caixa que está com problemas 
acl caixa dstdomain .caixa.gov.br
always_direct allow caixa
cache deny caixa

#MACS que estão liberados.
acl macliberado   arp "/etc/squid3/regras/mac_liberado"
http_access allow macliberado


#### Autenticao no Windows 2008 via WINBIND
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy server
auth_param basic credentialsttl 2 hours
external_acl_type ad_group ttl=600 children=35 %LOGIN /usr/lib/squid3/wbinfo_group.pl

### ACL Padroes
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl Safe_ports port 1080
acl Safe_ports port 1863
acl Safe_ports port 8443 # https
acl Safe_ports port 5222 # gTalk
acl Safe_ports port 5223 # gTalk
acl Safe_ports port 47057 # torrent

acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# Seguranca (Protecao do Cache)
acl manager proto cache_object

#Limita conexeos HTTP                              
acl connect_abertas maxconn 8

#sites que não serão feito cache geralmente bancos                  
acl NOCACHE url_regex "/etc/squid3/regras/direto" \?
no_cache deny NOCACHE

#-----------------------------------------------------------------------------------#
#       Nome ACL                TIPO                    Nome Grupo AD               #
#-----------------------------------------------------------------------------------#
acl    ti-admin                 external ad_group          ti-admin
acl    matriz-diretoria         external ad_group          matriz-diretoria
acl    matriz-gerencia          external ad_group          matriz-gerencia
acl    matriz-administracao     external ad_group          matriz-administracao
acl    matriz-logistica         external ad_group          matriz-logistica

# Whitelists / Blacklists
acl downloads         urlpath_regex -i "/etc/squid3/regras/downloads"
acl sites-liberados   url_regex     -i "/etc/squid3/regras/sites_liberados"
acl sites-proibidos   url_regex     -i "/etc/squid3/regras/sites_proibidos"
acl sites-bloqueados  url_regex     -i "/etc/squid3/regras/sites_bloqueados"
acl sites-gerencia    url_regex     -i "/etc/squid3/regras/sites_gerencia"
acl sites-administracao url_regex   -i "/etc/squid3/regras/sites_administracao"
acl sites-logistica   url_regex     -i "/etc/squid3/regras/sites_logistica"

#Bloquear determinados usuários autenticados
acl usu_bloqueados proxy_auth "/etc/squid3/regras/usu_bloqueados"

#Controle de acesso por horário aqui, vamos liberar o acesso no horário do almoço
#aqui os usuário vão poder acessar alguns sites diferenciados entre as 12:00 até as 13:00
acl almoco time MTWHFAS 12:00-13:00

#Agora vamos criar uma regra para garantir que os usuários que vão acessar no almoço estão autenticados
acl autenticados proxy_auth REQUIRED

#Agora vamos criar uma lista de sites que eles vão poder acessar no horário do almoço
acl sites-almoco   url_regex     -i "/etc/squid3/regras/sites_almoco"


# Permissoes de Acesso
http_access allow ti-admin
http_access allow sites-liberados
http_access deny  sites-proibidos
http_access allow matriz-diretoria
#Aqui vamos cruzar as acls para garantir que os usuários que vão acessar os sites no almoço estejam autenticados
http_access allow almoco autenticados sites-almoco
http_access deny  sites-bloqueados 
http_access deny  downloads
http_access deny  usu_bloqueados
http_access allow matriz-administracao sites-administracao
http_access allow matriz-logistica sites-logistica
#Acesso ao site da caixa
#http_access allow caixa matriz-administracao
#http_access allow caixa matriz-diretoria
http_access deny all
http_reply_access allow all
icp_access allow all
miss_access allow all
visible_hostname proxy.douglasqsantos.com.br
error_directory /usr/share/squid3/errors/pt-br
#cache_effective_group proxy
cache_effective_user proxy
coredump_dir /var/spool/squid3

Galera o site da caixa já é uma merda de natureza, e o maldito ainda tava dando uns paus quando o squid vai acessar, analisando os pacotes percebi que o dns demora pra retornar uma requisição válida para o squid por isso a demora pra navegar, a maneira que eu resolvi foi adicionando os endereços da caixa no /etc/hosts da da seguinte forma

vim /etc/hosts
[...]
200.201.161.106 www.caixa.gov.br        www.caixa.gov.br
200.201.162.210 www1.caixa.gov.br       www1.caixa.gov.br

Com isso o site da caixa vai retornar mais rapido par ao squid. ;)

Agora vamos criar o diretório para armazenar as regras do squid

mkdir -p /etc/squid3/regras

Arquivo com os ips que não precisaram de autenticação e não terão bloqueio

vim /etc/squid3/regras/liberados
#Arquivo que contem os ips que não vão passar por autenticação e não terão bloqueio
10.13.0.1
10.13.0.2

Arquivo com os macs que não precisaram de autenticação e não terão bloqueio

vim /etc/squid3/regras/mac_liberado
#MACS que não precisaram de autenticação e não terão bloqueio.
01:01:01:01:01:01

Arquivo com os sites que não vamos fazer cache

vim /etc/squid3/regras/direto
#Sites que não vamos fazer cache
bradesco
itau
caixa.gov
hsbc
squid-cache

Arquivo com os sites que vão poder ser acessados no horário do almoço das 12:00 as 13:00

vim /etc/squid3/regras/sites_almoco
#Sites que vão poder ser acessados no horário de almoço
facebook
gmail

Arquivo com as extensões bloqueadas ou seja as extensões que os usuários não vão poder baixar

vim /etc/squid3/regras/downloads
#Arquivo com as extensões que os usuários não vão poder baixar
.ace$
.af$
.afx$
.asf$
.asx$
.avi$
.bat$
.cmd$
.com$
.cpt$
.divx$
.dms$
.dot$
.dvi$
.ez$
.gl$
.hqx$
.kar$
.lha$
.lzh$
.mov$
.movie$
.mp2$
.mp3$
.mpe$
.mpeg$
.mpg$
.mpga$
.pif$
.qt$
.ra$
.rm$
.rpm$
.scr$
.spm$
.vbf$
.vob$
.vqf$
.wav$
.wk$
.wma$
.wmv$
.wpm$
.wrd$
.wvx$
.wz$

Arquivo com os sites que vão estar liberados para todos os usuários autenticados

vim /etc/squid3/regras/sites_liberados
#sites que vão estar liberados para todos os usuários autenticados
squid-cache
site_da_empresa

Arquivo com os sites que estão proibidos para todos os usuários

vim /etc/squid3/regras/sites_proibidos
#Sites que vão estar proibidos para todos os usuários
041vip
4shared
abusado
acervoamador
acompanhante
amador
amante
anal
aninha
anus
arquivonet
arquivosex
arrebitadas
arrombadas
baixaki
bangbus
batepapo
bizarro
boceta
boneca
bronha
bruninha
buceta
bunda
buttman
cabaret
calcinhas
camerasex
caralho
caricia
carlinha
chantily
checkip.dyndns.org
chupar
classisex
climax
clitoris
cocota
curitibasexo
curitibastarnight
cwbvip
cybersex
delicia
deliciosas
delirius
deliriusonline
easyquarto
ebuddy
ejacula
erotic
erotismo
estupro
foda
foder
fuck
furacao
galinhas
gang-bang
gangbang
gata
gatinhas
gay
getmyip.co.uk
getmyip.org
gostosa
gostoso
homosexual
hustler
idealcompany
juggworld
lolita
malicia
marcinha
megaupload
molhadinhas
morango.ig
ninfeta
ninfetinha
orgia
orkut
parperfeito
partypoker
penis
penthouse
pica
pinto
playboy
porno
private
pubshop
pussy
puta
putinha
redtube
revistabrazil
sandrinha
secretas
sedutoras
sensual
sex
sexlive
sexo
sexxxyvideo
sexy
sexyclube
shemale
swing
talk
teen
trafficconverter.biz
transa
travestis
tufos
vagina
virgen
youtube
zipmail
zoofilia

Arquivo que vai conter os sites bloqueados somente a diretoria pode acessar esses sites

vim /etc/squid3/regras/sites_bloqueados
#Sites que estão bloqueados para todos os usuários menos a diretoria
208.80.152.2
4shared
adorocinema
afterhour
altoagito
altosagitos
amazon
americanas
aoe
aondenamoro
apolar
atleticoparanaense
atleticopr
atoouefeito
atrativa
atrativagames
aumentonatural
baixaki
batepapo
blog
blogdocebolinha
blogspot
blowjob
bluebell
bondedorole
brasilviagem
caiobafm
caixabranca
caixapreta
caixapretta
cartasdeamor
cartoon
chantily
cineplayers
cocemsuacasa
collider
comercioeletronico
corinthians
corinthians
coritiba
corpoperfeito
cowboysdoasfalto
coxa
coxanautas
declaracaodeamor
ebuddy
facearfacebook
films
filmschoolrejects
fimdostempos
flogao
forumpcs
furacao
furiajovem
fusion
futebol
galinhas
games
globo.com
gonzagaaluguel
gravatar
guiademulher
guruweb
gvt
hartmannimoveis
humortadela
icq
idolos
ig
imoveiscuritiba
imoveisportoseguro
imperioalviverde
investeloto
jovemnerd
jovempanfm
jpfm
jtavaresimoveis
judao
last.fm
latinoreview
lojadojardim
marisa
meebo
meebo.com
megaupload
mercadolivre
metal-archives
meucarronovo
morehate
morte
mtv
music
myspace
namoro
nokia
ofuxico
orkut
padrereginaldomanzotti
palmeiras
parperfeito
pindavale
pontofrio
portal3.casasoft
portalnoivas
powerscrap
radio
rapidshare
samsung
shop
shopfacil
shopfacil
shopinvest
shoppingtotal
siemens
socarrao
sonico
sony
superdownload
talk
televisao
teologia
teologica
tim
timmusicstore
tirinhas
tribal
twitter
upload.wikipedia.org
videolar
violencia
virtua
vivo
vocoxa
webmotors
webnoivas
wikia
wikimedia
wikipedia.com.br
wikipedia.org
yahoo
youtube
zipmail

Sites que a gerencia vai ter acesso

vim /etc/squid3/regras/sites_gerencia
#Sites que o grupo de gerencia vai ter acesso
terra 
uol
google
gerencia.siteempresa
bradesco
itau
caixa.gov
hsbc
.gov

Sites que a administração vai ter acesso

vim /etc/squid3/regras/sites_administracao
#Sites que o grupo adminstracao vai ter acesso
adm.siteempresa
bradesco
itau
hsbc
caixa.gov

Sites que a logística vai ter acesso

vim /etc/squid3/regras/sites_logistica
#Sites que o grupo logistica vai ter acesso
logistica.siteempresa

Bloquear determinados usuários autenticados

vim /etc/squid3/regras/usu_bloqueados
#Usuários que vão ser bloquados no proxy
jose.silva

Agora crie os grupos e usuários no AD

Vamos consultar os nossos usuários do Ad

wbinfo -u
DEBIAN\nobody
DEBIAN\douglas
administrator
guest
krbtgt
douglas

Agora crie os grupos e usuários no AD, caso ainda não tenha feito isso

wbinfo -g
winrmremotewmiusers__
domain computers
domain controllers
schema admins
enterprise admins
cert publishers
domain admins
domain users
domain guests
group policy creator owners
ras and ias servers
allowed rodc password replication group
denied rodc password replication group
read-only domain controllers
enterprise read-only domain controllers
cloneable domain controllers
dnsadmins
dnsupdateproxy
ti-admin
matriz-diretoria
matriz-gerencia
matriz-administracao
matriz-logistica

Agora vamos consultar o grupo ti-admin para conferir os usuários que fazem parte deste grupo.

wbinfo --group-info=ti-admin
ti-admin:x:10000:douglas

Como pode ser notado nós temos o usuário Douglas no grupo ti-admin

Agora vamos consultar informações sobre o nosso usuário douglas

wbinfo --user-groups=douglas
10001
10000

O nosso usuário pertence a dois grupos do domínio o grupo 10001 e o 10000 vamos descobrir quem são estes grupos.

Vamos consultar primeiro o grupo 10000

wbinfo --gid-info=10000
ti-admin:x:10000:douglas

Como pode ser notado o grupo 10000 é o grupo ti-admin agora vamos consultar o grupo 10001

wbinfo --gid-info=10001
domain users:x:10001:

Como pode ser notado o grupo 10001 é o grupo domain users ou seja os usuários de domínio.

Agora vamos parar o squid

/etc/init.d/squid3 stop

Agora temos que criar os diretórios para o squid armazenar o cache

squid3 -z

Vamos acertar o horário dos relatórios do squid, por padrão ele mostra no formato GMT com uma variável %T e nós precisamos do formato UTC %t.

sed -i "s/%T/%t/g" /usr/share/squid3/errors/pt-br/*

Agora podemos iniciar ele

/etc/init.d/squid3 start

OBS: NÃO ESQUECA DE CRIAR OS GRUPOS NO AD E COLOCAR OS USUÁRIOS NOS GRUPOS

Para testar a autenticação com o AD pode ser efetuado com o seguinte comando

wbinfo -a usuario%senha
plaintext password authentication succeeded #-> saída com sucesso
challenge/response password authentication succeeded #-> saída com sucesso

Agora um teste com uma saída de erro

wbinfo -a usuario%senhaerrada
plaintext password authentication failed #-> saída com erro
Could not authenticate user usuario%senhaerrada with plaintext password #-> saída com erro
challenge/response password authentication failed #-> saída com erro
error code was NT_STATUS_NO_LOGON_SERVERS (0xc000005e) #-> saída com erro
error messsage was: No logon servers #-> saída com erro
Could not authenticate user usuario with challenge/response #-> saída com erro

Podemos testar a autenticação do Squid com o AD da seguinte forma

ntlm_auth --help-protocol=squid-2.5-basic --domain=dominio --username=usuario --password=senha
NT_STATUS_OK: Success (0x0) #-> saída com sucesso

Agora um teste com saída de erro

ntlm_auth --help-protocol=squid-2.5-basic --domain=dominio --username=usuario --password=senhaerrada
NT_STATUS_IO_TIMEOUT: NT_STATUS_IO_TIMEOUT (0xc00000b5) #-> saída de erro

Instalação e Configuração do lightsquid

Podemos ver um demo do lightsquid em http://lightsquid.sourceforge.net/demo18/index.cgi?year=2009&month=08

Agora vamos fazer um update dos repositórios e um upgrade do sistema

aptitude update && aptitude dist-upgrade -y

Agora vamos instalar as dependências dele

aptitude install libgd-gd2-perl libbio-graphics-perl libapache2-mod-perl2

Agora vamos obter o lightsquid

cd /var/www/
wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/lightsquid-1.8.tgz

Agora vamos desempacotar ele

tar -xzvf lightsquid-1.8.tgz

Agora vamos remover o tgz

rm -rf lightsquid-1.8.tgz

Agora vamos renomear o nosso diretório do lightsquid

mv lightsquid-1.8 lightsquid

Agora vamos acertar as permissões dos arquivos

cd lightsquid
chmod +x *.cgi
chmod +x *.pl

Agora vamos mudar o dono do diretório

chown -R www-data:www-data /var/www/lightsquid

Agora vamos ajustar o arquivo do virtualhost Default do apache

vim /etc/apache2/sites-available/default
<VirtualHost *:80>
[...] 
       #Configuração do lightsquid
       <Directory "/var/www/lightsquid">
         DirectoryIndex index.cgi
         Options +ExecCGI -Indexes -MultiViews +SymLinksIfOwnerMatch
         AddHandler cgi-script .cgi
         AllowOverride All
       </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

       [...]
</VirtualHost>

Agora vamos ajustar o idioma do lightsquid

vim /var/www/lightsquid/lightsquid.cfg
[...]
$lang                ="pt_br";

Agora vamos ajustar o caminho das pastas do lightsquid

sed -i 's|/var/www/html/|/var/www/|g' /var/www/lightsquid/lightsquid.cfg
sed -i 's|/var/log/squid|/var/log/squid3|g' /var/www/lightsquid/lightsquid.cfg

Agora vamos testar o lightsquid

perl  /var/www/lightsquid/check-setup.pl
LightSquid Config Checker, (c) 2005-9 Sergey Erokhin GNU GPL

LogPath   : /var/log/squid3
reportpath: /var/www/lightsquid/report
Lang      : /var/www/lightsquid/lang/pt_br
Template  : /var/www/lightsquid/tpl/base
Ip2Name   : /var/www/lightsquid/ip2name/ip2name.simple


all check passed, now try access to cgi part in browser

Agora vamos reiniciar o apache

/etc/init.d/apache2 restart

Agora vamos gerar os nossos relatórios

/var/www/lightsquid/lightparser.pl

Agora já podemos acessar o nosso relatório em http://ip_servidor/lightsquid/

Umas das opções interessantes que eu acho desse cara é que podemos configurar grupos para os usuários, com isso podemos mandar consultar quais grupos acessaram o que e quais usuários pertences a eles.

Vamos acessar o diretório do lightsquid

cd /var/www/lightsquid

Agora vamos fazer uma copia do group.cfg

cp group.cfg.src group.cfg

Agora vamos editar o nosso arquivo

vim group.cfg
douglas           01      ti-admin
anderson.angelote 01      ti-admin
hillary           02      matriz-logistica
nerso             02      matriz-logistica

Aqui temos na primeira coluna o nome do usuário poderia ser o endereço ip do cliente, na segunda coluna o número do grupo e a terceira coluna é o nome do grupo

Agora para que apareça a identificação dos grupos precisamos gerar novamente o nosso relatório.

/var/www/lightsquid/lightparser.pl

Outra opção bacana que temos é fazer o mapeamento para nomes completos por exemplo o nome douglas.santos vamos mapear para Douglas Quintiliano dos Santos, o arquivo que precisamos editar é o seguinte

vim /var/www/lightsquid/realname.cfg
douglas Douglas Quintiliano dos Santos
192.168.1.3    Nerso da Silva

Aqui podemos mapear tanto nomes de usuários como endereço ip com isso no relatório podemos não lembrar na hora quem utilizar o ip 192.168.1.3 mais pelo nome é bem mais fácil de cobrar um determinado usuário, após efetuar a modificação precisamos gerar o relatório novamente

/var/www/lightsquid/lightparser.pl

Agora vamos criar um agendamento no cron para gerar automaticamente o nosso relatório:

crontab -e
[...]
*/20 * * * * /var/www/lightsquid/lightparser.pl today

Agora vamos criar um virtualhost para o lightsquid

vim /etc/apache2/sites-available/lightsquid
<VirtualHost *:80>
 ServerName lightsquid.douglasqsantos.com.br
 ServerAlias lightsquid.douglasqsantos.com.br
 DocumentRoot "/var/www/lightsquid"

 #Controle de acesso ao lightsquid
 <Directory "/var/www/lightsquid">
   DirectoryIndex index.cgi
   Options +ExecCGI -Indexes -MultiViews +SymLinksIfOwnerMatch
   AddHandler cgi-script .cgi
   AllowOverride All

 #Autenticação do lightsquid
 AuthUserFile /etc/apache2/access/lightsquid-htpasswd
 AuthName "LightSquid"
 AuthType Basic
 require valid-user
 </Directory>

 #Configuração dos logs do apache
 ErrorLog /var/log/apache2/lightsquid.douglasqsantos.com.br-error.log
 CustomLog /var/log/apache2/lightsquid.douglasqsantos.com.br-access.log common

 #Retirando a assinatura do Apache
 ServerSignature Off

 IndexIgnore .??* *~ *# README RCS CVS *,v *,t *

 # Possible values include: debug, info, notice, info, error, crit,
 # alert, emerg.
 LogLevel info
</VirtualHost>

Agora vamos criar o diretório que vai conter o arquivo de controle dos usuários que podem acessar o lightsquid

mkdir /etc/apache2/access/

Agora vamos gerar o usuário e a senha, aqui eu vou cadastrar o usuário lightsquid

htpasswd -s -c /etc/apache2/access/lightsquid-htpasswd lightsquid
New password: 
Re-type new password: 
Adding password for user lightsquid

Agora vamos desativar os virtuais hosts default do apache

a2dissite default
a2dissite default-ssl

Agora vamos ativar o lightsquid

a2ensite lightsquid

Agora vamos reiniciar o apache

/etc/init.d/apache2 restart

Agora já podemos acessar http://lightsquid.douglasqsantos.com.br ou http://ip_servidor

Referências