Squid autenticando no AD utilizando o FreeBSD 9.2

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

  1. Endereço Ip do Proxy: 192.168.1.60
  2. Endereço Ip do Ad PDC: 192.168.1.100
  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 obter o ports para podermos começar a trabalhar

portsnap fetch && portsnap extract && portsnap update

Eu vou mandar desabilitar o DIALOG que é aquela telinha chata que fica aparecendo quando mandamos instalar algo :P

echo "NO_DIALOG=yes" >> /etc/make.conf

Agora vamos mandar instalar o samba pelo ports

cd /usr/ports/net/samba36 && make WITH_ADS=yes install clean

Agora vamos inserir algumas variáveis na inicialização do sistema para não ficarmos recebendo erros do samba.

echo 'kern.maxfiles="20000"' >> /boot/loader.conf
echo 'kern.maxfilesperproc="20000"' >> /boot/loader.conf

Agora vamos inserir o samba na inicialização do sistema

echo 'samba_enable="YES"' >> /etc/rc.conf
echo 'winbindd_enable="YES"' >> /etc/rc.conf

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
domain douglasqsantos.com.br
nameserver 192.168.1.100

Agora vamos testar se o servidor ad esta respondendo corretamente

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

Name: douglasqsantos.com.br
Address: 192.168.1.100

Agora vamos atualizar o relógio do sistema

