Você está na página 1de 17

Universidade Federal do Cear

Administrao de Sistemas Operacionais Linux


Prof. Joo Marcelo
Equipe: Adonai, Max, Clenilson, Samuel e Eudes

TUTORIAL SQUID

O Squid permite compartilhar a conexo entre vrios micros, servindo como um


intermedirio entre eles e a Internet, ou seja, um proxy. O proxy como um burocrata
que no se limita a repassar as requisies: ele analisa todo o trfego de dados,
separando o que pode ou no pode passar guardando informaes para uso posterior.

Instalando o Squid
# apt-get install squid
/* Possui um arquivo nico de configurao: /etc/squid3/squid.conf
Para verses antigas o arquivo pode ser: /etc/squid.conf
1 Renomeie o arquivo padro, para conserv-lo ou para fins de pesquisa:
# mv /etc/squid3/squid.conf

/etc/squid/squid.conf.orig

2 Adicione as linhas abaixo no arquivo de configurao


http_port 3128
visible_hostname cearasc
acl all src 0.0.0.0/0.0.0.0
http_access allow all
As quatro linhas dizem o seguinte:
http_port 3128: porta onde o servidor vai ficar disponvel
visible_hostname cearasc: Nome do servidor, por exemplo, o nosso
cearasc
acl all src 0.0.0.0/0.0.0.0 e http_access allow all: Essas linhas criam uma acl
(politica de segurana) chamada all incluindo todos os endereos IP possveis,
permitindo que qualquer pessoa utilize o proxy.
Com apenas isso voc j permite que o squid funcione.

3 Reinicie o squid:
/etc/init.d squid3 restart
4 (Opcional) Libere a porta 3128:
iptables -A INPUT -i eth0 -p tcp --dport 3128 f ACCEPT

Criando uma configurao bsica


Obs: Deve ter uma ateno maior para a ordem das linhas, pois o squid interpreta de
acordo como so colocadas.
1 Entre no arquivo de configurao
/etc/squid3/squid.conf
2- Edite o arquivo, para ficar da seguinte maneira:
http_port 3128
visible_hostname cearasc
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 21 80 443 563 70 210 280 488 59 777 901 1025-65535
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
acl redelocal src 192.168.1.2/24 (<Endereo IP>/Mascara de sub-rede)
http_access allow localhost
http_access allow redelocal
http_access deny all /* Antes era all, agora um deny, para que usurios no
autorizados utilizem a rede */
3 No esquea de reiniciar o squid: /etc/init.d squid3 restart

Configurao o cache de pginas e arquivos


Esta opo tem a finalidade de otimizar o trfego da rede.
Existe dois tipos de cache:
O rpido que utiliza a memria RAM do servidor.
O cache um pouco mais lento que utiliza o HD.
O cache da memria RAM ideal para armazenar arquivos pequenos como as
paginas HTML. Que sero entregues instantaneamente. J o cache HD utilizado
para armazenar arquivos grandes como downloads, arquivos apt-get.
Vamos agora ver passo-a-passo como configurar um cache no Proxy squid.
1. A quantidade de memria RAM fica assim
Cache_mem 64 MB
2. Agora vamos determinar o tamanho maximo dos arquivos que sero guardados na
memria RAM (o restante ser salvo no HD).
Maximum_object_size_in_memory 64 KB
3. agora vem do cache em disco. Que armazenar o grosso dos arquivos
Maximum_object_size 512 MB
Minimum_object_size 0 KB
Podemos definir a percentagem de uso do cache. Assim se a pagina chegar a 95%
ela comear a descartar os arquivos mais antigos at ficar abaixo de 90%.
Cache_swap_low 90
Cache_swap_high 95
Agora vamos para os passos 4 e 5 que fala o armazenamento e o logs do squid.
Fica assim:
Cache_dir ufs /var/spool/squid 2048 16 256
Cache_access_log /var/log/squid/Access.log

