trabalho proxy
TRANSCRIPT
FUNDAÇÃO DE ESTUDOS SOCIAIS DO PARANÁ
CURSO DE SISTEMAS DE INFORMAÇÃO
REDES E SISTEMAS DISTRIBUÍDOS
TRABALHO SOBRE PROXY
CURITIBA 2006
ADOLFO KAWIATKOWSKI NETO MAURO PEREIRA DA SILVA SIDNEY RAMOS LOPES
TRABALHO SOBRE PROXY
Trabalho apresentado como requisito parcial para a nota da 1ª avaliação do 1º Bimestre, da Disciplina de Redes e Sistemas Distribuídos. Prof. Airton Kuada.
CURITIBA 2006
SUMÁRIO
1. INTRODUÇÃO..............................................1 2. COMO FUNCIONA...........................................2 3. CONFIGURAÇÕES...........................................3 4. ESTATÍSTICAS DO PROXY...................................5 5. CASO REAL...............................................6 6. BIBLIOGRAFIA...........................................47
1
1. INTRODUÇÃO Este trabalho envolve pesquisa em literaturas, páginas de
Internet, livros, revistas, etc, para embasar sobre o assunto:
PROXY.
Um proxy funciona como um servidor intermediário entre os
browsers WWW e os servidores aos quais os pedidos são
efetuados. O cliente faz o pedido ao proxy e este é que na
realidade contacta o servidor pretendido e transfere o
documento, enviando-o depois ao cliente. Se o proxy funcionar
também como servidor de caching, armazena o documento durante
um período de tempo pré-determinado e em subsequentes pedidos
desse mesmo documento devolve a cópia que tem armazenada, o
que acelera consideravelmente o tempo de resposta. As
instituições ligadas à RCCN podem usar um servidor nacional de
proxy disponibilizado para o efeito.
2
2. COMO FUNCIONA O proxy/servidor de caching recebe os pedidos que lhe são
feitos pelos clientes e para um determinado pedido vai
verificar se existe na colecção de documentos que tem
guardada. Se existir e ainda não tiver expirado um determinado
período de tempo a partir do qual o documento já não é válido,
devolve-o imediatamente ao cliente. Caso contrário, contacta o
servidor onde se encontra o documento, grava-o e devolve-o ao
cliente. O software escolhido (Squid) leva este modelo um
pouco mais além e estabelece uma hierarquia de proxies, i.é.,
é definida uma rede de servidores que comunicam entre si,
estando esta rede organizada em árvore.
Este serviço possibilita o acesso à WWW usando maquinas
"inseguras" (como PCs ou Macs) às quais está vedado o acesso
directo ao tráfego internacional a partir da rede UALNET.
O servidor de Proxy dos SI implementa um sistema de caching de
resultados a pedidos nos protocolos HTTP, FTP, Gopher e WAIS.
3
3. CONFIGURAÇÕES
Para utilizar este serviço é necessário parametrizar os
browsers (Mosaic, Netscape, Explorer).
Nos sistemas UNIX esta parametrização pode ser feita
modificando a variável de âmbiente http_proxy, executando uma
das seguintes linha de comando, repectivamente na sh (ou
compativel) e na csh.
http_proxy="http://.proxy1.si.ualg.pt:8080"; export
http_proxy
setenv http_proxy "http://proxy1.si.ualg.pt:8080"
Para o ambiente Windows vejamos as configurações dos dois
browsers mais populares:
Netscape Navigator/Communicator
Os utilizadores deste browser devem definir, no menu
Options/Network Preferences/Proxies a utilização de Automatic
Proxy Configuration com o seguinte URL (caixa Location (URL)):
http://proxy1.si.ualg.pt/config.pac
Este URL define o script de configuração automática do browser
para utilização dos proxies.
Aconselha-se a utilização da configuração automática, pois ao
contrário da configuração manual (com os dados da tabela em
baixo) esta permite ao browser utilizar o proxy de backup
(proxy2.si.ualg.pt) quando o principal (proxy1.si.ualg.pt) se
encontra indisponível.
4
Microsoft Internet Explorer
• Versao 3.02 (25 Março 97):
Os utilizadores desta versão podem utilizar o script de
configuração automática referido anteriormente. Para
isso, no menu View/Options/Advanced clicar em Automatic
Configuration e introduzir a URL indicada acima, clicando
em Refresh para terminar.
• Versões anteriores:
Os utilizadores de versões anteriores deste browser devem
habilitar a opção Connect through a proxy server no menu
View/Options/Connection, e definir em Settings:
Protocol
http
FTP
GOPHER
Host
proxy1.si.ualg.pt
proxy1.si.ualg.pt
proxy1.si.ualg.pt
Port
8080
8080
8080
5
4. ESTATÍSTICAS DO PROXY
Tal como para os outros serviços e servidores existem também
estatísticas de utilização dos servidores de Proxy dos S.I.
Mensagem "ERROR - The requested URL could not be retrieved"
Se a mensagem for apenas em determinada(s) página(s), não
existe nenhuma relação com o Proxy Cache. Muito provavelmente
o servidor, que armazena esta página está fora da rede. Tente
mais tarde ou contacte o responsável por ela.
Caso o problema esteja ocorrendo em todas as páginas, muito
provavelmente a configuração do proxy cache está incorreta.
Volte a tela de configurações e repita passo a passo todos os
itens. Lembre-se de que existe diferença entre maiúsculas e
minúsculas, e que um caracter errado é suficiente para causar
o não funcionamento.
RESUMO:
Um servidor proxy é um programa que armazena localmente objetos
da Internet para posterior distribuição. Objetos da Internet
podem ser páginas web, imagens, arquivos de som, programas,
etc.
6
5. CASO REAL
INSTALAÇÃO E CONFIGURAÇÃO DO SQUID OBJETIVO: Este artigo pretende demonstrar de forma fácil e
objetiva a instalação e configuração do servidor proxy SQUID.
O que é o Squid? – Se trata de um dos servidores cachê proxy
mais utilizados no mundo, que funciona como um intermediário
entre a Internet com os demais micros da rede que não tem
acesso a web, sendo que neste intermédio podem-se colocar
restrições(filtros) de acesso, obter informações de locais
acessados, restringir uso de banda e criar redirecionamentos.
Inicialmente apresentaremos as vantagens e desvantagens do uso
da ferramenta. Logo após demonstraremos onde obter o squid, e
como proceder com sua instalação (apesar que praticamente
quase todas as distribuições Linux já trazem esta excelente
ferramenta em seus pacotes). Passaremos para o arquivo de
configuração do serviço onde serão abordadas as principais
opções. Depois de concluída a instalação e configuração da
ferramenta, colocaremos a mesma para funcionar. Com tudo
rodando perfeitamente continuaremos nosso artigo apresentando
ferramentas que nos ajudam a fazer leitura dos log´s gerados
pelo squid.
O QUE É E PARA QUE SERVE O PROXY: O proxy funciona como um
servidor http porem com características especiais entre os
quais o mais fundamental é o filtro de pacotes que tipicamente
são executados em um servidor firewall. O proxy aguarda por
uma requisição de uma estação da rede interna protegida pelo
firewall e repassa esta informação para uma máquina remota na
Internet, esta retorna a requisição e o proxy recebe a
resposta e a encaminha novamente para a estação cliente.
7
Exemplo na figura 1.1.
Figura 1.1
Ao utilizarmos uma ferramenta proxy como o Squid temos a
vantagem que nos oferece da capacidade de armazenamento
temporário de arquivos, gerados no tráfego. Explicando de uma
maneira mais prática: Cada vez que uma máquina cliente acessa
uma página na Internet uma cópia dela é guardada no que
chamamos de cache do proxy, que consiste em uma área com
tamanhos definidos na configuração da ferramenta e contem as
requisições do sistema. Quando outro usuário acessa a mesma
página de outra estação não há necessidade do acesso a
Internet, porque o proxy vai enviar para o navegador deste
usuário a página contida em seu cache. Conseqüentemente este
processo vai aumentar a velocidade dos acessos à rede
Internet, pois cada vez que se utiliza do cache do Squid é uma
vez a menos que se consome banda de conexão.
Com a utilização do proxy temos a possibilidade de criarmos
regras de acessos a determinados sites da Internet. Isso pode
ser utilizado para ajudar evitarmos que usuários acessem sites
com conteúdos não apropriados como pornográficos,
entretenimento entre outros, principalmente se for no horário
de expediente.
Podemos dizer então que um servidor proxy também serve com um
firewall com base em protocolo que permite filtrar acessos
vindos de clientes da rede interna para a Internet.
8
VANTAGENS E DESVANTAGENS DO SQUID: Algumas vantagens do
servidor proxy:
• Não é necessário nenhum hardware especial. Apenas uma
máquina com 64 MB de memória é o suficiente para uma rede
pequena de até 100 máquinas, porem o Squid tem um
desempenho muito melhor com quanto mais memória lhe for
cedido. Para fazer um cache no disco para começarmos em
uma rede de mesma proporção 200 MB são mais do que o
necessário a princípio, isto vai depender muito dos sites
que serão acessados. Necessitamos também que na máquina
tenha duas placas de rede, uma para fazer a conexão com a
rede local(ip´s inválidos) e outra para conexão
externa(ip válido).
• Permite filtrar ip´s sendo assim liberar ou não acessos a
determinadas páginas da Internet.
• Excelente utilitário para realização de auditoria de
acessos, pois através de seus log´s armazenados podemos
gerar relatórios de todas as conexões que passaram por
ele.
Porem também existem algumas desvantagens na utilização deste
servidor proxy:
• Segurança em protocolos de aplicações – O proxy não
protege um cliente de possíveis falhas de segurança nos
protocolos, ou em aplicações. Um exemplo comum seria um
ataque de buffer overflow (resultado do armazenamento em
um buffer de uma quantidade maior de dados do que sua
capacidade) contra uma determinada aplicação que não será
bloqueado. Este é um problema muito grave.
9
• Poucos serviços suportados – Existem poucos serviços que
são suportados pelo Squid, porem podemos ver que a cada
versão nova lançada os desenvolvedores estão
implementando novos serviços. Vejamos agora os principais
serviços suportados pela versão atual do Squid:
- proxy e cache http e ftp;
- proxy ssl;
- proxy transparente;
- aceleração do servidor http;
- snmp;
- cache de procura dns.
• Processamento em atualização de clientes – como uma
grande parte dos sites são atualizados constantemente o
proxy tem uma carga grande para fazer as atualizações e
modificações de seu cache, em uma rede onde exista um
vasto número de url´s visitadas o problema se torna mais
grave. As vezes podendo se tornar desvantajoso a
utilização do proxy.
Para se ter um sucesso na utilização do proxy é indispensável
que este trabalhe em conjunto com um firewall, complementando
assim a segurança necessária para conter as possíveis
tentativas de invasão a sua rede, ou pelo menos causa uma
dificuldade maior ao invasor.
10
ADQUIRINDO O SQUID: O Squid pode ser baixado e instalado em
diversas plataformas, mais será abordado a instalação para
plataforma Linux distribuição Fedora Core 3. Veja quais
plataformas são suportadas pelo Squid:
• Linux
• FreeBSD
• AIX
• NetBSD
• BSDI
• HP-UX
• OSF
• Digital Unix
• IRIX
• SunOS/Solaris
• NexTStep
• SCO Unix
• OS/2
• Windows NT
Como na maioria dos softwares para Linux o Squid é gratuito e
pode ser baixado em www.squid-cache.org, onde sua versão
estável atual é a 2.5.STABLE12, porem como podemos ver na
figura 1.3 existe uma versão 3.0 em desenvolvimento, a qual
também pode ser baixada. Porem recomenda-se utilizar a versão
estável do produto.
11
Figura 1.2
Figura 1.3
INSTALAÇÃO DO SQUID: Depois de baixar o pacote na máquina que
servirá como servidor proxy, devemos executar o seguintes
comandos:
1º comando – descompactando o arquivo baixado – tar –xzf
squid-2.5.STABLE12.tar.gz -> preste atenção, esta versão se
encontra disponível na data de publicação deste documento,
podendo ser diferente o nome do arquivo na data de sua
instalação.
2º comando - ./configure --prefix=/etc/squid --enable-delay-
pools --enable-cache-digests --enable-arp-acl --enable-linux-
netfilter --enable-default-err-language=Portuguese
3º comando - make all
4º comando – make install
12
Procedendo desta forma habilitamos nesta compilação várias
opções que descrevemos abaixo:
--prefix=/etc/squid: Definindo esta opção o diretório
/usr/local/squid será criado com os principais arquivos do
Squid. Alguns subdiretórios também serão criados, tais /bin
com os binários do Squid e /log para atividades de log do
sistema.
--enable-delay-pools: Habilitando esta opção o proxy fica
apropriado para suporte a controle de banda.
--enable-arp-acl: Com esta opção permitimos o controle por
endereço de MAC.
--enable-linux-netfilter: Fica habilitado o proxy
transparente.
--enable-default-err-language=Portuguese: Com esta opção
habilitada, as mensagens de erro passam a ser mostradas em
português, o que as vezes facilita para muitos.
Para obter detalhes de mais opções de instalação, execute o
comando ./configure –help.
Erros podem aparecer neste processo, normalmente os motivos
dos erros são mostrados, devemos ter atenção em qual linha
esta o erro, geralmente isto também é informado.
Após termos concluído com sucesso sua instalação devemos criar
um usuário para controlar as ações do Squid, ou seja, será
como um administrador para o proxy. Na verdade é um usuário
que o Squid vai utilizar para gerenciar seus arquivos de
13
serviço e configuração. Para criarmos um usuário devemos
digitar os seguintes comando:
1º comando – adduser squidroot -> cria um usuário chamado
squidroot.
2º comando – passwd squidroot -> permite definir uma senha
para o usuário squidroot.
Na verdade não existe a real necessidade de se criar um
usuário específico para gerenciar o Squid, porem por motivos
de segurança sempre é bom criar um usuário para execução de
serviços.
Devemos criar um diretório para onde o Squid vai direcionar as
páginas acessadas e fazer seu cache.
Daremos o seguinte comando dentro da pasta do Squid para criar
o diretório de cache:
Comando : mkdir cache
Logo após mudaremos a permissão do diretório cache para o
usuário squidroot, sendo assim ele se torna responsável por
ele.
Comando: chown squidroot cache
Neste diretório cache o Squid vai criar toda sua área de
armazenamento das páginas visitadas pelos clientes da rede.
Concluído estes passos estaremos prontos para começar a
configurar nosso proxy.
14
INICIANDO A CONFIGURAÇÃO: Para iniciarmos a configuração
devemos editar o arquivo squid.conf que é responsável por toda
e qualquer configuração do Squid e se encontra em /etc/squid.
Obs: Podemos editá-lo com o comando:
vi squid.conf
Dentro deste arquivo iremos criar regras de acesso, filtros na
conexão entre outras importantes parametrizações.
A partir deste momento mostraremos as principais opções
contidas dentro do arquivo de configuração squid.conf. Sendo
que as linhas começadas com # são comentários do arquivo e
quando existir parametrizações a serem feitas estas estarão em
negrito, todas as demais deverão continuar comentadas.
Arquivo de configuração:
# WELCOME TO SQUID 2
# ------------------
#
# This is the default Squid configuration file. #You may
wish to look at the Squid home page
#(http://squid.nlanr.net/) for the FAQ and other
#documentation.
# The default Squid config file shows what the #defaults for
various options happen to be. If you #don't need to change
the default, you shouldn't #uncomment the line. Doing so may
cause run-#time problems. In some cases "none" refers to no
#default setting at all, while in other cases it refers #to a
valid option - the comments for that keyword #indicate if
this is the case.
15
Primeiramente como vimos acima o arquivo nos dá a mensagem de
boas vindas e nos mostra onde podemos conseguir documentações
para ajudar na configuração e se referencia como as descrições
das opções podem nos ajudar.
# NETWORK OPTIONS
# ------------------------------------------------------------
# TAG: http_port
#
# Usage: port
# hostname:port
# 1.2.3.4:port
#
# The socket addresses where Squid will #listen for HTTP
client requests. You may specify #multiple socket
addresses. There are three forms: #port alone, hostname with
port, and IP address #with port. If you specify a hostname or
IP address, #then Squid binds the socket to that specific
#address. This replaces the old #'tcp_incoming_address'
option. Most likely, you do #not need to bind to a specific
address, so you can #use the port number alone.
#
#The default port number is 3128.
#
#If you are running Squid in accelerator mode, then #you
probably want to listen on port 80 also, or #instead.
#
#The -a command line option will override the *first* #port
number listed here. That option will NOT #override an IP
address, however.
#
#You may specify multiple socket addresses on #multiple lines.
16
http_port 3128
http_port 3128 - Neste parâmetro informamos em qual porta TCP
o nosso servidor proxy receberá as requisições para acesso a
Internet. O Squid traz por padrão esta porta, mas poderia ser
alterada para outra porta qualquer desde que ainda não esteja
sendo usada. Comum vermos servidores proxy configurados com as
portas 8080.
# TAG: cache_mem (bytes)
#
#NOTE: THIS PARAMETER DOES NOT SPECIFY #THE MAXIMUM PROCESS
SIZE. IT PLACES A #LIMIT ON ONE ASPECT OF SQUID'S MEMORY
#USAGE. SQUID USES MEMORY FOR OTHER #THINGS AS WELL.
#YOUR PROCESS WILL PROBABLY BECOME #TWICE OR THREE TIMES
BIGGER THAN THE #VALUE YOU PUT HERE
#
# 'cache_mem' specifies the ideal amount of #memory to be
used
# for:
# * In-Transit objects
# * Hot Objects
# * Negative-Cached objects
#
# Data for these objects are stored in 4 KB #blocks. This
parameter specifies the ideal upper #limit on the total size
of 4 KB blocks allocated. In-#Transit objects take the
highest priority.
#
# In-transit objects have priority over the #others. When
additional space is needed for #incoming data, negative-cached
and hot objects #will be released. In other words, the
17
negative-#cached and hot objects will fill up any unused
#space not needed for in-transit objects.
#
# If circumstances require, this limit will be #exceeded.
Specifically, if your incoming request #rate requires more
than 'cache_mem' of memory #to hold in-transit objects, Squid
will exceed this #limit to satisfy the new requests. When the
load
#decreases, blocks will be freed until the high-water #mark is
reached. Thereafter, blocks will be used to #store hot
objects.
#
# The default is 8 Megabytes.
cache_mem 8 MB
cache_mem 8 - Especifica o número ideal de memória usado para
os seguintes objetos:
• Objetos em transito
• Objetos "quentes"
• Objetos com negativa de cachê
O tamanho dos dados para esses objetos é definido em blocos de
4KB. Esse parâmetro especifica o limite ideal para os blocos
alocados. Objetos em transito tem prioridade sobre os outros.
Quando espaço adicional é necessário para novos dados, objetos
"quentes" e com negativa de cache são liberados.
# TAG: maximum_object_size (bytes)
#
18
#Objects larger than this size will NOT be saved on #disk.
The value is specified in kilobytes, and the #default is 4MB.
If you wish to get a high BYTES hit #ratio, you should
probably increase this (one 32 #MB object hit counts for 3200
10KB hits). If you#wish to increase speed more than your want
to #save bandwidth you should leave this low.
#
# NOTE: if using the LFUDA replacement #policy you should
increase this value to maximize #the byte hit rate improvement
of LFUDA! See #replacement_policy below for a discussion of
this #policy.
maximum_object_size 4096 KB
maximum_object_size 4096 KB – Nesta opção devemos escolher o
tamanho máximo de um objeto que vai para o cache. Objetos que
tiverem tamanhos maiores dos que os definidos aqui não ficaram
disponíveis em cache. Devemos ter um pouco de cautela na
parametrização deste item, pois devemos considerar que quanto
maior o número configurado implica em um maior ganho de banda
de conexão porem com perda de performance no cache e um número
baixo pode não ajudar em ganho de banda porem a velocidade de
resposta as requisições aumenta. A escolha depende muito do
número de requisitantes na rede e qual seus objetivos. Neste
caso utilizaremos 4 MB que é o padrão indicado pelo Squid.
# TAG: minimum_object_size (bytes)
#
#Objects smaller than this size will NOT be saved #on disk.
The value is specified in kilobytes, and #the default is 0 KB,
which means there is no #minimum.
19
minimum_object_size 0 KB
minimum_object_size 0 KB – Significa que objetos com tamanhos
menores do o informado não serão armazenados em cache. 0 KB
significa que todos os arquivos serão armazenados em cache até
o limite do valor informado na opção maximum_object_size.
# TAG: cache_dir
# Usage:
#
# cache_dir Type Directory-Name Mbytes #Level-1 Level2
#You can specify multiple cache_dir lines to spread #the cache
among different disk partitions.
#
# Type specifies the kind of storage system to #use. Most
everyone will want to use "ufs" as the #type. If you are
using Async I/O (--enable async-#io) on Linux or Solaris,
then you may want to try #"asyncufs" as the type. Async IO
support may be
#buggy, however, so beware.
#
# 'Directory' is a top-level directory where #cache swap
files will be stored. If you want to use #an entire disk for
caching, then this can be the #mount-point directory.
# The directory must exist and be writable by #the Squid
process. Squid will NOT create this #directory for you.
#
# If no 'cache_dir' lines are specified, the #following
default will be used: /var/spool/squid.
#
# 'Mbytes' is the amount of disk space (MB) to #use under
this directory. The default is 100 MB. #Change this to suit
your configuration.
20
#
# 'Level-1' is the number of first-level #subdirectories
which will be created under the #'Directory'. The default is
16.
#
# 'Level-2' is the number of second-level #subdirectories
which will be created under each #first-level directory. The
default is 256.
cache_dir ufs /var/spool/squid 200 16 256
cache_dir ufs /var/spool/squid 200 16 256 – Especifica o
diretório onde o Squid vai fazer o armazenamento do cache. No
caso os arquivos serão enviados para o diretório
/var/spool/squid. O número 200 indica o tamanho em MB do
arquivo de cache e o 16 256 indica que serão criados 16
diretórios com 256 subdiretórios dentro de cada um deles.
Apesar de o Squid indicar como padrão 100MB que realmente é um
espaço razoável, utilizamos aqui 200MB para cache que
normalmente é um espaço suficiente para o armazenamento dos
arquivos temporários sem a necessidade de uma atualização
muito grande pelo proxy. Porem devemos levar em consideração
novamente o tamanho da rede e quantidade de requisições dos
clientes. Então deve-se haver um acompanhamento no período de
implantação do servidor proxy para que a opção seja ajustada
conforme necessidade e não haver problemas de performance.
# TAG: cache_access_log
#
# Logs the client request activity. Contains an #entry for
every HTTP and ICP queries received.
21
cache_access_log /var/log/squid/access.log
cache_access_log /var/log/squid/access.log - Apresenta o
caminho para o arquivo de log´s de acesso, o qual guarda todas
as requisições e atividades das máquinas clientes da rede.
Através da análise destes log´s e com a ajuda de outras
ferramentas conseguiremos gerar relatórios de acesso a
internet. Veremos como fazer isto detalhadamente adiante.
# TAG: cache_log
#
# Cache logging file. This is where general #information
about your cache's behavior goes. You #can increase the amount
of data logged to this file #with the "debug_options" tag
below.
cache_log /var/log/squid/cache.log
cache_log /var/log/squid/cache.log – Especifica o caminho para
o log de cache. Esse arquivo irá conter informações gerais
sobre o comportamento do Squid.
# TAG: cache_store_log
#
# Logs the activities of the storage manager. #Shows which
objects are ejected from the cache, #and which objects are
saved and for how long. To #disable, enter "none". There are
not really utilities #to analyze this data, so you can safely
disable it.
22
cache_store_log /var/log/squid/store.log
cache_store_log /var/log/squid/store.log – Apresenta o caminho
do log de armazenamento. Neste arquivo encontramos detalhes
sobre o processo de armazenamento em disco. Nos mostrando
quais arquivos entraram no cache, os quais saíram e o tempo de
permanência de cada objeto.
# TAG: request_header_max_size (KB)
#
# This specifies the maximum size for HTTP #headers in a
request.
# Request headers are usually relatively small #(about 512
bytes).
# Placing a limit on the request header size #will catch
certain bugs (for example with persistent connections) and
possibly buffer-overflow or denial-of-service attacks.
request_header_max_size 10 KB
request_header_max_size 10 KB - Especifica o tamanho máximo de
um cabeçalho de uma requisição http.
Como sabe-se que um cabeçalho HTTP deve ser pequeno (por volta
de 512 bytes), limitar o tamanho do mesmo pode ser
interessante no uso de proxy reverso, criando uma barreira a
mais para ataques do tipo buffer overflow e denial of service.
# TAG: request_body_max_size (KB)
#
# This specifies the maximum size for an #HTTP request body.
# In other words, the maximum size of a #PUT/POST request.
23
# A user who attempts to send a request with #a body larger
than this limit receives an "Invalid #Request" error
message.
# If you set this parameter to a zero, there will #be no
limit imposed.
request_body_max_size 10 MB
request_body_max_size 10 MB – Determina o tamanho máximo de
transferência do corpo de uma requisição http para fora de sua
rede, ou seja, upload. Isto é útil para evitar que suas
máquinas clientes fiquem fazendo grandes uploads sem haver
necessidade.
# TAG: reply_body_max_size (KB)
#
# This option specifies the maximum size of a #reply body.
It can be used to prevent users from #downloading very large
files, such as MP3's and #movies. The reply size is checked
twice.
# First when we get the reply headers, we #check the
content-length value. If the content #length value exists and
is larger than this #parameter, the request is denied and the
user #receives an error message that says "the request #or
reply is too large." If there is no content-length, #and the
reply size exceeds this limit, the client's #connection is
just closed and they will receive a partial reply.
#
# NOTE: downstream caches probably can #not detect a partial
reply if there is no content-#length header, so they will
cache partial responses #and give them out as hits. You
should NOT use #this option if you have downstream caches.
#
24
# If you set this parameter to zero (the default), there
will be
# no limit imposed.
reply_body_max_size 0
reply_body_max_size 0 – Tamanho máximo de do corpo de um
reply. Isto significa o tamanho máximo dos arquivos que podem
ser baixados. Isto ajuda evitar que os usuários baixem
arquivos grandes.
# TAG: reference_age
#
# As a part of normal operation, Squid #performs Least
Recently Used removal of cached #objects. The LRU age for
removal is computed #dynamically, based on the amount of disk
space in
#use. The dynamic value can be seen in the Cache Manager
'info' output.
#
# The 'reference_age' parameter defines the #maximum LRU
age. For example, setting #reference_age to '1 week' will
cause objects to be #removed if they have not been accessed
for a #week or more. The default value is one year.
#
# Specify a number here, followed by units of #time. For
example:
# 1 week
# 3.5 days
# 4 months
# 2.2 hours
#
# NOTE: this parameter is not used when #using the enhanced
replacement policies, GDSH #or LFUDA.
25
reference_age 2 months
reference_age 2 months – Referencia o tempo que um objeto pode
ficar no cache, apesar que o Squid opera isto dinamicamente,
normalmente removendo primeiramente objetos mais antigos ou
menos populares.
# TAG: error_directory
#
# Directory where the error files are read #from
/usr/lib/squid/errors contains sets of error files
#in different languages. The default error directory #is
/etc/squid/errors, which is a link to one of these #error
sets.
#
# If you wish to create your own versions of #the error
files, either to customize them to suit #your language or
company, copy the template #English files to another
directory and point this tag #at them.
error_directory /etc/squid/errors/Portuguese
error_directory /etc/squid/errors/Portuguese – Esta opção
direciona as mensagens de erro para as padrão em português,
conforme configuramos na compilação.
Devemos sair do arquivo de configuração salvando as
alterações, para isto basta digitar :wq
Pronto, estas são algumas das configurações que podemos
parametrizar no Squid. Existem muitas outras opções as quais
se deve levar em consideração a necessidade de utilização, bem
26
como algumas outras que veremos mais adiante, como por
exemplo, as listas de acesso ou ACL´s.
INICIANDO O SQUID: Na primeira vez que rodarmos o squid, ele
irá criar seus diretórios de trabalho de cache.
Podemos chamá-lo normalmente como um serviço, digitando:
service squid start
Se tudo ocorrer bem seu servidor proxy já esta configurado e
pronto para ser usado.
CONFIGURANDO OS CLIENTES: Agora é necessário configurar os
navegadores nas máquinas clientes sejam elas Linux ou Windows
para acesso a Internet através do Squid. No exemplo que
mostraremos utilizaremos o IP 200.200.200.100 e o Squid
instalado na porta padrão 3128.
• Configuração no Internet Explorer 6.x – Para fazermos que
o I.E. utilize o Squid como proxy padrão para acesso a
Internet, selecionamos o menu Ferramentas, Opções da
Internet, depois clicamos na aba conexões e em seguida no
botão Configurações da LAN. Chegaremos na tela de
configuração como mostra a figura 1.4.
27
Figura 1.4
Para não termos problemas com o acesso através do nosso
servidor proxy, devemos deixar as configurações como
mostradas na figura 1.4. Podemos notar que marcamos a opção
“Não usar proxy para endereços locais”, isto serve para caso
tenhamos uma Intranet o navegador não passe as requisições
desta para o Squid.
Para encerrar clicamos no botão “Avançado” e teremos a tela
como na figura 1.5.
28
Nesta tela basta marcarmos a opção “Usar o mesmo servidor
proxy para todos os protocolos” que o Internet Explorer
automaticamente copia as configurações para os outros
protocolos.
• Configuração no Firefox 1.0.7 – Para fazermos o Mozilla
utilizar nosso servidor Squid para navegarmos na Internet
devemos selecionar o menu Ferramentas, Opções. Devemos
clicar no botão “Proxy” e veremos a tela como mostra a
figura 1.5.
Figura 1.5
Devemos selecionar a opção “Usar servidores proxy” e
marcarmos a opção “Usar o mesmo proxy para todos os
protocolos”, agora precisamos apenas preencher o campo
“http” que os outros são preenchidos automaticamente. Se
quisermos acessar alguma página que esta em nossa rede
local, podemos adicionar estes endereços no campo “Sem proxy
para”.
29
• Configuração no Opera 8.5 – Para utilizarmos a conexão
com a Internet através do proxy devemos selecionar menu
Tool, Preferences, depois clicamos na aba Advanced e em
seguida na opção Network.
Então devemos clicar no botão “Proxy servers” será
apresentada uma tela como mostra a figura 1.6.
Figura 1.6
Infelizmente ao contrário do Internet Explorer e do Firefox no
Opera precisamos configurar o ip e porta para cada protocolo,
não existindo um preenchimento automático. Na verdade não se
trata de um trabalho árduo, porem são facilitadores da
concorrência.
Após estes processos básicos estamos prontos para navegar na
Internet através do nosso servidor proxy Squid. Porem podemos
observar que em nenhum momento fizemos configurações para
30
controle de acesso a usuários, uma das principais vantagens
deste serviço, então veremos isto no próximo tópico.
CONTROLE DE ACESSO ATRAVÉS DE LISTAS (ACCESS LISTS): Uma opção
de escolha pelo uso de um servidor Squid geralmente não se dá
apenas pela facilidade do uso de cache, mas sim, pela
característica da permissão de configuração a restrição de
acessos a páginas não coerentes. Como já mencionado, sites com
conteúdo pornográfico, games, bate-papo entre tantos outros de
entretenimento que não são pertinentes ao ambiente de
trabalho. As ACLs como são chamadas as listas de acesso podem
ser configuradas para restringir acesso a sites por url ou por
palavras também como negação de acesso por horário. Ou seja,
podemos determinar que durante o horário do almoço não seja
bloqueado nenhum site e ao inicio da jornada de trabalho sejam
bloqueados os sites definidos nas palavras e urls de negação.
CONFIGURANDO AS ACLs : Editaremos novamente o arquivo
squid.conf com o comando vi squid.conf e seguiremos com as
configurações abaixo apresentadas.
# ACCESS CONTROLS
# --------------------------------------------------------
# TAG: acl
# Defining an Access List
#
# acl aclname acltype string1 ...
# acl aclname acltype "file" ...
#
# when using "file", the file should contain one #item per
line
#
31
# acltype is one of src dst srcdomain #dstdomain url_pattern
urlpath_pattern time #port proto method browser user
#
# By default, regular expressions are CASE-#SENSITIVE. To
make them case-#insensitive, use the -i option.
#Defaults:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
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
acl CONNECT method CONNECT
Estes parâmetros vêm configurados por default e não
precisaremos mudar nada. Por exemplo na linha acl all src
0.0.0.0/0.0.0.0 criou-se uma lista de acesso chamada all onde
os endereços válidos são todos os da Internet.
Faremos agora a inserção de regras e comentaremos cada uma
delas, para que servem. Mas antes disto devemos entrar no
diretório /etc/squid e criarmos dois arquivos, um com o nome
de “sites” e outro com o nome de “palavras” que serão
32
utilizados para definirmos dentro de cada um quais os sites e
palavras que bloquearemos em nosso proxy.
Para criarmos os arquivos devemos entrar no diretório
informado e seguir com os seguintes comandos:
1º comando – touch sites
2º comando – touch palavras
Pronto os arquivos foram criados, agora editaremos o arquivo
sites com o comando vi sites e dentro informaremos quais sites
devem ser bloqueados pelo proxy. Ex:
www.playboy.com.br
www.orkut.com.br
www.dominio.com.br
www.astalavista.com
Editar o arquivo palavras com o comando vi palavras e informar
quais palavras devem ser barradas pelo proxy. Ex:
sexo
games
jogos
Abaixo esta listado como a configuração deve ficar, notem que
as alterações estão em negrito.
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
33
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 CONNECT method CONNECT
acl rede_local src 192.168.0.0
acl proibir_sites dstdomain "/etc/squid/sites"
acl proibir_palavras url_regex -i "/etc/squid/palavras"
acl almoco time MTWHF 12:00-12:59
acl rede_local src 192.168.0.0 - > regra para que todos os
micros da nossa rede interna na faixa destes ip´s naveguem
normalmente pelo proxy.
acl proibir_sites dstdomain "/etc/squid/sites" - > Esta regra
vai utilizar o arquivo sites que criamos anteriormente e irá
bloquear todos os sites contidos no arquivo.
acl proibir_palavras url_regex -i "/etc/squid/palavras" - >
Esta regra vai utilizar o arquivo palavras que criamos
anteriormente e irá bloquear todas as palavras contidas no
arquivo.
acl almoco time MTWHF 12:00-13:00 - > Com a inserção desta
regra estaremos liberando o acesso a qualquer conteúdo entre o
período de almoço que no nosso exemplo é 12:00 às 13:00. Onde
as letras MTWHF representam os dias da semana em inglês.
34
Mas para estas regras funcionarem precisaremos adicionar
algumas regras na TAG http_access.
# TAG: http_access
# Allowing or Denying access based #on defined access lists
#
# Access to the HTTP port:
# http_access allow|deny #[!]aclname ...
#
# NOTE on default values:
#
# If there are no "access" lines #present, the default is
to deny the #request.
#
# If none of the "access" lines #cause a match, the default
is the
#opposite of the last line in the #list. If the last line was
# deny, the default is allow. #Conversely, if the last line
# is allow, the default will be #deny. For these
reasons, it is a
# good idea to have an "deny all" #or "allow all" entry at
the end
# of your access lists to avoid #potential confusion.
#Default:
# http_access deny all
#Recommended minimum configuration:
#
# Only allow cachemgr access from #localhost http_access allow
manager #localhost http_access deny manager
# Deny requests to unknown ports
#http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
#http_access deny CONNECT !SSL_ports
35
#
# We strongly recommend the following #be uncommented to
protect innocent
# web applications running on the #proxy server who think the
only
# one who can access services on #"localhost" is a local user
#http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO #ALLOW ACCESS FROM YOUR
CLIENTS
# Example rule allowing access from #your local networks.
Adapt
# to list your (internal) IP networks #from where browsing
should
# be allowed
#acl our_networks src 192.168.1.0/24 #192.168.2.0/24
#http_access allow our_networks
# And finally deny all other access to this proxy
http_access allow almoco
http_access allow rede_interna
http_access deny proibir_sites
http_access deny proibir_palavras
http_access deny all
http_access allow almoco -> Libera o acesso no período
informado na acl almoco.
http_access allow rede_interna -> Libera o acesso para a
classe de ip´s informados na acl rede interna.
36
http_access deny proibir_sites - > Bloqueia acesso aos sites
contidos no arquido sites.
http_access deny proibir_palavras - > Bloqueia acesso aos
sites que possuam em suas url´s palavras contidas no arquivo
palavras.
http access deny all - > Faz a negação de navegação a todos os
endereços restantes. Máquinas clientes que não estejam na
faixa de ip´s citadas na acl rede_interna não conseguiram
passar pelo proxy.
Podemos agora salvar as alterações e sair do arquivo de
configuração do Squid e reiniciar o serviço para que as novas
regras de acesso comecem a valer.
Para isso devemos utilizar o comando service squid restart .
Pronto agora veremos o que acontece quando um usuário tentar
acessar o site www.orkut.com em horário de expediente na
figura 1.7.
Figura 1.7
37
Neste caso o bloqueio ocorre por causa da acl http_access deny
proibir_sites.
Existem usuários que se acham mais espertos e tentam acessar
sites pornográficos por exemplo através dos sistemas de busca
como o google, porem vejamos o que acontece na figura 1.8.
Figura 1.8
Neste caso o bloqueio ocorre por causa da acl http_access deny
proibir_palavras. Isto ocorre porque os sistemas de busca
colocam as palavras procuradas na url do navegador. Como
podemos ver na figura 1.9.
Figura 1.9
Agora temos nosso servidor proxy funcionando e bloqueando
acessos desnecessários a Internet. Porem, provavelmente o
compartilhamento da conexão com a Internet anteriormente ao
proxy era feita através de NAT(Network Adress Translation)
geralmente através do IPTABLES(firewall incluído no kernel do
linux), ou seja, se algum usuário entrar nas opções do
navegador e retirar as configurações referentes ao proxy, ele
38
vai ter tudo liberado em sua estação de trabalho como
antigamente, pois o navegador não fará mais as requisições ao
proxy pela porta 3128 e sim pela porta padrão 80.
Para solucionarmos este problema é necessário implementarmos
uma regra de iptables que vai redirecionar o tráfego da porta
80 para a porta 3128 do nosso servidor Squid. Devemos digitar
o seguinte comando:
iptables –t nat –A PREROUTING –i eth0 –p tcp --dport 80 –j
REDIRECT --to-port 3128
A partir de agora obrigatoriamente todos os pacotes vão passar
pela porta 3128. Com isto todas as regras contidas no arquivo
de configuração do Squid vão estar valendo.
Pronto terminamos a configuração do nosso servidor proxy, a
partir de agora veremos um utilitário para análise de log´s do
squid.
SARG: SQUID ANALYSIS REPORT GENERATOR
O sarg é uma excelente ferramenta desenvolvida por um
brasileiro chamado Pedro Orso que nos permite monitorar onde
nossos usuários estão navegando na Internet através da análise
do arquivo de log "access.log" do nosso proxy Squid. A
ferramenta pode nos dizer 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, entre
outros. O gerenciamento que a ferramenta proporciona é muito
boa, principalmente porque através dela descobrimos novos
sites que vão parar no arquivo de "sites" e também serão
39
bloqueados. Para verificarmos o relatório do Sarg é
extremamente aconselhável que no servidor esteja rodando um
servidor web, como o conhecido Apache.
ADQUIRINDO O SARG: Como na maioria dos softwares para Linux o
Sarg é gratuito e pode se obter uma lista de sites de onde
pode ser baixado em http://sarg.sourceforge.net/sarg.php, onde
sua versão estável atual é a 2.0.9. Veja o site na figura 2.0.
Figura 2.0
Verificamos na figura 2.1 a lista de sites com binários para
diversas distribuições Linux.
40
Figura 2.1
INSTALAÇÃO DO SARG: Depois de baixar o pacote na máquina que
esta instalado o servidor proxy, devemos executar o seguintes
comandos:
1º comando – descompactando o arquivo baixado – tar –xzvf
sarg.2.0.9.tar.gz -> preste atenção, esta versão se encontra
disponível na data de publicação deste documento, podendo ser
diferente o nome do arquivo na data de sua instalação.
2º comando - ./configure
3º comando – make
4º comando – make install
INICIANDO A CONFIGURAÇÃO: Para iniciarmos a configuração
devemos editar o arquivo sarg.conf que é responsável por toda
e qualquer configuração do Sarg e se encontra em /etc/sarg.
Obs: Podemos editá-lo com o comando:
vi sarg.conf
Dentro deste arquivo iremos definir os parâmetros do relatório
que o Sarg vai gerar.
41
A partir deste momento mostraremos as principais opções
contidas dentro do arquivo de configuração sarg.conf. Sendo
que as linhas começadas com # são comentários do arquivo e
quando existir parametrizações a serem feitas estas estarão em
negrito, todas as demais deverão continuar comentadas.
# TAG: language
# Available languages:
# Bulgarian_windows1251
# Catalan
# Czech
# Dutch
# English
# French
# German
# Hungarian
# Indonesian
# Italian
# Japanese
# Latvian
# Polish
# Portuguese
# Romanian
# Russian_koi8
# Russian_windows1251
# Serbian
# Spanish
# Turkish
#
language Portuguese
language Portuguese - > Define a linguagem que o sarg usará na
apresentação dos relatórios.
42
# TAG: access_log file
# Where is the access.log file
# sarg -l file
#
access_log /var/log/squid/access.log
access_log /var/log/squid/access.log -> neste parâmetro
devemos informar onde se encontra o arquivo de log de acesso
do Squid. No nosso caso esta em /var/log/squid/. Lembramos que
este caminho definimos no arquivo de configuração squid.conf.
É fundamental que seja informado o caminho corretamente pois
caso contrário o sarg não vai gerar relatório algum.
# TAG: title
# Especify the title for html page.
#
title "Relatorio de Acesso a Internet"
title "Relatorio de Acesso a Internet" - > Especificamos aqui
o título do nosso relatório de acessos a Internet.
# TAG: output_dir
# The reports will be saved in #that directory
# sarg -o dir
#
output_dir srv/www/default/html/squid-reports
output_dir srv/www/default/html/squid-reports - > Informamos
aqui aonde serão gerados os relatórios do Sarg, em nosso caso
apontamos para srv/www/default/html/ que é nosso host virtual.
Significa que depois de gerado o relatório posso acessá-lo de
qualquer máquina digitando http://200.200.200.100/squid-
reports.
43
# TAG: report_type type
# What kind of reports to $generate.
#topsites - shows the site, connect #and bytes
#sites_users - shows which users were #accessing a site
#users_sites - shows sites accessed by #the user
#date_time - shows the amount of bytes #used by day and hour
#Denied - shows all denied sites with #full URL
# auth_failures - shows autentication #failures
#site_user_time_date - shows sites, #dates, times and bytes
#
# Eg.: report_type topsites #denied
report_type topsites sites_users users_sites date_time denied
site_user_time_date
topsites - Mostra o site, conexão e bytes.
sites_users - Mostra quais os usuários estavam acessando um
site.
users_sites - Mostra sites acessados pelo usuário.
date_time - Mostra quantidade de bytes usados por dia e hora.
denied - Mostra todos os sites negados com URL completa.
site_user_time_date – Mosta os sites acessados pelo usuário e
qual a data e horário de acesso.
# TAG: usertab filename
# You can change the "userid" or #the "ip address" to be
a real user #name on the rpeorts.
# Table syntax:
# userid name or ip #address name
# Eg:
# SirIsaac Isaac Newton
# vinci Leonardo da Vinci
# 192.168.10.1 Karol Wojtyla
44
#
# Each line must be terminated #with '\n'
#
#usertab none
usertab /etc/sarg/usertab
usertab /etc/sarg/usertab - > O relatório do Sarg apresenta os
acessos por número de ip, mas isto torna a visualização um
pouco complexa. Nesta opção indicamos o caminho do arquivo
usertab, que tem o relacionamento do número ip com o usuário.
Devemos criar no diretório /etc/sarg um arquivo chamado
usertab com os seguintes comando:
1º comando – touch usertab
2º comando – vi usertab
Dentro do arquivo devemos fazer a relação ip x usuário como o
exemplo a seguir:
192.168.0.10 Joao
192.168.0.11 Maria
192.168.0.12 Jose
Obs: Não podemos deixar espaço em branco neste arquivo. Caso
isto ocorra podemos ter problemas no nome dos usuários no
relatório.
Devemos sair do arquivo de configuração salvando as
alterações, para isto basta digitar :wq
Existem diversas outras opções de configuração no arquivo
sarg.conf, tais como cor de fundo do relatório, implementação
45
de logo entre outras funções, mas o essencial para gerarmos um
relatório satisfatório são estas apresentadas.
Para gerarmos o relatório precisamos apenas digitar o comando
sarg, que o relatório será gerando no caminho informado no
arquivo de configuração, que em nosso caso é
srv/www/default/html/squid-reports.
Como o caminho informado se trata de uma pasta virtual de
nosso servidor web, podemos acessar o nosso relatório
digitando de qualquer navegador http://200.200.200.100/squid-
reports que será apresentada a tela como na figura 2.2
Figura 2.2
São apresentadas aqui os períodos nos quais o relatório foi
gerado, clicando em qualquer um deles é apresentado relatório
detalhado de acesso por usuário como podemos ver na figura
2.3.
46
Podemos fazer mais alguns testes clicando nos links contidos
no relatório, porem chegando até aqui com certeza vai ser de
fácil entendimento analisar as funcionalidades desta ótima
ferramenta.
RESUMO: Aprendemos com este artigo instalar e configurar o
servidor proxy Squid e também gerarmos relatórios de acesso
dos usuários para um maior controle de uso da Internet.
Mas se quisermos temos a disposição na Internet dezenas de
ferramentas que nos auxiliam em conjunto com o Squid no
monitoramento, segurança, análise de tentativas de invasão
entre outras funções.
REFERENCIAS: Indicamos um livro e diversos sites para
referência de estudo para maiores detalhes da ferramenta Squid
e seus utilitários.
Squid – Configurando o Proxy para Linux, 4º Edição, Brasport,
Rio de Janeiro, 2005.
http://www.squid-cache.org/
http://sarg.sourceforge.net
http://squid.visolve.com/squid/index.htm
http://www.linuxman.pro.br/squid/
http://www.linuxit.com.br/section-3.html
http://www.geocities.com/glasswalk3r/linux/squidnomicon.html
47
6. BIBLIOGRAFIA
• Configuração de Proxy. Disponível em: http://www.clubedohardware.com.br/. Acesso em 23 março 2006.
• Para que serve o Proxy? (Rede) Disponível em: http://www.clubedasredes.eti.br/. Acesso em 23 março 2006.
• Proxy. Disponível em: http://ci.ufp.pt/index.php?option=com_frontpage&Itemid=1. Acesso em 23 março 2006.
• Proxy Server. Disponível em: http://webinfo.ime.usp.br/index.html. Acesso em 23 março 2006.
• Servidor de Proxy. Disponível em: http://www.si.ualg.pt/internet/proxy/. Acesso em 23 março 2006.
• Servidor Proxy. Disponível em: http://www.imagelink.com.br/serv_proxy.asp?OP=6. Acesso em 23 março 2006.
• Servidor WebCache (Proxy). Disponível em: http://www.ccuec.unicamp.br/redes/index_html?foco=HTML/819664. Acesso em 23 março 2006.