Você está na página 1de 14

Servidor Proxy (Squid)

Guilherme Zanoni

Um servidor proxy uma pea importante em uma rede


interna que tenha contato com outra pblica, pois
implementa uma srie de facilidades e controles.
Veremos, definitivamente, tudo sobre ele.
Ao final deste artigo voc ser capaz de:
o
o

Instalar e configurar o servidor proxy (squid)


Configurar o squid para atuar como proxy
transparente.

Conceitos de Servidores Proxy


O objetivo principal de um servidor proxy possibilitar
que mquinas de uma rede privada possam acessar
uma rede pblica, como a Internet, sem que para isto
tenham uma ligao direta com esta. O Servidor proxy
costuma ser instalado em uma mquina que tenha
acesso direto internet, sendo que as demais efetuam
as solicitaes atravs desta. Justamente por isto, este
tipo chamado de Proxy, pois um procurador, ou
seja, sistema que faz solicitaes em nome de outros.

Consideraes Iniciais
o

Utilizaremos duas ferramentas de instalaes.

A primeira a urpmi utilizada em algumas


distribuies como a Mandriva e etc.

A Segunda o APT-GET utilizado em outras


distribuies como Ubuntu e etc.

Para Saber mais


o

Squid Web Proxy Cache


http://www.squid-cache.org/

Instalao do Squid
Para instalar o Squid no Mandriva Linux, utilize o urpmi:
#urpmi squid -auto
Para instalar o Squid no Ubuntu, utilize o apt-get:
#apt-get install squid
O cdigo fonte do Squid pode ser obtido no site oficial
do projeto listado na seo Para saber mais.

Configurando o Squid
A Configurao do squid fica gravada em um arquivo
chamado squid.conf, no diretrio /etc/squid.
Entre vrias opes de configuraes do Squid,
algumas merecem ateno especial pois definem o
funcionamento bsico do programa.
http_port n
Esta opo utilizada para definir em quais portas (n)
o squid espera por conexes http. A porta padro
3128, mas possvel especificar uma outra qualquer,
dependendo da necessidade.

Exemplo: http_port 3128


cache_dir Tipo diretrio Mbytes Nvel-1
Nvel-2
Esta opo serve para definir em quais diretrios sero
armazenados os objetos. Tipo especifica o tipo de
sistema de armazenamento a ser utilizado. Atualmente
o tipo que pode ser utilizado com segurana ufs.
Diretrio especifica o nome do diretrio onde h o
arquivo que mantm os metadados dos objetos
armazenados no disco. Este arquivo utilizado para
recriar o cache durante a inicializao do Squid.
Mbytes especifica a quantidade de espao em disco
que dever ser utilizada sob este diretrio.
O valor padro 100 MB. Nvel-1 e Nvel-2 especificam
o nmero de diretrios de primeiro e segundo nvel,
respectivamente, a serem criados, definindo na opo
Diretrio. Os valores padro so 16 e 256,
respectivamente. possvel ter vrios diretrios para
cache, inclusive em discos distindos.
Exemplo: cache_dir ufs /var/spool/squid
100 16 256
cache_mgr e-mail
Esta opo permite especificar o e-mail do usurio do
sistema que receber uma mensagem caso o Squid
venha a ser encerrado de forma anormal. Este
endereo tambm mostrado em pginas de erros
retornadas aos usurios caso, por exemplo, a mquina
remota no possa ser acessada.

Exemplo: cache_mgr
squid_adm@imasters.com.br
cache_efective_user usuarop,
cache_efective_group grupo
Estas opes servem para informar ao Squid com qual
ID de usurio e de grupo, respectivamente, ele deve
ser executado, caso seja iniciado como root, que
como ele costuma ser iniciado.
Exemplo: cache_efective_user squid
cache_efective_group squid|
cache_mem mem
O squid utiliza muita memria por razes de
desempenho. muito mais demorado ler algo do disco
do que diretamente da memria como todos sabem.
Mas deve-se estar atento ao definir este valor, pois
esse parmetro no o total de memria que o Squid
usa, ele apenas pe um limite em um dos aspectos da
memria. Mas ele usa memria para outras atividades,
assim, necessrio reservar espaos para os outros
processos.
Para verificar quanta memria o squid esta utilizando,
podemos utilizar o comando top, por exemplo.
Exemplo: cache_mem 8MB|
visible_hostname computador
Esta opo define o nome do computador que aparece
em mensagens de erro e em outras informaes
compartilhadas entre servidore cache. Colocar o nome
do computador local.

Exemplo: visible_hostname Parede_de_fogo


Para iniciar o servio squid como super usurio (root),
o comando:
#service squid start (Mandriva)|
etc/init.d# ./squid start (Ubuntu)

Controle de acesso
O controle de acesso do squid tem recursos suficientes
para definir com preciso quais tipos de servios
podem ser acessados por quais mquinas e em quais
horrios. As regras da lista de controle de acesso
(Access Control List ou simplismente ACLs) tem uma
sintaxe bastante simples, e so includas no
arquivo squid.conf