Bloqueando por dominios ou palavras


Podemos bloquear sites com um acls. Assim fica:
acl bloqueados dstdomain orkut.com www.orkut.com www.playboy.com.br
playboy.com.br
HTTP_access deny bloqueados

Veja utilizei duas palavras chave dstdomain e HTTP_access deny, o primeiro permite
que crie acls contendo endereos de sites que queremos bloquear com a chamada
bloqueados, e em seguida usei o parmetro HTTP_access deny para bloquear o
acesso a eles. Veja que coloque os sites com em dois tipos de domnio com o www e
sem ele assim evita de que o usurio burle o squid, pois pode haver que o site esteja
em dois servidores diferentes um com o www e o outro sem o www.
Podemos criar um arquivo e nele inserir os domnios que voc deseje bloquear.
orkut.com
www.orkut.com
www.ask.com
ask.com
email.bol.uol.com.br
www.fortalezaec.net/
www.corinthians.com.br
Ento utilizamos o seguinte comando:
acl bloqueados dstdomain url_regex -i /etc/squid/bloqueados
HTTP_access deny bloqueados
Podemos tambm inverter a ordem em que bloqueamos todos os sites e s
permitimos o acesso a alguns que ter utilidade no local de trabalho
Assim fica:
acl permitidos url_regex -i /etc/squid/permitidos
HTTP_access allow permitidos
HTTP_access deny all
A ainda a opo de bloquear por palavra assim fica:
Orkut
Xxx
Sexo
Corinthians
Fausto
Forr
E ento colocamos na regra:
acl palavrasproibidas dstdom_regex /etc/squid/palavrasproibidas
HTTP_access deny palavrasproibidas
Assim fica bem mais fcil ter o controle de acesso dos usurios.

Bloqueando por horrio

Essa regra faz com que o squid aceite ou recuse conexes feitas dentro do horrio
determinado.
acl madrugada time 00:00-06:00
http_access deny madrugada
acl almoco time 12:00-14:00
http_access deny almoco
Estas regras iriam, novamente, antes da regra "http_access allow redelocal" no
arquivo de configurao.
O nosso Proxy fica assim:
http_port 3128
visible_hostname ubuntu01
cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid3 2048 16 256
cache_access_log /var/log/squid3/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
acl all src all
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 21 80 443 563 70 210 280 488 59 777 901 1025-65535
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
acl madrugada time 00:00-06:00
http_access deny madrugada
acl almoco time 12:00-12:30
http_access deny almoco
acl bloqueados dstdom_regex "/etc/squid3/bloqueados"
http_access deny bloqueados
acl redelocal src 10.0.0.0/16
http_access allow localhost
http_access allow redelocal
http_access deny all

Gerenciando o uso da banda

O squid oferece uma forma simples de limitar o uso da banda disponvel.

ex: um link de 1 megabit (1024 kbits) que corresponde a 131.072 bytes por segundos.
Na regra do squid, a converso, feita dividindo o valor em kbits por 8 e multiplicando
por 1024 para ter o valor em bytes.

acl redelocal src 192.168.1.0/24


delay_pools 1
delay_class 1 2
delay_parameters 1 114688/114688 16384/16348
delay_access 1 allow redelocal
http_access allow localhost
http_access allow redelocal
http_access deny all
A acl redelocal est agora condicionada a trs novas regras,
na linha delay_parameters 1 114688/114688 16384/16384
limita a banda total disponvel usada pelo squid a 114.688 bytes por segundos , e e
limita cada usurio a no maximo 16.384 bytes por segundo

Criando regras de exceo para os endereos ip especficos:


Basta criar uma acl contendo o endereos ip
acl chefe src 192.168.1.2
http_access allow chefe
acl redelocal src 192.168.1.0/24
delay_pools 1
delay_class 1 2
delay_parameters 1 114688/114688 16384/16348
delay_access 1 allow redelocal
http_access allow localhost
http_access allow redelocal
http_access deny all

