Squid + AD Win 2003/Win 2008/Win 2012 + DNS Bind + Sarg + MySar + MSN-Proxy + Debian Squeeze

Qual a ideia principal desse HOW TO demostrar a instalação do squid e configurar ele para trabalhar integrado com o AD, também vou demostrar a instalação e configuração de algumas ferramentas de apoio como sarg que nós traz os relatórios de acesso, vou mostrar também o MySar que é uma ferramenta que gera relatórios de acesso do squid e armazena os dados de acesso no MySQL e por ultimo vou mostrar a instalação e configuração do MSN-Proxy ferramenta de controle de acesso de MSN. Vou abordar a instalação de um servidor DNS enjaulado somente para fazer cache de consultas DNS para agilizar para o nosso squid e as consultas para o domínio vamos criar uma zona forward para direcionar para o AD. Como geralmente trabalhamos com ambientes heterogêneos ou seja, trabalhando com um ambiente multi-plataforma e é o que eu vou mostrar nesse HOW TO. OBS: Não vou mostrar como criar um grupo e inserir usuários no AD, eu testei essa implementação com o Windows Server 2003, Windows Server 2008 e Windows Server 2012 RC.

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: 10.13.0.254
  2. Endereço Ip do Ad PDC: 10.13.0.248
  3. Endereço Ip do Ad BDC: 10.13.0.249
  4. Domínio utilizado: douglasqsantos.com.br
  5. Habilitar o dns do Windows a fazer atualizações seguras e não seguras, pois vamos inserir o debian 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 10.13.0.248
nameserver 10.13.0.249

Agora vamos testar se o servidor ad esta respondendo corretamente

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