Tipos de elementos de ACL:


o

src: endereo IP de origem (cliente);

dst: endereo IP de destino (servidor);

srcdomain: um domnio de origem (cliente);

dstdomain: um domnio de destino (servidor);

srcdom_regex: padro de texto, ou expresso


regular, que conste no contedo da origem (cliente);

dstdom_regex: padro de texto, ou expresso


regular, que conste no contedo do destino (servidor);

time: hora do dia e dia da semana;

url_regex: comparao de URL baseada em


expresso regular;

port: nmero da porta do destino (servidor);

myport: nmero da porta local na qual o cliente se


conectou;

proto: protocolo de transferncia (http, ftp, etc);

method: mtodo http de requisio (get, post, etc);

o
o

browser: Comparao executada baseada no


cabealho (header) do cliente (browser);
ident: nome do usurio;

src_as: nmero do Sistema Autnomo da origem


(cliente);

dst_as: nmero do Sistema Autnomo do destino


(servidor);

proxy_auth: autenticao do usurio via um


processo externo;

proxy_auth_regex: expresso regular que consta


em uma autenticao de usurio via um processo
externo;

snmp_community: string que indica o nome da


comunidade SNMP;

maxconn: um nmero mximo de conexes de um


mesmo endereo IP de cliente;

arp: endereo Ethernet (MAC).


Nem todos os elementos de ACL podem ser usados
com todas as listas de acessos (descritas a seguir). Por
exemplo, snmp_community s ter significado quando
usado com a lista snmp_access, bem como, os
elementos src_as e dst_as somente sero usados
na listacache_peer_access.

Cada elemento de ACL deve ser relacionado com


somente um nome. Um elemento ACL com
determinado nome consiste em uma lista de valores.
Quando forem sendo feitos os testes, os mltiplos
valores utilizaro o operador lgico OR. Em outras
palavras, um elemento ACL ser vlido, quando
qualquer um de seus valores forem verdadeiros.
Voc no pode dar o mesmo nome para diferentes
tipos de elementos ACLs. Isto ocasionar um erro de
sintaxe.
Voc poder colocar diferentes valores para a mesma
ACL em diferentes linhas. O Squid os combinar em
uma lista.

Lista de Acessos:
o

http_acess: permite clientes http (browsers)


acessarem a porta http. Esta ACL a primria;

icp_access: permite cachs vizinhos fazerem


requisies ao seu cache atravs do protocolo ICP;

miss_access: permite a alguns clientes fazerem


encaminhamento (forward) atravs de seu cache;

no_cache: define respostas que no devero ser


armazenadas no cache;

always_direct; controla quais requisies devero


ser sempre encaminhadas diretamente aos servidores
de igem;

never_direct: controla quais requisies nunca


devero ser sempre encaminhadas diretamente aos
servidores de origem;

snmp_access: controla acesso ao agente SNMP


do squid;

cache_peer_access: controla quais requisies


podero ser encaminhadas a um servidor de cache
vizinho. (peer)
Uma regra de lista de acesso, consite da palavra allow
(permitir) ou deny (negar), seguido de uma lista de
nomes de elementos ACL.
Uma lista de acesso consiste em uma ou mais regras
de acesso.
As listas de acesso so verificadas na mesma ordem
em que foram escritas. A pesquisa na lista termina
assim que uma requisio satisfazer uma regra.
Se uma regra possuir mltiplos elementos de ACL, esta
usar o operador lgico AND. Em outras palavras,
todos os elementos de uma regra precisaro ser
validos para que esta regra seja vlida. Isto significa
que possvel escrever uma regra que nunca ser
vlida. Por exemplo, um nmero de porta nunca poder
ser igual a 80 e 8000 ao mesmo tempo.
Vejam alguns exemplos prticos:

Se voc quiser impedir que qualquer usurio acesse


paginas que contenham a palavra cracker na URL,
acrescente as seguintes linhas no seu squid.conf:
acl proibir_cracker url_regex cracker|
http_access deny proibir_cracker
E o bloqueio ainda pode ser para mquinas
especificas. Imagine que o usurio da mquina cujo IP
10.0.0.95 esteja ocupando muito a sua rede,
transferindo arquivos de msica em formato MP3. Para
bloquear este usurio especifico, use a regra como a
de baixo:
acl mp3 url_regex mp3|
acl usr_ofensor src
10.0.0.95/255.255.255.255|
http_access deny usr_ofensor mp3
Se quiser proibir todos os usurios de acessarem um
determinado site:
acl site_proibido dstdomain .orkut.com|
http_access deny all site_proibido
Tambm possvel permitir ou proibir o acesso em
determinados dias e horrios:
acl tempo_proibido time MTWHF 15:00-16:00|
acl usr_ofensor src
10.0.0.95/255.255.255.255|
http_access deny usr_ofensor
tempo_proibido
A regra acima bloqueia o acesso internet para o IP
10.0.0.95 durante o perodo das 15:00 s 16:00 horas.