Esta regra de exceo pode ser usada tambm em conjunto com as demais regras de
restrio de acesso. Basta que a acl com o ip liberado seja colocados antes das acls
com as restries de acesso:

acl chefe src 192.168.1.2


http_access allow chefe
acl bloqueados url_regex -i "/etc/squid/bloqueados"
http_access deny bloqueados
acl palavrasproibidas dstdom_regex "/etc/squid/palavrasproibidas"
http_access deny palavrasproibidas
acl redelocal src 192.168.1.0/24
http_access allow localhost
http_access allow redelocal
http_access deny all

Bloqueando formatos de arquivos.

Utilizando o parmetro url_regex procurando pelas extenses de arquivos


especificadas:

acl extban url_regex -i \.avi \.exe \.mp3 \.torrent


http_access deny extban
A regra a ceita tambm no uso de arquivo externos, de forma que se a lista ficar
muito grande,
voc pode migr-la para dentro de um arquivo de texto dentro da acl

acl extban url_regex -i "/etc/squid/extban"


http_access deny extban
Dentro do arquivo, voc inclui as extenses desejadas
\.avi

\.exe
\.mp3
\.torrent
Sempre que fizer alteraes na configurao, voc pode aplicar as mudanas usando
o comando:
# /etc/init.d/squid reload

Proxy com autenticao

Voc pode adicionar uma camada extra de segurana exigindo autenticao no proxy.
Esse recurso pode ser usado para controlar quem tem acesso a Internet. A forma mais
simples de implementar autenticao no Squid usando o mdulo ncsa_auth, que
faz parte do pacote principal. Ele utiliza um sistema baseado em um arquivo de
senhas, onde voc pode cadastrar ou bloquear usurios.
Precisamos do script htpasswd para criar o arquivo de senhas, ele faz parte do
pacote apache2-utils, instale-o com o seguinte comando:

# apt-get install apache2-utils


Em seguida, crie o arquivo que ser usado para armazenar as senhas, usando o
comando:

# touch /etc/squid3/squid_passwd
O prximo passo cadastrar os logins usando o htpasswd, especificando o arquivo
que acabou de criar e o login que ser cadastrado, como no exemplo:

# htpasswd /etc/squid3/squid_passwd nome_do_usurio


Depois de cadastrar os usurios, adicione as linhas que ativam a autenticao no
squid.conf:
auth_param basic realm nome_do_servidor
auth_param basic program /usr/lib/squid3/ncsa_auth
etc/squid3/squid_passwd
acl autenticados proxy_auth REQUIRED
http_access allow autenticados

A primeira linha indica o nome do servidor, ele aparecer na janela de autenticao


dos clientes. J na segunda linha o usr/lib/squid3/ncsa_auth a localizao da
biblioteca responsvel pela autenticao. Dependendo da distribuio que voc
estiver usando, use o comando locate para encontrar o arquivo e altere a linha
indicando a localizao correta. O /etc/squid3/squid_passwd indica a localizao do
arquivo de senhas que criamos no passo anterior.
Estas quatro linhas criam uma acl chamada autenticados, que contm os usurios
que se autenticarem usando um login vlido. Estas linhas devem ser colocadas antes
de qualquer outra regra que libere o acesso, pois se o acesso aceito por uma regra
anterior, ele no passa pela regra que exige a autenticao.
Entretanto, se a configurao estiver semelhante a essa:

auth_param basic realm nome_do_servidor


auth_param basic program /usr/lib/squid3/ncsa_auth
/etc/squid3/squid_passwd
acl autenticados proxy_auth REQUIRED
http_access allow autenticados
acl redelocal src 10.0.0.0/16
http_access allow localhost
http_access allow redelocal
http_access deny all