Name:   douglasqsantos.com.br
Address: 10.13.0.248

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 = 10.13.0.248
kdc = 10.13.0.249
admin_server = 10.13.0.248:749
default_server = 10.13.0.248
}
[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 = DEBIAN
  security = ADS
  auth methods = winbind
  kerberos method = secrets and keytab
  winbind refresh tickets = yes
  socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  load printers = No
  printing = bsd
  printcap name = /dev/null
  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 DOUGLASQSANTOS 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

Agora vamos instalar o DNS Bind

Vamos instalar os pacotes necessários

aptitude install bind9 dnsutils -y

Agora vamos para o bind para podemos efetuar as modificações necessárias.

/etc/init.d/bind9 stop

Agora vamos criar os diretórios necessários para a jaula

mkdir -p /var/lib/named/etc
mkdir -p /var/lib/named/dev
mkdir -p /var/lib/named/var/log
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8

Agora vamos acertar as permissões da jaula

chmod 666 /var/lib/named/dev/{null,random}
chown -R bind:bind /var/lib/named/var/*

Agora vamos ajudar a localização dos diretórios

mv /etc/bind /var/lib/named/etc
ln -sf /var/lib/named/etc/bind /etc/bind
chown -R bind:bind /var/lib/named/etc/bind

Agora vamos acertar o arquivo default do bind para que o bind reconheça a jaula

vim /etc/default/bind9
RESOLVCONF=yes
OPTIONS="-u bind -t /var/lib/named"

Vamos agora ajustar o /etc/resolv.conf

vim /etc/resolv.conf
domain douglasqsantos.com.br
nameserver 127.0.0.1

Agora vamos acertar o arquivo de controle da versão e acesso ao dns

vim /etc/bind/named.conf.options
#/etc/bind/named.conf.options
options {
 directory "/var/cache/bind";
 auth-nxdomain no;
 listen-on-v6 { any; };
 listen-on { 127.0.0.1/32; 10.13.0.0/24; };
 allow-query { any; };
 recursion yes;
 version "Nao Disponivel";
};
 
#Controles 
include "/etc/bind/rndc.key";
controls {
        inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; };
};
 
#LOGS
logging {
 channel xfer-log {
 file "/var/log/named.log";
 print-category yes;
 print-severity yes;
 print-time yes;
 severity info;
 };
 category xfer-in { xfer-log; };
 category xfer-out { xfer-log; };
 category notify { xfer-log; };
 
 channel update-debug {
 file "/var/log/named-update-debug.log";
 severity  debug 3;
 print-category yes;
 print-severity yes;
 print-time      yes;
 };
 channel security-info    {
 file "/var/log/named-auth-info.log";
 severity  info;
 print-category yes;
 print-severity yes;
 print-time      yes;
 };
 category update { update-debug; };
 category security { security-info; };
 
 };

Agora vamos criar a nossa zona forward

vim /etc/bind/named.conf.default-zones
[...]

#No Final do arquivo
zone "douglasqsantos.com.br" {
        type forward;
        forwarders { 10.13.0.248; 10.13.0.249; };
};

Agora precisamos criar o arquivo que o bind precisa porém não cria

touch /var/lib/named/var/cache/bind/managed-keys.bind

Agora já podemos iniciar o nosso bind

/etc/init.d/bind9 start

Vamos analisar os logs para ver se não temos nada de errado

tail -f /var/log/syslog 
Jun 23 21:13:40 debian named[8212]: listening on IPv4 interface eth0, 10.13.0.254#53
Jun 23 21:13:40 debian named[8212]: generating session key for dynamic DNS
Jun 23 21:13:40 debian named[8212]: set up managed keys zone for view _default, file 'managed-keys.bind'
Jun 23 21:13:40 debian named[8212]: command channel listening on 127.0.0.1#953
Jun 23 21:13:40 debian named[8212]: zone 0.in-addr.arpa/IN: loaded serial 1
Jun 23 21:13:40 debian named[8212]: zone 127.in-addr.arpa/IN: loaded serial 1
Jun 23 21:13:40 debian named[8212]: zone 255.in-addr.arpa/IN: loaded serial 1
Jun 23 21:13:40 debian named[8212]: zone localhost/IN: loaded serial 2
Jun 23 21:13:40 debian named[8212]: managed-keys-zone ./IN: loaded serial 0
Jun 23 21:13:40 debian named[8212]: running

Agora vamos consultar a nossa zona do AD

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

Non-authoritative answer:
Name: douglasqsantos.com.br
Address: 10.13.0.248

Tudo certinho com o DNS com isso a navegação da web vai ser resolvida pelo bind e a autenticação vai ser resolvida pelo AD ;)

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 a instalação e configuração do 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.

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 5222 # gTalk
acl Safe_ports port 5223 # gTalk
acl Safe_ports port 8443 # https
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

Agora vamos fazer a instalação e configuração do sarg

Adicione as seguintes linhas no arquivo /etc/apt/sources.list

vim /etc/apt/sources.list
[...]
#No final do arquivo /etc/apt/sources.list
deb http://www.backports.org/debian squeeze-backports main contrib non-free
deb-src http://www.backports.org/debian squeeze-backports main contrib non-free

Agora precisamos atualizar os repositórios e mandar instalar o sarg

aptitude update && aptitude install sarg apache2 -y

Vamos comentar as linhas do backport no arquivo /etc/apt/sources.list

vim /etc/apt/sources.list
[...]
#No final do arquivo /etc/apt/sources.list
#deb http://www.backports.org/debian squeeze-backports main contrib non-free
#deb-src http://www.backports.org/debian squeeze-backports main contrib non-free

Vamos fazer um backup do arquivo de configuração do sarg-reports

cp -Ra /etc/sarg/sarg-reports.conf{,.bkp}

Agora vamos configurar o sarg-reports que vai gerar os relatórios dos acesso ao proxy

vim /etc/sarg/sarg-reports.conf
     SARG=/usr/bin/sarg
     CONFIG=/etc/sarg/sarg.conf
    HTMLOUT=/var/www/sarg
  PAGETITLE="Access Reports on $(hostname)"
    LOGOIMG=/sarg/images/sarg.png
   LOGOLINK="http://$(hostname)/"
      DAILY=Daily
     WEEKLY=Weekly
    MONTHLY=Monthly
EXCLUDELOG1="SARG: No records found"
EXCLUDELOG2="SARG: End"

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

cp -Ra /etc/sarg/sarg.conf{,.bkp}

Agora vamos configurar o /etc/sarg/sarg.conf

vim /etc/sarg/sarg.conf
access_log /var/log/squid3/access.log
title "Relatorio de Acesso a Internet"
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 9px
background_color white
text_color #000000
text_bgcolor lavender
title_color green
temporary_dir /tmp
output_dir /var/www/sarg
resolve_ip yes
user_ip no
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
exclude_users /etc/sarg/exclude_users
exclude_hosts /etc/sarg/exclude_hosts
date_format e
records_without_userid ignore
lastlog 0
remove_temp_files yes
index yes
index_tree file
overwrite_report yes
records_without_userid ip
use_comma yes
mail_utility mailx
topsites_num 100
topsites_sort_order CONNECT D
index_sort_order D
exclude_codes /etc/sarg/exclude_codes
max_elapsed 28800000
report_type topusers topsites sites_users users_sites date_time denied auth_failures site_user_time_date downloads
usertab /etc/sarg/usertab
long_url no
date_time_by bytes
charset Latin1
show_successful_message no
show_read_statistics no
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
user_report_fields 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"

Agora vamos acertar a periodicidade em que o sarg-reports vai ser executado eu vou deixar ele sendo executado a cada hora

cp -Rfa /etc/cron.daily/sarg /etc/cron.hourly/

Agora vamos gerar o primeiro relatório caso já exista algum acesso vamos ter estatísticas para analisarmos.

sarg

Agora vamos criar um usuário para acessar o sarg

htpasswd -s -c /var/www/sarg/.htpasswd sarg
New password: #senha
Re-type new password: #senha
Adding password for user sarg

Aqui criei o usuário chamado sarg com a senha senha, agora vamos criar o arquivo que controla o acesso no diretório.

vim /var/www/sarg/.htaccess
AuthType Basic
AuthName "Area Restrita"
AuthUserFile "/var/www/sarg/.htpasswd"
require valid-user

Agora temos que fazer um acerto no diretório padrão do apache

[...]
<Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                #Temos que deixar o AllowOverride All o padrão do Apache é AllowOverride None
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
[...]

Agora precisamos reiniciar o apache

/etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

Seus relatórios do Sarg vão estar em http://ip_servidor/sarg usuário de acesso: sarg senha: senha

Agora vamos obter e configurar o MySar

Vamos instalar as dependências do MySar

aptitude install php5 php5-mysql apache2 mysql-server-5.1 -y

Vamos baixar o MySar

cd /var/www
wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/mysar-2.1.4.tar.gz
tar -xzvf mysar-2.1.4.tar.gz
rm -rf mysar-2.1.4.tar.gz index.html

Agora vamos acertar o arquivo de configuração principal do MySar

cp  /var/www/mysar/etc/config.ini.example /var/www/mysar/etc/config.ini

Agora vamos editar o arquivo de controle do Banco do MySar

vim /var/www/mysar/etc/config.ini
dbUser = mysar
dbPass = senha
dbHost = localhost
dbName = mysar

Agora Vamos criar o Banco de dados

mysql -u root -p
CREATE DATABASE mysar;
GRANT ALL PRIVILEGES ON mysar.* to mysar@localhost IDENTIFIED BY 'senha';
FLUSH PRIVILEGES;
quit;

Agora vamos configurar o MySar acesse http://ip_servidor/mysar/www

  1. Na primeira tela selecione Click here to continue »>
  2. Agora na segunda tela selecione New install
  3. Aqui na terceira tela vamos informar os dados
    1. MySQL Administrative username: root
    2. MySQL Administrative Password: senha_root
    3. MySQL Database Host: localhost
    4. MySQL Database Name for mysar: mysar
    5. Mysql Database Username to create, for mysar: mysar
    6. Mysql Database Password for the new user defined above: senha
    7. Agora selecione Enviar
  4. Agora selecione Click here
  5. Agora selecione novamente Click here
  6. Mas uma vez precisamos selecionar Click here
  7. Pronto ele esta instalado agora precisamos remover o diretório de instalação.

Vamos remover o diretório de instalação

rm -rf /var/www/mysar/www/install

Agora vamos acertar as permissões do mysar

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

Agora vamos criar um usuário para acessar o mysar

htpasswd -s -c /var/www/mysar/.htpasswd mysar
New password: #senha
Re-type new password: #senha
Adding password for user mysar

Aqui criei o usuário chamado mysar com a senha senha, agora vamos criar o arquivo que controla o acesso no diretório.

vim /var/www/mysar/.htaccess
AuthType Basic
AuthName "Area Restrita"
AuthUserFile "/var/www/mysar/.htpasswd"
require valid-user

Agora precisamos deixar agendado os scripts para popular os nossos relatórios

vim /etc/crontab
[...]
* * * * *       root    /var/www/mysar/bin/mysar-resolver.php > /var/www/mysar/log/mysar-resolver.log 2>&1
0 0 * * *       root    /var/www/mysar/bin/mysar-maintenance.php > /var/www/mysar/log/mysar-maintenance.log 2>&1
* * * * *       root    /var/www/mysar/bin/mysar-importer.php > /var/www/mysar/log/mysar-importer.log 2>&1

Agora precisamos fazer o ultimo acerto no MySar

#sql
mysql -u root -p mysar
update config set value  = '/var/log/squid3/access.log' where name = 'squidLogPath';

Agora vamos gerar reiniciar o crontab

/etc/init.d/cron restart

Agora vamos acessar o MySar em http://ip_servidor/mysar/www usuário de acesso: mysar senha: senha

Agora vamos obter e instalar o MSN-Proxy

Vamos instalar as suas dependências

aptitude install mysql-server mysql-client  php5-gd php5-imagick make gcc g++  libmysqlclient-dev -y

Agora vamos obter o libevent que é uma dependência do msn-proxy

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/libevent-2.0.19-stable.tar.gz
tar -xzvf libevent-2.0.19-stable.tar.gz

Agora vamos gerar a configuração inicial do pacote e vamos compilar e instalar ele

cd /usr/src/libevent-2.0.19-stable/
./configure && make && make install clean

Agora vamos criar um link para o sistema saber qual a biblioteca utilizar quando houver a necessidade.

cd /usr/lib
ln -s /usr/local/lib/libevent-2.0.so.5

Agora vamos obter o MSN-proxy

cd /usr/src
wget -c http://wiki.douglasqsantos.com.br/Downloads/monitoring/msn-proxy-0.7.tar.gz
tar -xzvf msn-proxy-0.7.tar.gz

Agora vamos acertar a configuração do MSN-Proxy antes de compilar ele, temos que efetuar as mudanças como abaixo vamos comentar as linhas do FreeBSD e descomentar e modificar as linhas do Linux.

cd /usr/src/msn-proxy-0.7/
vim Makefile
[...]
#FreeBSD
#MYSQLINC=/usr/local/include
#MYSQLLIB=/usr/local/lib/mysql

# Linux (most)
MYSQLINC=/usr/lib/mysql
MYSQLLIB=/var/lib/mysql/mysql

Agora vamos compilar e instalar ele

make && make install clean

Agora vamos acertar a configuração do cliente web do MSN-Proxy

cp -R /usr/src/msn-proxy-0.7/php /var/www/msn-proxy

Agora vamos acertar a configuração do cliente web com o banco de dados

vim /var/www/msn-proxy/mysql.inc.php 
[...]
$host = "localhost";
$user = "root";
$pass = "senha";
$db = "msn-proxy";
$port = 3306
[...]

Agora temos que acertar o arquivo de conexão do msn-proxy com o banco de dados

vim  /usr/local/etc/msn-proxy/mysql/conf 
# host, porta, usuário, senha, banco
localhost|0|msn-proxy|senha|msn-proxy

Agora vamos criar o banco de dados e acertar as permissões.

mysql -u root -p
CREATE DATABASE `msn-proxy`;
GRANT ALL PRIVILEGES on `msn-proxy`.* to `msn-proxy`@localhost IDENTIFIED BY 'senha';
FLUSH PRIVILEGES;
quit;

Agora vamos acertar a permissão do arquivo de configuração do banco

chmod 600 /usr/local/etc/msn-proxy/mysql/conf 

Agora vamos mudar a quantidade máxima de clientes que podemos ter no msn-proxy vamos mudar o padrão de 10 para 200 por exemplo.

sed -i "s/max_clients=10/max_clients=200/g" /usr/local/etc/msn-proxy/msn-proxy.conf 

Vamos agora iniciar o msn-proxy ele vai apresentar um erro pois é a falta de informação na tabela defaults

msn-proxy
fail to read mysql config (check defaults table)

Agora vamos corrigir o erro que apareceu informando os valores padrões para o msn-proxy

Vamos inserir o ip do servidor proxy que é 10.13.0.254 e o endereço de email do administrador

mysql -u root -p msn-proxy
INSERT INTO defaults (internal_host,warnemail) VALUES ("10.13.0.254","monitor@douglasqsantos.com.br");
quit;

Agora temos adicionar uma regra de filtragem da porta 1863, ou seja quando o usuário fizer uma requisição nesta porta nós vamos mandar ela para o msn-proxy, vou levar em consideração aqui a interface da LAN sendo eth0

iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 1863 -j REDIRECT --to-port 1863

Agora vamos habilitar o repasse de pacotes

sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g" /etc/sysctl.conf 

Agora vamos recarregar a configuração

sysctl -p

Vou mascarar a rede quando enviarmos ela para a internet

iptables -t nat -I POSTROUTING -s 10.13.0.0/24 -j MASQUERADE

Agora vamos criar um usuário para acessar o msn-proxy

htpasswd -s -c /var/www/msn-proxy/.htpasswd msn-proxy
New password: #senha
Re-type new password: #senha
Adding password for user msn-proxy

Aqui criei o usuário chamado msn-proxy com a senha senha, agora vamos criar o arquivo que controla o acesso no diretório.

vim /var/www/msn-proxy/.htaccess
AuthType Basic
AuthName "Area Restrita"
AuthUserFile "/var/www/msn-proxy/.htpasswd"
require valid-user

Agora vamos iniciar o msn-proxy em background

/usr/local/bin/msn-proxy -b

Vamos ver as como o msn-proxy esta sendo executado

msn-proxy -v
info: reading config file [/usr/local/etc/msn-proxy/msn-proxy.conf]
SQL: (SHOW TABLES)
SQL: (SELECT connect, save_msg, save_contacts, commands, internal_host FROM defaults LIMIT 1)
msn-proxy release     : msn-proxy-0.7a [$Id: msn-proxy.h 112 2009-03-15 17:30:28Z loos-br $]
config file           : /usr/local/etc/msn-proxy/msn-proxy.conf
default ns host       : messenger.hotmail.com
default ns port       : 1863
listen host           : 0.0.0.0
listen port           : 1863
backlog               : 10
max clients           : 200
max ctl clients       : 10
port range begin      : 25000
port range end        : 30000
ctl read timeout      : 5
client read timeout   : 600
client write timeout  : 60
server read timeout   : 600
server write timeout  : 60
client connect timeout: 180

ACLs
connect               : ALLOW
log messages          : YES
save_contacts         : YES

listen: Address already in use

Como pode ser notado ele esta funcionando corretamente.

Agora vamos acessar o cliente em http://ip_servidor/msn-proxy usuário para acesso: msn-proxy senha: senha

Aqui na tela principal do msn-proxy quando tiver algum usuário logado vamos ter o nome dele e abaixo a última conexão, último ip e excluir/Novo abaixo disso temos Outras opções, se selecionarmos Outras opções podemos habilitar algumas opções como avisar ao usuário que a mensagem está sendo monitorada, bloquear novos usuários e mais algumas outras.

Agora que o msn-proxy já está funcionando vamos criar um script para que ele seja executado na inicialização do sistema.

vim /etc/init.d/msn-proxy
#/bin/bash
### BEGIN INIT INFO
# Provides:             msn-proxy
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    MSN-Proxy
### END INIT INFO
 
GREY="\033[01;30m" RED="\033[01;31m" GREEN="\033[01;32m" YELLOW="\033[01;33m"
BLUE="\033[01;34m" PURPLE="\033[01;35m" CYAN="\033[01;36m" WHITE="\033[01;37m"
CLOSE="\033[m"

#VARIAVEIS DO SCRIPT
MSN_PROXY=$(which msn-proxy)
IPTABLES=$(which iptables)
INT_LAN="eth0"
KILLALL=$(which killall)
 
start(){
echo -e "${GREEN}INICIANDO O MSN-Proxy${CLOSE}"
${MSN_PROXY} &
${IPTABLES} -t nat -I PREROUTING -i ${INT_LAN} -p tcp --dport 1863 -j REDIRECT --to-port 1863 
echo -e "${GREEN}MSN-PROXY INICIADO${CLOSE}"
}
 
stop (){
echo -e "${RED}PARANDO MSN-PROXY${CLOSE}"
${IPTABLES} -t nat -D PREROUTING -i ${INT_LAN} -p tcp --dport 1863 -j REDIRECT --to-port 1863 
${KILLALL} -15 msn-proxy >> /dev/null
echo -e "${RED}MSN-PROXY PARADO${CLOSE}"
}
 
case "$1" in
start)
start;;
 
stop)
stop;;
 
restart)
stop
start
;;
 
*)
echo -e "${RED}COMANDO INVALIDO${CLOSE}"
;;
esac
 
exit 0

Agora vamos acertar as permissões do script

chmod +x /etc/init.d/msn-proxy

Agora vamos inserir ele na inicialização do sistema

insserv -v -f msn-proxy

O nosso MSN-Proxy já está configurado e na inicialização do sistema.

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

Seu cache manager está em http://ip_servidor/cgi-bin/cachemgr.cgi usuário para acesso é O root e a senha é a do root, este aplicativo mostra estatísticas do cache do squid.

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

Referências