ntpdate -u ntp.usp.br

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.100
admin_server = 192.168.1.100:749
default_server = 192.168.1.100
}
[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 fazer um backup do arquivo de configuração do samba

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

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

vim /usr/local/etc/smb.conf
[global]
  workgroup = DOUGLASQSANTOS
  realm = DOUGLASQSANTOS.COM.BR
  netbios name = FREEBSD
  server string = Proxy Server
  security = ADS
  auth methods = winbin
  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/sh
  template homedir = /home/%U

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
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: release/9.2.0/etc/nsswitch.conf 224765 2011-08-10 20:52:02Z dougb $
#
group: compat 
group_compat: winbind nis
hosts: files dns
networks: files
passwd: compat 
passwd_compat: winbind nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

Agora vamos iniciar o samba, aqui no FreeBSD quando mandamos iniciar o samba ele já reinicia o winbind

/usr/local/etc/rc.d/samba start

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 'FREEBSD' 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 'FREEBSD' in realm 'douglasqsantos.com.br'

Agora temos que reiniciar os serviços novamente

/usr/local/etc/rc.d/samba restart

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

wbinfo -t
checking the trust secret for domain DOUGLASQSANTOS via RPC calls succeede

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
administrator
guest
krbtgt
douglas.santos
susan.cris
karolayne.santos
hillary.santos

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

reboot

Instalação e Configuração do Squid

Agora vamos acessar o ports do squid 3.3 e vamos mandar instalar ele

cd /usr/ports/www/squid33 && make WITH_ARP_ACL=yes AUTH_LDAP=yes install clean

Agora vamos inserir ele na inicialização do sistema

echo 'squid_enable="YES"' >> /etc/rc.conf

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

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

Agora vamos a configuração do squid

vim /usr/local/etc/squid/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/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/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/squid/cache/squid 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 "/usr/local/etc/squid/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 "/usr/local/etc/squid/regras/mac_liberado"
http_access allow macliberado


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

### ACL Padroes
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 purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#Limita conexeos HTTP
acl connect_abertas maxconn 8

#sites que não serão feito cache geralmente bancos
acl NOCACHE url_regex "/usr/local/etc/squid/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 "/usr/local/etc/squid/regras/downloads"
acl sites-liberados   url_regex     -i "/usr/local/etc/squid/regras/sites_liberados"
acl sites-proibidos   url_regex     -i "/usr/local/etc/squid/regras/sites_proibidos"
acl sites-bloqueados  url_regex     -i "/usr/local/etc/squid/regras/sites_bloqueados"
acl sites-gerencia    url_regex     -i "/usr/local/etc/squid/regras/sites_gerencia"
acl sites-administracao url_regex   -i "/usr/local/etc/squid/regras/sites_administracao"
acl sites-logistica   url_regex     -i "/usr/local/etc/squid/regras/sites_logistica"

#Bloquear determinados usuários autenticados
acl usu_bloqueados proxy_auth "/usr/local/etc/squid/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 "/usr/local/etc/squid/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/local/etc/squid/errors/pt-br
#cache_effective_group squid
cache_effective_user squid
coredump_dir /var/squid/cache/squid

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

mkdir -p /usr/local/etc/squid/regras

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

vim /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/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 /usr/local/etc/squid/regras/sites_logistica
#Sites que o grupo logistica vai ter acesso
logistica.siteempresa

Bloquear determinados usuários autenticados

vim /usr/local/etc/squid/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
administrator
guest
krbtgt
douglas.santos
susan.cris
karolayne.santos
hillary.santos

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.santos

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

Agora vamos consultar informações sobre o nosso usuário DOUGLASQSANTOS.santos

wbinfo --user-groups=douglas.santos
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.santos

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 acertar as permissões do diretório que vai armazenar o cache do squid

chown -R squid:squid /var/squid/cache/squid

Agora vamos dar permissão para o squid obter as informações do winbind

chgrp squid /var/db/samba/winbindd_privileged
chmod -R g+rw /var/db/samba/winbindd_privileged

Agora vamos obter o wbinfo_group que faz o mapeamento de grupos do ad

cd /usr/local/libexec/squid/
wget -c http://wiki.douglasqsantos.com.br/Downloads/scripts/wbinfo_group.txt -O wbinfo_group.pl
chmod +x wbinfo_group.pl

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

squid -z

Agora podemos iniciar ele

/usr/local/etc/rc.d/squid 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

Vamos ajustar o nome da máquina no /etc/hosts

vim /etc/hosts
[...]
192.168.1.60            freebsd.douglasqsantos.com.br freebsd

Vamos instalar o apache

cd /usr/ports/www/apache24 && make install clean

Agora vamos inserir algumas variáveis na inicialização do sistema para não obtermos erros

echo 'accf_http_load="YES"' >> /boot/loader.conf
echo 'accf_data_load="YES"' >> /boot/loader.conf

Vamos carregar os módulos para o apache

kldload accf_http
kldload accf_data

Agora vamos colocar o apache na inicialização do sistema

echo 'apache24_enable="YES"' >> /etc/rc.conf

Agora vamos instalar o suporte perl para o apache

cd /usr/ports/graphics/p5-GD && make install clean

Agora vamos obter o lightsquid

cd /usr/local/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:www /usr/local/www/lightsquid

Agora vamos ajustar algumas variáveis do lightsquid

vim /usr/local/www/lightsquid/lightsquid.cfg
[...]
#path to additional `cfg` files
$cfgpath             ="/usr/local/www/lightsquid";
#path to `tpl` folder
$tplpath             ="/usr/local/www/lightsquid/tpl";
#path to `lang` folder
$langpath            ="/usr/local/www/lightsquid/lang";
#path to `report` folder
$reportpath          ="/usr/local/www/lightsquid/report";
#path to access.log
$logpath             ="/var/log/squid";
#path to `ip2name` folder
$ip2namepath         ="/usr/local/www/lightsquid/ip2name";
[...]
$lang                ="pt_br";

Agora vamos testar o lightsquid

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

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


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

Agora vamos gerar os nossos relatórios

/usr/local/www/lightsquid/lightparser.pl

Agora vamos habilitar o virtualhost no apache e vamos habilitar o mod_cgi

vim /usr/local/etc/apache24/httpd.conf
[...]
#Descomentar a linha abaixo linha: 140
LoadModule dir_module libexec/apache24/mod_dir.so
[...]
# Virtual hosts descomentar a linha abaixo linha: 470
Include etc/apache24/extra/httpd-vhosts.conf

Agora vamos ajustar o Virtualhost para ele

vim /usr/local/etc/apache24/extra/httpd-vhosts.conf
<VirtualHost *:80>
 ServerName lightsquid.douglasqsantos.com.br
 ServerAlias lightsquid.douglasqsantos.com.br
 DocumentRoot "/usr/local/www/lightsquid"

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

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

 #Configuração dos logs do apache
 ErrorLog /var/log/apache24/lightsquid.douglasqsantos.com.br-error.log
 CustomLog /var/log/apache24/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 um diretório para armazenar os nossos logs e o arquivo de controle de acesso e vamos ajustar as permissões

mkdir -p /var/log/apache24 /usr/local/etc/apache24/access
chown -R www:www /var/log/apache24 /usr/local/etc/apache24/access

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 /usr/local/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 ti-admin
susan.cris       02 matriz-diretoria
hillary.santos   02 matriz-administracao
karolayne.santos 03 matriz-gerencia

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.

/usr/local/www/lightsquid/lightparser.pl

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

vim /usr/local/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

/usr/local/www/lightsquid/lightparser.pl

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

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

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

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

Agora vamos reiniciar o apache

/usr/local/etc/rc.d/apache24 restart

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

Referências