Voc vai notar que a regra de autenticao desativa a regra que bloqueia o acesso de
usurios fora da rede local. Todos os usurios tem acesso ao prompt de autenticao
e todos que se autenticam ganham acesso, mesmo que estejam utilizando endereos
fora da faixa usada na rede. Para evitar isso necessrio restringir o acesso de
usurios fora da rede local antes da regra de autenticao. Exemplo:
#Bloqueia acessos de fora da rede local antes de passar pela autenticao

acl redelocal src 10.0.0.0/16


http_access deny !redelocal
# Outras regras de restrio vo aqui, de forma que o acesso seja negado
# antes mesmo de passar pela autenticao:
acl bloqueados url_regex i /etc/squid3/bloqueados
http_access deny bloqueados
# Autentica o usurio:
auth_param basic realm nome_do_servidor
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/squid_passwd

acl autenticados proxy_auth REQUIRED


http_access allow autenticados

# Libera o acesso da rede local e do localhost para os autenticados,


# bloqueia os demais:
http_access allow localhost
http_access allow redelocal
http_access deny all
Usamos a regra http_access deny !redelocal no incio da cadeia, onde a exclamao
inverte a lgica da regra, fazendo com que ela bloqueie todos os endereos que no
fizerem parte da acl redelocal.

Proxy transparente

Adiciona a seguinte regra para que todas as requisies feita na porta 80 sejam
redirecionadas para a porta do squid.

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j \


REDIRECT --to-port 3128
Adiciona a palavra transparent no final da linha http_port 3128

http_port 3128 transparent

Reinicie o squid
# /etc/init.d/squid restart

Configurao automtica de proxy

Instale o servidor web para disponibilizar o arquivo de configurao

# apt-get install apache2

Crie o arquivo /var/www/wpad.dat com o seguinte conteudo

function FindProxyForURL(url, host)


{
return "PROXY 10.0.0.21:3128";
}

Configure o cliente para obter o arquivo

Editar > Preferncias > Avanado > Rede > Configuraes > Endereo para
configurao automtica de proxy

WPAD

Configure um servidor dns e dhcp

Adicione as seguintes linhas no arquivo de configurao do dhcp que o


/etc/dhcp3/dhcpd.conf

option wpad-url code 252 = text;


option wpad-url "http://10.0.0.21/wpad.dat\n";

A primeira linha includa na seo global da configurao, enquanto a segunda


includa na seo correspondente subnet, como em:
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
option wpad-url code 252 = text;

subnet 10.0.0.21 netmask 255.255.0.0 {


range 10.0.0.50 10.0.0.254;
option routers 10.0.0.21;
option domain-name-servers 208.67.222.222;
option broadcast-address 10.0.255.255;
option wpad-url "http://10.0.0.21/wpad.dat\n";
}

Configure os clientes com a opo "Detectar automaticamente as configuraes" na


configurao do proxy

Instale o servidor dns


# apt-get install bind9

Adicione no arquivo "/etc/bind/named.conf.local" as seguintes linhas


zone "trabalho.linux.br" IN {
type master;
file "/etc/bind/db.trabalho";
};
Ser necessrio criar o arquivo /etc/bind/db.trabalho e add as seguintes configuraes
@ IN SOA trabalho.linux.br. (
2008030645 3H 15M 1W 1D )
NS trabalho.linux.br.
trabalho.linux.br. A 10.0.0.21
wpad IN A 10.0.0.21
Reinicie o Bind para que a alterao entre em vigor
# /etc/init.d/bind restart

necessrio configurar os clientes para utilizarem o servidor DNS. Ento iremos add
as linhas no arquivo do dhcp para que os clientes obtenham o servidor dns
automaticamente

ddns-domainname "trabalho.linux.br .";


