Squid autenticando no OpenLDAP utilizando o Debian Squeeze

E ai galera, aqui eu vou abordar a configuração do Squid no Debian Squeeze autenticando no OpenLDAP, 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/confinicialsqueeze_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 OpenLDAP: 192.168.1.200
  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 OpenLDAP, não esqueça de inserir os usuários nos grupos ;)

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

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 OpenLDAP
search douglasqsantos.com.br
nameserver 192.168.1.200

Agora vamos testar se o servidor ad esta respondendo corretamente

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

Name: douglasqsantos.com.br
Address: 192.168.1.200

Agora vamos instalar o cliente ldap

aptitude install ldap-utils -y

Vamos consultar a configuração do cliente OpenLDAP

vim /etc/ldap/ldap.conf
URI ldap://192.168.1.200/
BASE dc=douglasqsantos,dc=com,dc=br

Agora vamos consultar os usuários do OpenLDAP

ldapsearch -xLLL -h 192.168.1.200 '(objectClass=person)'
dn: uid=root,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
cn: root
sn: root
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: shadowAccount
gidNumber: 0
uid: root
uidNumber: 0
homeDirectory: /home/root
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaHomeDrive: U:
sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-512
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-500
loginShell: /bin/false
gecos: Netbios Domain Administrator
sambaLMPassword: 64C756234A35D5CF90004151ADA7B438
sambaAcctFlags: [U]
sambaNTPassword: D3C6A8274E92A87B52E2552364FF0924
sambaPwdLastSet: 1360539527
sambaPwdMustChange: 1364427527
shadowLastChange: 15746
shadowMax: 45

dn: uid=nobody,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
cn: nobody
sn: nobody
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: shadowAccount
gidNumber: 65534
uid: nobody
uidNumber: 65534
homeDirectory: /nonexistent
sambaPwdLastSet: 0
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
sambaHomeDrive: U:
sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-514
sambaLMPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
sambaNTPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX
sambaAcctFlags: [NUD        ]
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-2998
loginShell: /bin/sh

dn: uid=domainadm,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
cn: domainadm
sn: domainadm
givenName: domainadm
uid: domainadm
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/domainadm
loginShell: /bin/zsh
gecos: System User
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: domainadm
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-3000
sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-3001
sambaLogonScript: logon.bat
sambaHomeDrive: U:
sambaLMPassword: CCF9155E3E7DB453AAD3B435B51404EE
sambaAcctFlags: [U]
sambaNTPassword: 3DBDE697D71690A769204BEB12283678
sambaPwdLastSet: 1360536379
sambaPwdMustChange: 1364424379
shadowLastChange: 15746
shadowMax: 45

dn: uid=douglas.santos,ou=Usuarios,dc=douglasqsantos,dc=com,dc=br
objectClass: sambaSamAccount
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
sambaHomeDrive: U:
sambaDomainName: LAB
sambaAcctFlags: [XU         ]
sambaHomePath: \\192.168.1.200\douglas.santos
sambaLogonScript: logon.bat
sambaProfilePath: \\192.168.1.200\profiles\douglas.santos
sambaNTPassword: 2C736BDC8CA1C4DFE5D79E4F9617312C
sambaPwdLastSet: 1360535600
homeDirectory: /home/douglas.santos
loginShell: /bin/zsh
uid: douglas.santos
cn: Douglas Quintiliano dos Santos
uidNumber: 10000
sn: Santos
givenName: Douglas
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-519
sambaPrimaryGroupSID: S-1-5-21-4179873133-1112765275-2003508382-512
gidNumber: 512
[...]

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 OpenLDAP
#Caso a base OpenLDAP utilize autenticação podemos fazer da seguite forma
#auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b "dc=douglasqsantos,dc=com,dc=br" -D "cn=admin,dc=douglasqsantos,dc=com,dc=br" -w "senha_admin" -v 3 -f uid=%s -h 192.168.1.200 
#Consulta na base OpenLDAP sem autenticação
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b "dc=douglasqsantos,dc=com,dc=br" -v 3 -f uid=%s -h 192.168.1.200
auth_param basic children 5
auth_param basic realm Digite Seu Login para acessar a Internet
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive off
external_acl_type ldap_group %LOGIN /usr/lib/squid3/squid_ldap_group -v 3 -b "dc=douglasqsantos,dc=com,dc=br"  -f "(&(cn=%g)(memberuid=%u))" -h 192.168.1.200


### 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 OpenLDAP         #
#-----------------------------------------------------------------------------------#
acl    proxy-ti                external ldap_group          proxy-ti
acl    proxy-diretoria         external ldap_group          proxy-diretoria
acl    proxy-gerencia          external ldap_group          proxy-gerencia
acl    proxy-administracao     external ldap_group          proxy-administracao
acl    proxy-logistica         external ldap_group          proxy-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 proxy-ti
http_access allow sites-liberados
http_access deny  sites-proibidos
http_access allow proxy-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 proxy-administracao sites-administracao
http_access allow proxy-logistica sites-logistica
#Acesso ao site da caixa
#http_access allow caixa proxy-administracao
#http_access allow caixa proxy-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 OpenLDAP