A opo MTWHF indica os dias da semana em ingls.


Tambm pode ser utilizadas as opes A e S que
equivalem ao sbado e ao domingo respectivamente.
Existem casos que uma empresa gostaria de liberar o
acesso a internet apenas durante o horrio de almoo.
Para isso, a seguinte regra poderia ser aplicada:
acl funcionrios src 10.0.0.0/0|
acl acesso_almoco time MTWHF 12:00-13:00|
http_access allow funcionrios
acesso_almoco|
http_access deny funcionrios
Dependendo do nmero de domnios ou de palavraschave listadas em ACLs aconselhvel construir uma
lista em um arquivo separado e indic-lo no squid.conf.
O arquivo com uma lista de domnios ou de expresses
regulares a serem bloqueadas deve conter uma
entrada por linha, como no exemplo:
o

Orkut

Playboy

Sexo

Blog

Fotolog
Caso o arquivo seja salvo em
/etc/squid/sites_proibidos, por exemplo podemos

indic-lo no arquivo de configurao do squid da


seguinte maneira:
acl funcionrios src 10.0.0.0/0|
acl proibidos url_regex
"/etc/squid/sites_proibidos" |
http_access deny funcionrios proibidos
Aps incluir todas as suas regras restritivas, no se
esquea de incluir regras especificando que tudo o que
no estiver expressamente proibido deve ser permitido.
Na configurao original do squid.conf, as linhas sero
como a que segue:
acl rede_local src 10.0.0.0/255.0.0.0|
http_access allow all rede_local
Note que voc deve definir a rede_local como
conjunto de endereo IP e mscara que melhor
descrevem a sua rede.
Normalmente o seu squid.conf vir com linhas como
as que seguem:

#
# INSERT YOUR OWN RULE(S) HERE
ALLOW ACCESS FROM YOUR
CLIENTS
#
http_access deny all
Ela serve para bloquear o acesso ao squid at que ele
seja configurado, e interessante voc deix-lo como

ltima regra, pois desta forma, se a requisio no


satisfazer nenhuma regra o squid ir bloque-la.

Proxy Transparente
Utilizar o proxy transparente evita que o administrador
tneha que configurar o navegador web de cada usurio
da rede, pois o uso do proxy passa a ser despercebido
para o usurio. Alem disso, evita que o usurio possa
desabilitar o proxy e navegar diretamente na internet.
Para iniciarmos a configurao do squid como proxy
transparente, insira ou descomente as seguintes linhas
no arquivo /etc/squid/squid.conf
httpd_accel_host virtual|
httpd_accel_port 80|
httpd_accel_with_proxy on|
httpd_accel_uses_host_header on
E, como root, execute o comando:
#iptables -t nat -A PREROUTING -i eth0 -p
tcp -dport 80 -j REDIRECT --to- port 3128
Caso o iptables no esteja instalado, instale-o antes:
#urpmi iptables -auto
Ou
#apt-get install iptables
Note que no exemplo acima utilizamos a interface de
rede eth0 como se fosse a interface ligada na rede

local. Voc deve adaptar o exemplo sua rede. O


exemplo tambm assume que o iptables e o servidor
proxy esto sendo executados na mesma mquina.
Caso os servios estejam em mquinas separadas, a
linha de comando para o iptables ligeiramente
diferente:
#iptables -t nat -A PREROUTING -i eth0 -p
tcp -dport 80 -j REDIRECT --to-dest
IP:3128
IP Deve ser substituido pelo endereco IP da mquina
onde o servidor squid esta sento executado.
Para que esta regra esteja ativa logo aps a
inicializao do sistema operacional, execute em
seguida os comandos:
#iptables -save > /etc/sysconfig/iptables|
#chkconfig iptables on
Ao reiniciar o squid (#service squid restart ou etc/init.d#
./squid restart) os clientes j podero navegar
normalmente em necessidade de especificar no
browser qual servidor proxy deve ser utilizado.

Dicas
o

No esquea de verificar os arquivos de log do


Squid quando no estiver conseguindo resolver algum
problema. O Diretrio padro de armazenamento dos
arquivos de log : /var/log/squid/. Os principais
arquivos so cache.log, access.log e o squid.out, que
armazenam respectivamente, informaes sobre o

cache do servidor proxy, os acessos feitos atravs do


proxy e mensagens de erro emitidas pelo deamon do
Squid.
o
Aqueles que preferem uma interface grfica para
configurao de servidores podem optar pelo Webmin,
um gerenciador de sistema com interface web que
contm um mdulo para gerenciamento do Squid. O
download do Webmin pode ser feito atravs do
sitehttp://www.webmin.com
http://imasters.com.br/artigo/6220/linux/servidor_proxy_squid

Você também pode gostar