option domain-name "trabalho.linux.br .";

ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
option wpad-url code 252 = text;
ddns-domainname "trabalho.linux.br .";
option domain-name "trabalho.linux.br.";
subnet 10.0.0.21 netmask 255.255.0.0 {
range 10.0.0.50 10.0.0.254;
option routers 10.0.0.21;
option domain-name-servers 10.0.0.21;
option broadcast-address 10.0.255.255;
option wpad-url "http://10.0.0.21/wpad.dat\n";
}

Sarg

O SARG (Squid Analysis Report Generator) um gerador de relatrios que prov


informaes sobre a atividade dos usurios do squid com riqueza de detalhes e
interface agradvel.
Instale o Sarg:
# apt-get install sarg
Abra seu arquivo de configurao:
nano /etc/sarg/sarg.conf
Altere as seguintes linhas:
# sarg.conf
#
# TAG: access_log file
#
Where is the access.log file
#
sarg -l file
#
access_log /var/log/squid/access.log -> altere para:
access_log /var/log/squid3/access.log

Apague o # da linha e o coloque na linha abaixo:


#output_dir /var/www/html/squid-reports
output_dir /var/lib/sarg

Deixando assim:
# TAG: output_dir
#
The reports will be saved in that directory
#
sarg -o dir
#
output_dir /var/www/html/squid-reports
#output_dir /var/lib/sarg

Para testar se deu certo digite o contedo abaixo no seu navegador:


<IP do servidor>/html/squid-reports
Ento vai aparecer no seu navegador com as informaes sobre a rede e seus
respectivos usurios.

Monitorando com o ntop

Um dos problemas em utilizar um proxy transparente que o log do Squid e,


consequentemente, o relatrio do Sarg, mostra apenas o trfego HTTP, deixando de
fora todos os demais protocolos.

Uma forma simples de monitorar o trfego global.


Caso o ntop no esteja disponivel atrves do gerenciador de pacotes da distribuio
em uso, voc pode baix-lo no http://www.ntop.org/

# apt-get install ntop


Execute o comando:
# /etc/init.d/ntop start
A partir da, voc pode acessar os raltrios (atializados em tempo real) a partir do
http://pi_servidor:3000 voc poder acessar a interface tambm atravs do
"https://ip_do_servidor:3001"

Usando o SquidGuard para bloquear pginas imprprias

Existem grupos destinados a manter listas com URLs de pginas pornogrficas,


pginas de cassinos e jogos e pginas ilcitas em geral, que so atualizadas
frequentemente. Apenas a lista mantida pelo Shalla Security possui mais de um milho
e meio de URLs cadastradas, que formam um arquivo compactado de 9 MB.
A lista mais usada provavelmente a MESD blacklists, que a indicada pela equipe
do SquidGuard, por ser completamente livre e utilizvel para qualquer fim. Ela tem
pouco mais de 1 milho de links e pode ser baixada no:
http://squidguard.mesd.k12.or.us/blacklists.tgz
Outra lista muito usada a Shallas Blacklists, disponvel no http://www.shallalist.de/.
mais completa que a lista do MESD, com mais de 1.500.000 de URLs.
Outra opo a lista dp URLBlacklist.com. Ela uma lista comercial, que inclui mais
de 2 milhes de links, e atualizada regularmente contando inclusive com um script
de atualizaes automtica. A assinatura custa de US$ 6 a US$ 55 mensais, de
acordo com o tipo de uso.
Estas listas podem ser usadas diretamente no Squid, atravs da opo url_regex, mas
por serem arquivos muito grandes, o desempenho seria ruim, j que o Squid processa
cada linha dos arquivos a cada acesso, o que consome muito processamento.
Ento entra em cena o SquidGuard, que permite usar longas listas de URLs, com
milhes de links sem uma grande perda de desempenho. Ele permite integrar as listas
que vimos a pouco, sem comprometer o desempenho do seu servidor proxy.
Instale o SquidGuard com o seguinte comando:

# apt-get install squidguard