Vamos consultar os nossos grupos

ldapsearch -xLLL -h 192.168.1.200 '(objectClass=PosixGroup)'
dn: cn=proxy-ti,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: posixGroup
description: Grupo de Admins
gidNumber: 10000
cn: proxy-ti
memberUid: douglas.santos

dn: cn=Domain Admins,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 512
cn: Domain Admins
description: Netbios Domain Administrators
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-512
sambaGroupType: 2
displayName: Domain Admins
memberUid: root

dn: cn=Domain Users,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 513
cn: Domain Users
description: Netbios Domain Users
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-513
sambaGroupType: 2
displayName: Domain Users
memberUid: root

dn: cn=Domain Guests,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 514
cn: Domain Guests
description: Netbios Domain Guests Users
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-514
sambaGroupType: 2
displayName: Domain Guests

dn: cn=Domain Computers,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 515
cn: Domain Computers
description: Netbios Domain Computers accounts
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-515
sambaGroupType: 2
displayName: Domain Computers

dn: cn=Administrators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 544
cn: Administrators
description: Netbios Domain Members can fully administer the computer/sambaDom
 ainName
sambaSID: S-1-5-32-544
sambaGroupType: 5
displayName: Administrators

dn: cn=Account Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 548
cn: Account Operators
description: Netbios Domain Users to manipulate users accounts
sambaSID: S-1-5-32-548
sambaGroupType: 5
displayName: Account Operators

dn: cn=Print Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 550
cn: Print Operators
description: Netbios Domain Print Operators
sambaSID: S-1-5-32-550
sambaGroupType: 5
displayName: Print Operators

dn: cn=Backup Operators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 551
cn: Backup Operators
description: Netbios Domain Members can bypass file security to back up files
sambaSID: S-1-5-32-551
sambaGroupType: 5
displayName: Backup Operators

dn: cn=Replicators,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
gidNumber: 552
cn: Replicators
description: Netbios Domain Supports file replication in a sambaDomainName
sambaSID: S-1-5-32-552
sambaGroupType: 5
displayName: Replicators

dn: cn=domainadm,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: top
objectClass: posixGroup
objectClass: sambaGroupMapping
cn: domainadm
gidNumber: 1000
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-3001
sambaGroupType: 2
displayName: domainadm
memberUid: domainadm

dn: cn=proxy-diretoria,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: sambaGroupMapping
objectClass: posixGroup
displayName: Diretoria
sambaGroupType: 2
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21003
description: Diretoria
gidNumber: 10001
cn: proxy-diretoria
memberUid: jose.silva

dn: cn=proxy-gerencia,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: sambaGroupMapping
objectClass: posixGroup
displayName: Gerencia
sambaGroupType: 2
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21005
description: Gerencia
gidNumber: 10002
cn: proxy-gerencia
memberUid: joao.maria

dn: cn=proxy-administracao,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: sambaGroupMapping
objectClass: posixGroup
displayName: Administracao
sambaGroupType: 2
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21007
description: Administracao
gidNumber: 10003
cn: proxy-administracao
memberUid: maria.madalena

dn: cn=proxy-logistica,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: sambaGroupMapping
objectClass: posixGroup
displayName: Logistica
sambaGroupType: 2
sambaSID: S-1-5-21-4179873133-1112765275-2003508382-21009
description: Logistica
gidNumber: 10004
cn: proxy-logistica
memberUid: vagner.margarina

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 OpenLDAP E COLOCAR OS USUÁRIOS NOS GRUPOS

Agora vamos testar se o squid está reconhecendo as nossas acls

/usr/lib/squid3/squid_ldap_group -v 3 -b "dc=douglasqsantos,dc=com,dc=br" -f "(&(cn=%g)(memberUid=%u))" -h 192.168.1.200
douglas.santos proxy-ti
OK

Aqui acima nós estamos testando se o usuário douglas.santos está no grupo proxy-ti.

Agora vamos testar a autenticação do usuário douglas.santos no OpenLDAP

/usr/lib/squid3/squid_ldap_auth -v 3 -b "dc=douglasqsantos,dc=com,dc=br" -f uid=%s -h 192.168.1.200
douglas.santos senha
OK

Agora vamos consultar se o nosso usuário é membro do grupo proxy-ti

ldapsearch -xLLL  '(cn=proxy-ti)'
dn: cn=proxy-ti,ou=Grupos,dc=douglasqsantos,dc=com,dc=br
objectClass: posixGroup
description: Grupo de Admins
gidNumber: 10000
cn: proxy-ti
memberUid: douglas.santos

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.santos    01      proxy-ti
anderson.angelote 01      proxy-ti
hillary           02      proxy-logistica
nerso             02      proxy-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.santos 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.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