SQUID
____________________________________________
SEMANA DE REDES DE COMPUTADORES
2015
FACULDADE ESTÁCIO DE SÁ
UMA SOLUÇÃO DE PROXY PARA
AMBIENTES HETEROGÊNEOS
2/78
AGENDA
●APRESENTAÇÕES;
●INTRODUÇÃO;
●FIREWALL'S;
●PREPARAR O AMBIENTE;
●SERVIDORES PROXY;
●INSTALAÇÃO;
●COMANDOS;
●BÁSICO;
●CACHE;
●ACL;
●LOG;
●EXERCICIOS;
•
AUTENTICAÇÃO;
•
CONTROLE DE BANDA;
•
DICAS;
4/78
APRESENTAÇÕES
Flavio Alexandre dos Reis
✔
Tecnólogo em Tecnologia da informação;
✔Especialista em Redes de Computadores;
✔Especialista em Segurança da Informação;
✔Certificado LPI/CLA;
✔
Professor do Curso de Administração e Segurança de
Sistemas Computacionais – Faculdade Estácio de Sá;
✔
Professor de disciplinas com enfase em Sistemas
Operacionais, Redes de Computadores e Segurança da
Informação;
✔
Pesquisador independente de Software Livre e Segurança da
Informação;
✔
Ministra curso de formação Linux com foco na Certificação
LPI;
✔
Ministra cursos de Segurança de Redes, Servidores WEB,
5/78
INTRODUÇÃO
? %
? %
? %
SEGURANÇA
RISCO
DISPONIBILIDADE
6/78
FIREWALL
O Firewall é um programa que tem como objetivo proteger a máquina contra acessos indesejados, tráfego indesejado.
Proteger serviços que estejam rodando na máquina e bloquear a passagem de “coisas” que você não deseja receber (como conexões vindas da Internet para sua segura rede local.
Evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais). Vamos conhecer alguns tipos de Firewal's, existem basicamente dois tipos.
7/78
FIREWALL
Nível de pacotes
Este tipo de firewall toma as decisões baseadas nos parâmetros do pacote,
como porta/endereço de origem/destino, estado da conexão, e outros
parâmetros do pacote. O firewall então pode negar o pacote (DROP) ou
deixar o pacote passar (ACCEPT). O iptables é um excelente firewall que se
encaixa nesta categoria.
Os dois tipos de firewalls podem ser usados em conjunto para fornecer
uma camada dupla de segurança no acesso as suas máquinas/máquinas
clientes.
Normalmente, as empresas preferem implementar um Firewall baseado
apenas em uma máquina, seja ele um host PC ou um roteador. Entretanto,
os Firewalls mais robustos são compostos de várias partes. Agora sim você
deve ter pensado ai, entendi porque to falando de iptables.
8/78
FIREWALL
Packet Filter – Trata 20 a 24 bytes – Ou seja, ele trata todo o cabeçalho IP
(primeiros 20 bytes) e parte do cabeçalho de transporte no que diz respeito
a porta origem e destino, lembrando que esse campo tem 4 bytes (16 bits –
2^16 = total de 65536 portas).
StateLess– Trata um pouco mais de 24 bytes, mais isso varia de acordo
com a forma que a ferramenta foi implementada. Em alguns casos analisa
o flag de início de conexão TCP mas não é capaz de tratar o conceito de
estado de conexão.
StateFull – Trata no mínimo os 40 bytes iniciais, ou seja, todo cabeçalho IP
seja qual for o protocolo de transporte (UDP, TCP), sabendo tratar estado
de conexão.
11/78
FIREWALL
Nível de aplicação
Este tipo de firewall analisa o conteúdo do pacote para tomar suas
decisões de filtragem.
Firewalls deste tipo são mais intrusivos (pois analisam o conteúdo de tudo
que passa por ele) e permitem um controle relacionado com o conteúdo do
tráfego.
Alguns firewalls em nível de aplicação combinam recursos básicos
existentes em firewalls em nível de pacotes combinando as funcionalidade
de controle de tráfego/controle de acesso em uma só ferramenta.
12/78
PREPARANDO O AMBIENTE
A escolha correta do hardware faz uma grande diferença. As vezes alguém
chega pra você e diz assim:
“Pega aquela máquina velha lá e coloca um proxy pra rodar, Linux
não roda em qualquer coisa...”.
Avalie essa frase, pense, reflita um pouco mais, quer mais tempo ?.
Iremos estudar durante o curso as vantagem de um proxy, mas há também
os cuidados que temos que tomar para que ele não seja uma dor de
cabeça.
Nesse ponto preciso que você entenda que essa fase poderá influenciar no
desempenho do seu proxy ( e muito, pode acreditar ).
14/78
INSTALAÇÃO PERSONALIZADA
Olha, esse passo é muito importante, pois um espaço não previsto pode ser
necessário. Servidores proxy utilizam de um espaço extra para gravação
de logs e cache
Todos esses logs e caches podem ser configurados, mas iremos partir do
ponto em que estamos analisando o pior caso, onde o administrador
( nesse caso você ) deverá gerar logs de todos os acessos e manter um
cache dos sites e arquivos trafegados na rede.
Mas como no nossa mundo Linux temos sempre uma saída, se você errar
no particionamento, há uma solução chamada LVM ( Logical Volume
15/78
PARTICIONAMENTO
/boot
ext4
512 MB
/
ext4
15 GB
/usr
ext4
15 GB
/home
ext4
05 GB
/var
ext4
05 GB
/var/log
ext4
10 GB
/var/squid1
ext4
10 GB
/var/squid2
ext4
10 GB
/var/squid3
ext4
10 GB
/opt
ext4
2,4 GB
Swap
*
2 GB
/tmp
ext4
1 GB
17/78
SERVIDORES PROXY
Se você chegou até aqui é porque está realmente interessado em colocar
seu servidor no ar.
O que é um proxy ?
18/78
SERVIDORES PROXY
Um proxy é um servidor que age como um intermediário para requisições
de clientes solicitando recursos de outros servidores.
Um cliente conecta-se ao servidor proxy, solicitando algum serviço, como
um arquivo, conexão, página web ou outros recursos disponíveis de um
servidor diferente e o proxy avalia a solicitação como um meio de
simplificar e controlar sua complexidade.
Os proxies foram inventados para adicionar estrutura e encapsulamento a
sistemas distribuídos.
Hoje, a maioria dos proxies são proxies web, facilitando o acesso ao
conteúdo na World Wide Web e fornecendo anonimato.
19/78
TIPOS DE PROXY
Proxy Transparente
Não há a necessidade de configurar o uso do proxy,
Proxy Controlado
Se caracteriza pela necessidade de configuração do navegador. A
principal vantagem deste serviço é a restrição imposta a
20/78
TIPOS DE PROXY
Proxy Anônimo
Um Proxy anônimo é um tipo especial de proxy que é executado
com um software que apaga seu endereço IP de qualquer
requisição de página e o substitui pelo seu próprio.
Proxy Reverso
Um proxy no modelo convencional, intercepta requisições da rede
local com destino à Internet, já o proxy reverso intercepta
21/78
APLICAÇÕES
●
Cache
●
Autenticação
●
Lista de Controle de Acesso
●
Controle de Banda
22/78
INSTALAÇÃO
#aptitude search squid3
23/78
COMPILANDO
$./configure \ --prefix=/usr \ --sysconfdir=/etc/squid \ --libexecdir=/usr/libexec/squid \ --datadir=/usr/share/squid \ --enable-carp --with-pthreads \ --enable-removal-policies="heap lru" \ --enable-icmp --enable-delay-pools \ --enable-useragent-log \ --enable-referer-log \ --enable-kill-parent-hack \ --enable-snmp \ --enable-arp-acl \ --enable-htcp --enable-ssl \ --with-openssl=/usr \ --enable-forw-via-db \ --enable-default-err-language=Portuguese \24/78
COMPILANDO
--enable-err-languages="Portuguese English Spanish" \ --enable-poll \
--enable-linux-netfilter \ --enable-leakfinder \ --enable-underscores \
--enable-auth="basic digest ntlm" \
--enable-basic-auth-helpers="PAM YP SMB SASL NCSA LDAP winbind" \ --enable-ntlm-auth-helpers="SMB winbind no_check fakeauth" \
--enable-digest-auth-helpers=password \ --enable-ntlm-fail-open \
--enable-external-acl-helpers="ip_user ldap_group unix_group wbinfo_group winbind_group"
$ make $ su
25/78
COMPILANDO
Erros podem ocorrer no processo, normalmente os motivos dos erros são mostrados, são dependências, por isso preste bastante atenção nas linhas onde estão as saídas de erro, lá provavelmente estará o motivo do seu erro.
Algumas opções
Sobre as opções, suas definições estão todas em "./configure --help".
--prefix=/usr - muda o caminho da instalação para "/usr" ao invés de "/usr/local";
--libexecdir=/usr/libexec/squid - envia todas as bibliotecas executáveis para /usr/libexec/squid;
--enable-removal-policies="heap lru" - habilita as políticas de remoção de cache em memória;
--enable-useragent-log - adiciona o log do cabeçalho "useragent"; --enable-referer-log - adiciona o log do cabeçalho "referer";
--enable-err-languages="Portuguese English Spanish" - idioma das páginas de erro; --enable-default-err-language=Portuguese - usa como padrão o idioma pt_BR nas páginas de erro;
--enable-linux-netfilter - adiciona suporte a proxy transparente; --enable-underscores - adiciona suporte a sublinhado;
26/78
COMPILANDO
--enable-auth="basic digest ntlm" - habilita os esquemas de autenticação;
--enable-basic-auth-helpers="PAM YP SMB SASL NCSA LDAP winbind" - habilita os módulos que poderão ser usados para autenticação.
27/78
DIRETÓRIO DE INSTALAÇÃO
# cd /etc/squid3/
# ls -l
total 224
-rw-r--r-- 1 root root 1547 Ago 28 2014 errorpage.css -rw-r--r-- 1 root root 421 Ago 28 2014 msntauth.conf -rw-r--r-- 1 root root 206557 Ago 28 2014 squid.conf
28/78
ARQUIVO DE CONFIGURAÇÃO
root@jarvis:/etc/squid3# head -n 15 squid.conf # WELCOME TO SQUID 3.1.20
# ---#
# This is the documentation for the Squid configuration file. # This documentation can also be found online at:
# http://www.squid-cache.org/Doc/config/ #
# You may wish to look at the Squid home page and wiki for the # FAQ and other documentation:
# http://www.squid-cache.org/
# http://wiki.squid-cache.org/SquidFaq
# http://wiki.squid-cache.org/ConfigExamples #
# This documentation shows what the defaults for various directives # happen to be. If you don't need to change the default, you should
29/78
REMOVENDO COMENTÁRIOS
# cd /etc/squid3 # wc -l squid.conf
5539 squid.conf-original
# mv squid.conf squid.conf_original
# egrep -v “^#|^$” squid.conf_original >> squid.conf
# wc -l squid.conf
30/78
SQUID.CONF
# cat squid.conf
B
1 acl manager proto cache_object 2 acl localhost src 127.0.0.1/32 ::1
3 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 4 acl SSL_ports port 443 # https 5 acl Safe_ports port 80 # http
6 acl Safe_ports port 21 # ftp
7 acl Safe_ports port 443 # https 8 acl Safe_ports port 70 # gopher 9 acl Safe_ports port 210 # wais
10 acl Safe_ports port 1025-65535 # unregistered ports 11 acl Safe_ports port 280 # http-mgmt
12 acl Safe_ports port 488 # gss-http 13 acl Safe_ports port 591 # filemaker 14 acl Safe_ports port 777 # multiling http 15 acl CONNECT method CONNECT
31/78
SQUID.CONF
16 http_access allow manager localhost 17 http_access deny manager
18 http_access deny !Safe_ports
19 http_access deny CONNECT !SSL_ports 20 http_access allow localhost
21 http_access deny all 22 http_port 3128 23 hierarchy_stoplist cgi-bin ? 24 coredump_dir /var/spool/squid3 25 refresh_pattern ^ftp: 1440 20% 10080 26 refresh_pattern ^gopher: 1440 0% 1440 27 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 28 refresh_pattern . 0 20% 4320
32/78
COMANDOS ÚTEIS
# squid3 -k parse
Busca por erros no arquivo de configuração
# squid3 -z
Com o squid parado esse comando cria os diretórios de cache
# squid3 -k reconfigure
Recarrega o squid sem ter que reiniciá-lo, sempre que algo for alterado esse comando deve ser executado para que as mudanças entrem em vigor.
33/78
COMANDOS ÚTEIS
# invoke-rc.d squid3 {start|stop|reload|force-reload|restart} # service squid3 {start|stop|reload|force-reload|restart}
# /etc/init.d/squid3 {start|stop|reload|force-reload|restart}
Os 3 comandos acima podem ser utilizados para iniciar, parar, reiniciar, o squid.
34/78
NAVEGADORES
35/78
PRIMEIROS CONTROLES
Você criar uma gpo no seu AD ou no samba para fazer isso automaticamente. Mais no fim irei mostrar como trabalhar com wpad ( uma opção bem interessante. ) Inserir após a linha “acl localhost src 127.0.0.1/32 ::1 ”
acl myNetwork src 192.168.30.0/29
Inserir após a linha “http_access allow localhost ”
http_access allow myNetwork
Altero a linha “http_port 3128 ”
http_port 192.168.30.6:3128
Insira a linha a pós “http_port ”
36/78
PARAMETROS EXTRAS
access_log /var/log/squid3/access.log squid
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 #disco
cache_dir ufs /var/squid3 9000 16 256 maximum_object_size 512 MB minimum_object_size 0 KB cache_swap_low 90 cache_swap_high 95 #memória cache_mem 1500 MB maximum_object_size_in_memory 128 KB
37/78
PARAMETROS EXTRAS
# Windows Update refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims refresh_pattern www.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims38/78
LOG EM TEMPO REAL – SHELL SCRIPT
Uma tarefa as vezes complicada é identificar porque um determinado
domínio está sendo bloqueado pelo proxy, ai você analisa oq ue o usuário
te passou e mesmo assim não consegue identificar o que realmente está
acontecendo.
Talvez você não queira esperar o relatório do sarg para analisar o que está
ocorrendo. Nesse ponto o uso de um script em shell com uso do awk pode
ajudar muito.
Abaixo segue um exemplo de script escrito em shell que mostra todo o log
do squid em tempo real, com uso do comando grep pode-se criar mais uma
opção de filtro e assim analisar somente as requisições do host em
39/78
LOG EM TEMPO REAL – SHELL SCRIPT
#!/bin/bash #—INICIO— tail -f $1 | awk '{ if (length($7)>76) { if ($4==”TCP_DENIED/403”) { printf “\033[40;31;1m%15s %-27s %-7s %s/…/%s\033[m\n”, $3, $4, $6,substr($7,1,56),substr($7,length($7)-14,15) } else { printf “\033[40;36;1m%15s\033[m \033[40;36m%-27s\033[m \033[40;30;1m%-7s\033[m \033[40;37m%s/…/%s\033[m\n”, $3, $4, $6, substr($7,1,56),substr($7,length($7)-14,15) } } else { if ($4==”TCP_DENIED/403”) { printf “\033[40;31;1m%15s %-27s %-7s %s\033[m\n”, $3, $4, $6, substr($7,1,76) } else { printf “\033[40;36;1m%15s\033[m \033[40;36m%-27s\033[m \033[40;30;1m%-7s\033[m \033[40;37m%s\033[m\n”, $3, $4, $6, substr($7,1,76)}} }' #—FIM—40/78
LOG EM TEMPO REAL – SHELL SCRIPT
# cd /etc/squid3
# chmod a+x analiseProxy.sh
# ./analiseProxy.sh /var/squid3/acesses.log
Pode-se usar filtros durante a consulta.
41/78
ACLS
dstdomain
– Bloqueia por domínios completos
– acl site dstdomain www.terra.com.br
url_regex
– Bloqueia por palavras na url
– acl palavras url_regex terra
dstdom_regex
– Bloqueia palavras inseridas na url.
– Ele bloqueia as palavras apenasna url e não no texto do site.
– Essa opção cria falsos positivos.
– Bloqueia páginas dinâmicas, onde palavras são passadas como
parâmetros.
42/78
ACLS
time
– Controla por horário
– acl allowAlmoco time 12:00-13:30
src
– Controle por endereço de origem
– acl myNetwork src 192.168.30.0/29
dst
– Controle por endereço de destino
43/78
ACLS
proto
– A acl do tipo "proto" significa que será bloqueado um protocolo em
específico, neste caso, o "cache_object". Ela poderia facilmente ser o
protocolo "ftp" ou "http".
– Se você ainda não ouviu falar do protocolo "cache_object", não se
preocupe, ele é um protocolo especifico do squid que retorna
informações ao remetente a respeito de como o cache está
configurada, ou como ele está sendo executado. Ele é utilizado na
seção "http_access".
– Se você receber uma conexão tentando usar o protocolo
cache_object (conforme definido na acl manager), le será negado, a
menos que a origem seja do localhost. Assim, um programa em
execução no servidor de cache real pode obter informações sobre o
estado interno squid, mas não os hosts externos.
44/78
ACLS
port
– Controle de portas
– acl SSL_ports port 443
– acl Safe_ports port 80
proxy_auth
– Usado em autenticação
– acl groupWork proxy_auth flavio
method
– O método PURGE exclui os objetos armazenados no cache do Squid,
enquanto o método CONNECT diz ao Squid para deixar passar quem
fizer parte da ACL CONNECT.
arp
– Controle de Acesso por MAC
45/78
CRIANDO ACLS
# cd /etc/squid3
# pwd
# mkdir acls
# cd acls
– Controle de Acesso por IP
47/78
PÁGINA DE RETORNO
$ ls -l /usr/share/squid3/errors/pt-br
total 172
-rw-r--r-- 1 root root 1062 Jun 18 2012 ERR_ACCESS_DENIED
-rw-r--r-- 1 root root 1220 Jun 18 2012 ERR_ACL_TIME_QUOTA_EXCEEDED
-rw-r--r-- 1 root root 1591 Jun 18 2012 ERR_AGENT_CONFIGURE
-rw-r--r-- 1 root root 1589 Jun 18 2012 ERR_AGENT_WPAD
-rw-r--r-- 1 root root 1090 Jun 18 2012 ERR_CACHE_ACCESS_DENIED
-rw-r--r-- 1 root root 1245 Jun 18 2012 ERR_CACHE_MGR_ACCESS_DENIED
-rw-r--r-- 1 root root 1447 Jun 18 2012 ERR_CANNOT_FORWARD
-rw-r--r-- 1 root root 1345 Jun 18 2012 ERR_CONFLICT_HOST
-rw-r--r-- 1 root root 1031 Jun 18 2012 ERR_CONNECT_FAIL
-rw-r--r-- 1 root root 966 Jun 18 2012 ERR_DIR_LISTING
-rw-r--r-- 1 root root 1132 Jul 9 2011 ERR_DNS_FAIL
-rw-r--r-- 1 root root 1081 Jul 9 2011 ERR_ESI
48/78
EXERCÍCIOS
Criação de acls para:
✔
Liberar determinado conteúdo;
✔Bloquear determinado conteúdo;
✔Bloqueio de downloads;
✔
Bancos;
✔Trabalho;
✔Palavras
✔Horário;
49/78
SITE SEM CACHE
# cd /etc/squid3 # vim squid.conf
acl SITE dstdomain www.site-sem-chace.com.br no_cache deny SITE
50/78
CONTROLE DE BANDA
Controle ocorre somente no tráfego de http, ou seja somente na navegação e download.
Caso os usuários utilizem algum outro software, via P2P por exemplo (e-mule, kazaa e outros), o Squid não controla e, neste caso é necessário utilizar controle de banda via iproute (Outro assunto um pouco mais compelxo) .
Banda baixa (128 Kbs) Banda media (256 kbs) Banda alta (512 kbs)
# vim /etc/squid3/squid.conf
# ACLS
acl bandabaixa proxy_auth usuario1 acl bandamedia proxy_auth usuario2 acl bandaalta proxy_auth usuario3
51/78
CONTROLE DE BANDA
# Delay Pools delay_pools 3 delay_class 1 2 delay_class 2 2 delay_class 3 2delay_access 1 allow bandabaixa delay_access 2 allow bandamedia delay_access 3 allow bandaalta
delay_parameters 1 -1/-1 13000/13000 delay_parameters 2 -1/-1 25000/25000 delay_parameters 3 -1/-1 52000/52000
52/78
SARG
O SARG (Squid Analysis Report Generator) é uma ferramenta muito boa desenvolvida por um brasileiro que permite à você ver para “onde” seus usuários estão indo na Internet através da análise do arquivo de log “access.log” do famoso proxy Squid. O poder da ferramenta é incrível, ele pode dizer para você quais usuários acessaram quais sites, em que horas, quantos bytes foram baixados, quantas conexões foram feitas, relatórios de sites mais acessados, usuários que mais acessam, relatório de sites negados, falha de autenticação, entre outros.
A gerência que você pode obter com isso é muito boa, principalmente para as empresas que querem economizar o uso da Internet
53/78
SARG
#aptitude install sarg
#aptitude install apache2
#vim /etc/sarg/sarg.conf
7
access_log /var/log/squid3/access.log
25
title "Squid User Access Reports"
120 output_dir /var/www/sarg/squid
55/78
MYSAR
O MySar é um analisador de log, seu objetivo é ler o arquivo access.log do Squid da mesma forma que o Sarg.
A Diferença é o tempo de atualização da lista (1 minuto) e a utilização de uma base de dados SQL (MySQL) para armazenar as informações.
Baixando MySar
Espelho da UFPR, utilize sempre a versão estável mais nova por questão de segurança:
56/78
MYSAR
Dependências baixadas para rodar o MySar: - Mysql-server;
- Apache2; - php5;
- php5-mysql; - Squid;
Caso não possua os pacotes baixe-os via apt-get:
# apt-get install mysql-server apache2 php5 php5-mysql
Descompacte para um diretório de sua preferência, no meu caso em /usr/local:
57/78
MYSAR
No APACHE
Alias /mysar /var/www/mysar/www <Directory "/var/www/mysar/www"> Options Indexes MultiViews
AllowOverride None Order allow,deny Allow from all </Directory>
Restartando serviço do apache para aplicar modificação:
# /etc/init.d/apache2 restart
Agora vamos conceder permissão de dono do diretório mysar para www-data (Usuário do apache):
58/78
MYSAR
Vamos "criar" o arquivo config.ini:
# cd /var/www/mysar/etc
# cp config.ini.example config.ini
Agora o mysar já está pronto para ser configurado, essa configuração será feita acessando a web do servidor: http://ip_do_servidor/mysar
Clique em "Click here to continue >>>" Siga as telas de configuração
59/78
MYSAR
Vamos apenas fazer os ultimos ajustes no mysar. Acesse pela web e clique em "Administration"
Confira o caminho do arquivo access.log e confirme.
OBS.: Como já utilizo o Sarg e estou implementando o mysar eu vou deixar que ele crie log de 1 dia e não resolva nome de estação. Recomendo que você utilize as opções padrão:
Adicione as rotinas no contrab:
# crontab -e * * * * * root /usr/local/mysar/bin/mysar-importer.php > /var/log/mysar/mysar-importer.log 2>&1 * * * * * root /usr/local/mysar/bin/mysar-resolver.php > /var/log/mysar/mysar-resolver.log 2>&1 0 1 * * * root /usr/local/mysar/bin/mysar-maintenance.php /var/log/mysar/mysar-maintenance.log 2>&1
60/78
LOG PERSONALIZADO
Com a liberação de novas versões do squid surgiram várias novas funcionalidades e uma delas é o logformat que serve para manipular a forma em que o log será
gerado. Funciona da seguinte forma:
logformat < nome> < especificação do formato>
O nome nada mais é do que um nome para manipulação do formato.
A especificação do formato pode ser customizada como o administrador achar melhor, sempre adicionando o prefixo %. Segue a lista de especificações:
61/78
LOG PERSONALIZADO
>a IP de origem da requisição (cliente) >A FQDN do cliente
>p Porta de origem no cliente < A IP do servidor de destino la IP local do servidor Squid lp Porta local do servidor Squid
ts Segundos passados desde a requisição tu Subsegundos
tl Horário do servidor. Strings opcionais utilizadas como padrão. %d/%b/%Y:%H: %M:%S %z
tg Horário GMT. Strings opcionais utilizadas como padrão. %d/%b/%Y:%H:%M:%S %z
tr Tempo de resposta, em milisegundos) >h Cabeçalho de requisição. < h Cabeçalho de retorno. un Nome do usuário ul Login do usuário ui Ident do usuário us SSL
62/78
LOG PERSONALIZADO
ue ACL externa
Hs Status do código HTTP
Ss Status da requisição (TCP_MISS/TCP_REFRESH/TCP_DENIED etc) Sh Status da hierarquia do Squid (DEFAULT_PARENT etc)
mt MIME type do conteúdo
rm Método requisitado na conexão(GET/POST/CONNECT etc) ru URL requisitada
rv Versão do protocolo requisitado
ea String retornada por uma ACL externa
< st Tamanho da resposta, incluindo cabeçalho HTTP % % literal
63/78
LOG PERSONALIZADO
Nova forma para o log
Para criar um novo template para o seu arquivo de log primeiro precisamos criar uma diretiva do tipo logformat que será usada mais a frente.
logformat MEU_LOG IP do cliente: %>a - Username: %un - Horario: [%tl] - Metodo: %rm - URL: %ru - Status HTTP: Hs - Status Squid: %Ss
Logo em seguida definimos onde será utilizado o novo template. Estou separando em dois arquivos de logs (access.log e gerencia.log) para não atrapalhar o correto
funcionamento do SARG.
O logformat com o nome squid é o padrão do Squid que estamos acostumados a ver e que o SARG necessita para que funcione corretamente.
O logformat com o nome MEU_LOG foi o template que criei para poder enviar, em um formato mais amigável, para a gerencia.
access_log /var/log/squid/access.log squid
64/78
LOG PERSONALIZADO
Nunca esquecer de dar um reload no Squid para que as novas configurações entrem em vigor.
# squid -k reconfigure
Log de acesso
Após a criação das regras meus dois logs de acesso, acessando o site http://www.integral.inf.br/, ficaram da seguinte forma
access.log
1431486561.078 171 192.168.25.204 TCP_MISS/200 9847 GET
http://www.reisfa.eti.br/site/wp-content/themes/firmasite/assets/js/bootstrap.min.js? reisfa DIRECT/192.99.160.41 application/javascript
1431486561.125 104 192.168.25.204 TCP_MISS/200 42671 GET
http://fonts.gstatic.com/s/ubuntucondensed/v6/DBCt-NXN57MTAFjitYxdrK8NE7_Gi-Xz52ZQ_AwfA78.woff reisfa DIRECT/216.58.222.35 font/woff
65/78
LOG PERSONALIZADO
gerencia.log
IP do cliente: 192.168.25.204 - Username: reisfa - Horario: [13/May/2015:00:09:19 -0300] - Metodo: GET - URL: http://reisfa.eti.br/favicon.ico - Status HTTP: Hs - Status Squid: TCP_MISS
IP do cliente: 192.168.25.204 - Username: reisfa - Horario: [13/May/2015:00:09:20 -0300] - Metodo: GET - URL: http://reisfa.eti.br/favicon.ico - Status HTTP: Hs - Status Squid: TCP_MISS
IP do cliente: 192.168.25.204 - Username: reisfa - Horario: [13/May/2015:00:09:20 -0300] - Metodo: GET - URL: http://www.reisfa.eti.br/site/ - Status HTTP: Hs - Status Squid: TCP_MISS
IP do cliente: 192.168.25.204 - Username: reisfa - Horario: [13/May/2015:00:09:20 -0300] - Metodo: GET - URL: http://fonts.googleapis.com/css? - Status HTTP: Hs - Status Squid: TCP_MISS
IP do cliente: 192.168.25.204 - Username: reisfa - Horario: [13/May/2015:00:09:20 -0300] - Metodo: GET - URL:
http://www.reisfa.eti.br/site/wp-content/themes/firmasite/style.css? - Status HTTP: Hs - Status Squid: TCP_MISS
IP do cliente: 192.168.25.204 - Username: reisfa - Horario: [13/May/2015:00:09:20 -0300] - Metodo: GET - URL:
66/78
LOG PERSONALIZADO
Tratando ACL
Com essa nova funcionalidade podemos atrelar um arquivo de log para cada acl como abaixo.
logformat LOG_DOMINIOS_LIBERADOS IP do cliente: %>a - Username: %un - Horario: [%tl] - Metodo: %rm - URL: %ru - Status HTTP: sHs - Status Squid: %Ss
acl DOMINIOS_LIBERADOS dstdomain
"/etc/squid3/acls/DOMINIOS_LIBERADOS.acl"
access_log /var/log/squid/dominios_liberados.log LOG_DOMINIOS_LIBERADOS DOMINIOS_LIBERADOS
Desta forma todo o acesso que casar com a acl DOMINIOS_LIBERADOS será gravado no arquivo de log /var/log/squid/dominios_liberados.log com o formato definido em LOG_DOMINIOS_LIBERADOS
67/78
AUTENTICAÇÃO - NCSA
#locate ncsa #cd /etc/squid3
#touch squidPasswd
#aptitude install apache2-utils #htpasswd squidPasswd reisfa #vim squid.conf
auth_param basic realm Squid-digite uma senha
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/squidPasswd
acl autenticados proxy_auth REQUIRED …
http_access allow autenticados http_access allow localhost
68/78
AUTENTICAÇÃO
69/78
BANNER FILTER
O bannerFilter faz o bloqueio de diversos banners de publicidade; Influencia na navegabilidade;
Evita que usuário cliquem em links possivelmente contaminados;
#wget http://phroggy.com/files/unix/bannerfilter-1.31.tar.gz # tar zxvf bannerfilter-1.31.tar.gz
70/78
BANNER FILTER
Mova o conteúdo do diretório www para algum lugar acessível em seu Web server. Esses arquivos PRECISAM estar acessíveis ao squid via HTTP.
Mova todo o resto para /etc/squid3/bannerfilter ou /usr/local/squid3/etc/bannerfilter Edite o redirector.pl. Se você não tem o perl no local padrão (/usr/bin/perl), mude a primeira linha (ou crie um symlink).
Mude as variáveis $DATA e $WWW como indicado nos comentários. Opcionalmente, mude também $LOG e $BANNERGIF como indicado.
Teste o redirector.pl rodando-o (perl redirector.pl), digite alguma coisa e veja se recebe essa coisa de volta..
71/78
BANNER FILTER
Editando o squid.conf
Procure pela seção que fala sobre redirect (TAG: redirect_program) e insira a linha:
#vim /etc/squid3/squid.conf
redirect_program /etc/squid/bannerfilter/redirector.pl ou
72/78
SQUIDGUARD
#aptitude install squidguard
# wget -c http://squidguard.mesd.k12.or.us/blacklists.tgz
# wget -c http://www.shallalist.de/Downloads/shallalist.tar.gz
# cp blacklists.tgz shallalist.tar.gz /var/lib/squidguard/db/
# cd /var/lib/squidguard/db/
# tar zvxf blacklists.tgz
73/78
SQUIDGUARD
# vim /etc/squid/squidGuard.conf
dbhome /var/lib/squidguard/db/blacklists
logdir /var/log/squid
dest porn {
domainlist porn/domains
urllist porn/urls
}
dest proxy {
domainlist proxy/domains
urllist proxy/urls
}
acl {
default {
pass !porn !proxy all
74/78
SQUIDGUARD
# squidGuard -C all
# cd /var/lib/squidguard
# pwd
/var/lib/squidguard
# chown -R proxy.proxy db/
# find db/ -type f | xargs chmod 644
# find db/ -type d | xargs chmod 755
75/78
SQUIDGUARD
#cd /etc/squid3
#vim /etc/squid3/squid.conf
redirect_program /usr/bin/squidGuard
redirect_children 8
redirector_bypass on
#/etc/init.d/squid3 restart
#squidGuard -C all
#squid3 -k reconfigure
#tail -f /var/log/squid/squidGuard.log
76/78
PROXY TRANSPARENTE
# modprobre iptables_nat
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j
REDIRECT –to-port 3128
# iptables -A INPUT -m tcp -p tcp -s !127.0.0.1 –dport 3128 -j DROP
# vim /etc/squid3/squid.conf
78/78