A configurao feita em trs fases. O primeiro passo baixar os arquivos das listas
desejadas e descompact-los no diretrio /var/lib/squidguard/db. Em seguida,
necessrio configurar o arquivo /etc/squid/squidGuard.conf, especificando os
arquivos de listas que sero usados e o comportamento do SquidGuard ao bloquear
os acessos e, finalmente, editar o /etc/squid3/squid.conf, adicionando a linha que
ativa o uso do SquidGuard.
Vamos comear baixando as listas. Vamos usar como exemplo as listas do Shalla e
do MESD. Comece baixando as listas em um diretrio qualquer, como em:

# wget -c http://squidguard.mesd.k12.or.us/blacklists.tgz
# wget -c http://www.shallalist.de/Downloads/shallalist.tar.gz
Copie os dois arquivos para o diretrio /var/lib/squidguard/db e descompacte-os,
como em:

# cp blacklists.tgz shallalist.tar.gz /var/lib/squidguard/db/


# cd /var/lib/squidguard/db/

# tar -zxvf blacklists.tgz


# tar -zxvf shallalist.tar.gz
Aproveite para remover os dois arquivos, j que no precisamos mais deles:
# rm -f blacklists.tgz shallalist.tar.gz
A lista do MESD concentrada em temas ilegais, enquanto a lista do Shalla inclui
listas relacionadas a temas diversos, que vc pode bloquear ou no de acordo com a
situao. Dentro de cada pasta, voc encontra dois arquivos, domains e urls.
Alguns dos temas cobertos pelas listas so:
audio-video Pginas que hospedam vdeos e msicas, como youtube.
chat Pginas com salas de bate-papo ou contendo clientes web para acesso ao
MSN ou outras redes.
porn Este dispensa comentrios. a categoria com o maior nmero de entradas e a
primeiras que voc precisa bloquear.
sexy Similar porn, contm contedo adulto.
tracker Endereos de trackers com torrentes. interessante bloque-los para
dificultar o download de arquivos .torrent atravs da rede.
warez Pginas que hospedam programas piratas.
O prximo passo configurar o arquivo /etc/squid/squidGuard.conf especificando
as listas a utilizar. Um exemplo bsico de arquivo de configurao, usando apenas
duas das sees da lista do MESD, seria:

# /etc/squid/squidGuard.conf
dbhome /var/lib/squidguard/db/blacklists
logdir /var/log/squid
dest porn {
domainlist
urllist
}

porn/domains
porn/urls

dest proxy {
domainlist
urllist
}

proxy/domains
proxy/urls

acl {
default {
pass !porn !proxy all
redirect http://www.quixada.ufc.br
}
}

As duas primeiras linhas indicam o diretrio contendo as blacklists e o diretrio onde


sero armazenados os logs. Em seguida temos as duas ACLs, batizadas de porn e
proxy, cada uma incluindo os dois arquivos da categoria correspondente das listas.
No final a opo pass indica como as duas ACLs sero usadas. No exemplo usei a
linha pass !porn !proxy all, que indica que os acessos s pginas citadas nas listas
devem ser bloqueados, mas o acesso a outras aceito.
Concluindo, usei a linha redirect http://www.quixada.ufc.br, que faz com que todos os
acessos bloqueados sejam redirecionados de forma transparente URL especificada.
Para combinar listas do MESD e do Shalla, a configurao seria a seguinte:
# /etc/squid/squidGuard.conf
dbhome /var/lib/squidguard/db
logdir /var/log/squid
dest porn {
domainlist
blacklists/porn/domains
urllist
blacklists/porn/urls
}
dest proxy {
domainlist
blacklists/proxy/domains
urllist
blacklist/proxy/urls
}
dest porn2 {
domainlist
BL/porn/domains
urllist
BL/porn/urls
}
dest tracker {
domainlist
BL/tracker/domains
urllist
BL/tracker/urls
}
acl {
default {
pass !porn !proxy !porn2 !tracker all
redirect http://www.quixada.ufc.b

Você também pode gostar