Você está na página 1de 5

Tutorial Squid

por Fernando Augusto Medeiros fernando@linuxplace.com.br


Velocidade de conexo provavelmente um dos maiores problemas da Internet, a chegada do www trouxe
junto com a multimdia, uma demanda por canais cada vez mais rpidos. As distancias inter continentais da
Internet acabam tornando a expanso dos canais lenta, e mesmo assim os canais individuais dos provedores
de paginas no podem suportar todas as requisies de todos os navegadores do mundo. Junto a isso temos
outros grandes problemas, segurana contra invasores e numero de IP's disponveis cada vez menor.
Mas nem tudo esta perdido, e possvel fazer com que as paginas sejam acessadas de redes mais prximas,
conectar uma rede inteira a Internet com apenas um IA, impedir que as maquinas da Internet acessem a rede
interna. Dentre as solues possveis para o problemas temos o PROXY para conectar com segurana e o
CACHE para que as paginas sejam buscadas de servidores mais prximos, sendo assim apresentamos o
SQUID o proxy-cache mais famoso e usado do mundo.
Proxy quer dizer intermedirio, o SQUID funciona sendo o "atravessador" entre a conexo do cliente e o
servidor, neste meio do caminho ele armazena os objetos que foram solicitados e permite que as prximas
requisies para os mesmos objetos possam ser respondidas por ele mesmo.
A verso atual do squid possui as seguintes caractersticas:
- Proxy e cache para HTTP, FTP e outros protocolos baseados em URL
- Proxy para SSL
- Cache Hierrquico
- suporte para Proxy transparente
- Polticas de controle de acesso extremamente Flexveis
- SNMP
- Logs Avanados
- DNS Cache
Instalao:
Primeiramente temos que escolher a maquina que o squid ira ficar. Uma maquina para comportar o squid no
precisa de um processador rapidssimo, o mais importante para ele e a memria RAM, o squid adora
memria, quanto mais puder dar a ele melhor. A utilizao de discos SCSI para a partio que ficar o cache
tambm e muito bem vinda.
Partiremos do pressuposto que a maquina em que o squid ser instalado j tem a rede TCP/IP funcionando,
Se o squid for ser usado para conectar uma rede privada (IP's invlidos na Internet como da classe
192.168.0.0/24) Internet, a maquina precisara de 2 placas de rede ou no mnimo 2 IP's. (melhor o primeiro
caso para entrar numa configurao de rede isolada) um kernel configurado com ipforward e masquerading e
muito bem vindo para a construo de um Proxy transparente.
Maquina exemplo para este teste.
- K6 II 350 Mhz (no achei nada menor para vender, mas se quiser pode usar um 200, eu j instalei Squid em
486 e est funcionando razoavelmente bem)
- 128 RAM
- Disco IDE 3 GB para sistema e log.
- Disco SCSI 9 GB para cache (em instalaes mais modernas, um ATA/66
- 2 placas de rede (para isolar as redes)
Obtendo o squid:
Se for usurio de um sistema baseado em RPM pode consegui-lo nos endereos abaixo.
rpmfind.net: ftp://rpmfind.net/linux/rawhide/1.0/i386/RedHat/RPMS/squid-2.3.STABLE2-4.i386.rpm
Conectiva: ftp://ftp.conectiva.com.br/pub/conectiva/dsk/5.0/cd1/conectiva/RPMS/squid-2.3.1-cl.i386.rpm
Se quiser obter o squid em formato tgz fonte* pode conseguir em: http://www.squidcache.org/Versions/v2/2.3/squid-2.3.STABLE2-src.tar.gz
(*)A compilao dos squid no entra no escopo deste artigo ento quem quiser compilar o
Tomando como base o rpm da conectiva, continuaremos a instalao. O squid no precisa de um linux com
muita coisa, o nico pacote necessrio a glibc e claro, ele precisa estar com a rede TCP/IP funcionando.
Um kernel com o ipmasquerading tambm legal para a implementao do proxy transparente como
veremos adiante.
Comando para instalar o squid:
#rpm -ivh i/caminho_para_onde_foi_salvo_o_arquivo_/squid-2.3.1-cl.i386.rpm
Configurao:

A configurao do squid feita editando seu arquivo de configurao, o squid.conf. Na instalao do RPM
ele estar no/etc/squid/. Use seu editor preferido para configurar o arquivo. O arquivo de configurao e
muito bem explicado, as configuraes padro vem comentadas facilitando o entendimento.
O squid trabalha "Escutando" uma porta TCP determinada, os clientes que querem acessar uma pagina Web,
ftp, ssl fazem requisies nesta porta informando o servidor e o protocolo que querem utilizar e o squid faz a
requisio na porta certa. A porta padro do squid e a porta 3128 isto pode ser alterado com uma diretiva do
squid.conf http_port, vamos usar a porta 8080 inserindo a seguinte linha no squid.conf:
http_port 8080
Temos que decidir tambm onde ser o diretrio de cache e o tamanho do mesmo. Por padro o squid est
configurado para o diretrio de cache ficar em /var/spool/squid, por questes de performance, segurana e
gerenciabilidade melhor que ele fique instalado em uma partio separada. Montaremos ento a partio de
cache no diretrio /cache e configuraremos para que o cache fique l. Para mudar o diretrio do cache
procure a linha cache_dir no squid.conf, provavelmente ela estar assim:
#cache_dir ufs /var/spool/squid 100 16 256
Bem vamos entender os parmetros. O primeiro diz respeito ao formato do cache, melhor no mudar isso, a
outra opo e asyncufs que no esta compilada no RPM e ainda instvel. A segunda opo informa o
diretrio do cache, como resolvemos que o cache ficar no diretrio /cache este valor deve ser mudado
para /cache. O terceiro parmetro e o tamanho do cache em Mega bytes, tendo um disco de 9GB, separados
uns 20% para um overhead do linux mais o squid podemos selecionar 7GB. Os outros parmetros dizem
respeito a configurao dos diretrios do squid, no e necessrio muda-los. Ento nossa linha fica sendo:
cache_dir ufs /cache/ 7000 16 256 (Note que no tem mais o # na frente)
E possvel inserir vrias entradas cache_dir no squid.conf, ele ira anexar a nova rea sem perder o cache
anterior.
Agora que j esta configurada a rea de cache, primeiro e preciso assegurar que o squid ter direito de escrita
no diretrio de cache, o squid no roda como o root, ele usa um usurio definido no parmetro do squid.conf,
cache_effective_user, a distribuio da conectiva vem com o squid rodando com o usurio nobody, para
fazer o squid rodar com outro usurio (o usurio squid por exemplo), troque o valor do parmetro no arquivo
de configurao. lembre-se que o usurio ter de ter acesso de leitura e escrita nos diretrios de cache e log.
E hora de criar o cache. Digite na linha e comando:
# squid -z
Nesse momento o squid j esta pronto para ser executado mas nenhum usurio poder passar por ele, e
preciso configurar as ACL (Listas de Controle de Acesso) do squid.
As ACL permitem especificar endereos de origem ou destino, domnios, horrios, usurios, portas ou
mtodos de conexo ao Proxy, que serviro de base para permitir ou negar o acesso baseando-se em
conjuntos dessas ACL's. Isto permite uma grande flexibilidade na configurao do SQUID: podemos, por
exemplo, especificar quais endereos podem ser acessados, quais no podem ser acessados, que certo
endereo somente pode ser acessado em determinado horrio, que um usurio somente pode acessar a partir
de uma maquina especifica, que um protocolo pode ou no ser utilizado, ou qualquer combinao dessas
permisses/restries.
acl minharede src 192.168.0.0/255.255.255.0 | | | |_ > Domnio da ACL | | | | | |_ _ _ _ _ > Tipo de ACL | | | |_
_ _ _ _ _ _ _ _ > Nome da ACL | |_ _ _ _ _ _ _ _ _ _ _ _ _ > Comando de criao de ACL
Isto cria uma ACL de nome minharede do tipo src (IP de origem) sendo seu domnio
192.168.0.0/255.255.255.0 uma rede classe C.
Agora temos que dar permisso a esta ACL a diretiva que faz isso e o http_access Ento temos que inserir no
squid.conf
http_access minharede allow | | |_> allow/deny (permite/nega) | | |_ _ _ _ _> ACL ( ACL's a que se aplica a
regra) | |_ _ _ _ _ _ _ _ _ _ _ _ _> Comando de permisso.
Mas isso no pode ser feito em qualquer lugar, o squid e meio chato com a ordem dos parmetros. vamos ver
como esta o arquivo padro e quais alteraes devem ser feitas para entendermos melhor.
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 21 443 563 70 210 1025-65535


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 # multilink http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
Como podemos ver existem vrios tipos de ACL, vamos nos ater a primeira, foi criada uma ACL do tipo src,
isto significa maquina de origem, com nome "all" que corresponde a qualquer maquina existente. A ultima
diretiva diz que a conexes correspondentes a diretiva all esto proibidas de continuar. A diretiva ACL tem
de ser criada antes de ser conferido algum direito. Ento agora a ordem das linhas dever ser a seguinte:
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 21 443 563 70 210 1025-65535
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 # multilink http
acl CONNECT method CONNECT
#ACL's Do usurio
acl minharede src 192.168.0.0/255.255.255.0 #ACL correspondente a rede interna
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
#Regras do Usurio
http_access allow minharede #permite conexes da rede interna
http_access deny all
Podemos ver que temos varias linhas para a ACL Safe_ports, isso merece duas consideraes, primeiro e
possvel especificar vrios parmetros para uma ACL, seja dando um espao entre os parmetros ou
colocando duas entradas para a mesma ACL assim se tivssemos que permitir tambm a rede
192.168.1.0/255.255.255.0 poderamos criar a ACL de duas formas:
#Com espao:
acl minharede 192.168.0.1/255.255.255.0 192.168.1.0/255.255.255.0
#ou com duas linhas
acl minharede 192.168.0.0/255.255.255.0
acl minharede 192.168.1.0/255.255.255.0
A segunda considerao e que por padro as diretivas ACL so do tipo "OU", ou seja uma conexo
pertencera a uma ACL se qualquer um dos parmetros coincidir. No nosso exemplo, a rede 192.168.0.0 OU
rede 192.168.1.1 coincidiram com a ACL. A ordem entre as diretivas ACL no e importante.
Para as diretivas http_access a coisa funciona diferente, como podemos ver a diretiva de permisso da rede
interna foi inserida antes do deny all. O squid l as diretivas de CIMA para BAIXO, parando a comparao
na primeira que coincidir. Alm disso as diretivas http_access so do tipo "E", para que a diretiva entre em
ao, a conexo tem de estar coincidindo com TODAS as ACL's especificadas.
EX:
acl all src 0.0.0.0/0.0.0.0
acl minharede src 192.168.0.0/255.255.255.0
acl horacom time MTWTF 09:00-18:00

http_access allow minharede horacom


http_access deny all
No exemplo acima, s as maquinas da rede 192.168.0.0/255.255.225 de 09:00 as 18:00 podero acessar a
Internet, as demais maquinas ou qualquer maquina fora deste horrio no podero acessar.
Inicializando o Squid
O rpm colocara o script de inicializao no /etc/rc.d/init.d/squid, mas se instalado via tgz precisaremos criar
uma entrada para que ele inicie. Podemos utilizar o rc.local para isso, adicionando a seguinte linha:
/usr/bin/squid
o comando squid tem uma srie de parmetros, veja alguns interessantes.
squid -k {reconfigure|rotate|shutdown|interrupt|kill|debug|check}
reconfigure:Faz com que o squid releia os arquivos de configurao
rotate: Faz com que o squid de o "rotate log"
shutdown: Derruba o squid de uma maneira graciosa, espera as conexes fecharem
interrupt: Derruba o squid sem esperar o fim das conexes
kill: Derruba o squid sem esperar as conexes fecharem nem os logs, s usar em ultimo caso
debug: Ordena o squid a gerar log de depurao mximo ate que seja enviado de novo
check: Verifica se existe uma cpia do squid em execusso.
Configurao dos Clientes
Para que os clientes possam acessar o squid temos 3 opes; configurar o browser manualmente na porta
escolhida, montar um script de auto configurao e configurar o browser para usa-lo, configurar o servidor
como proxy transparente. A complexidade de cada uma vai depender do numero de estaes e tipos de
configuraes desejadas.
Parmetros definidos para nosso servidor
Nome :proxy.pcplace.com.br
Porta de proxy :8080
IP Invalido :192.168.0.10
IP Valido :200.200.200.10 (espero que no esteja privilegiando ningum : )
Domnio :pcplace.com.br
Domnios locais :linuxplace.com.br
(No usar proxy):serverplace.com.br
Opo 1
Mo na massa, ou melhor no navegador.
Netscape:
V ao menu Editar/Preferncias, de dois cliques em avanado e selecione proxy. Marque a opo
"Configurao manual do Proxy" e clique no boto ao lado,
IE
lynx
O lynx funciona por variveis de ambiente, voc pode acrescentar a seguinte linha ao seu ~/.bashrc:
export "http_proxy=http://proxy.pcplace.com.br.com.br:8080/"
A varivel funciona com o seguinte formato "protocolo_proxy" Ento, se quiser proxy para ftp, troque o
http_proxy para ftp_proxy. Se quisermos que esta varivel funcione para todos os usurios da maquina edite
o /etc/lynx.conf (ou onde esteja o arquivo de configurao do lynx) e acrescente a linha
http_proxy:http://proxy.pcplace.com.br.com.br:8080/
Opo 2:
Criar um arquivo de configurao automtico, fiz este aqui baseado no que esta disponvel na pagina do
squid, s alterar segundo as necessidades. Se algum quiser algo mais avanado pode consultar na pagina
http://developer.netscape.com/docs/manuals/proxy/ProxyNT/AUTOCONF.HTM
Depois de editado o arquivo, ele deve ser publicado em algum servidor Web disponvel para os
computadores que sero configurados por ele, no podemos publicar num servidor que s ser acessvel
atravs do proxy. Vamos supor que ele fique no seguinte endereo:
http://www.servidorlocal.com.br/proxy.pac
O servidor web ainda tem de informar o mime type correto do pac, trocando em midos adicione a seguinte
linha no httpd.conf do apache.
AddType application/x-ns-proxy-autoconfig .pac
[Arquivo proxy.pac]
Netscape

V ao menu Editar/Preferncias, de dois cliques em avanado e selecione proxy. Marque a opo


"Configurao automtica do proxy" digite no campo ao lado.
http://proxy.pcplace.com.br/proxy.pac
IE
Opo 3
OK, sem configurar browser, vamos engana-los :)
O proxy transparente uma unio de uma caracterstica do squid mais o ipforward do Linux. Para que isso
funcione o linux em questo tem de estar configurado para ser o gateway das maquinas. Vamos interceptar
as conexes Web e redirecion-las para o Squid.
Na parte do linux precisamos de um kernel com IPFirewalling e Suporte a Proxy transparente, maiores
detalhes IPCHAINS-HOWTO e Firewall-HOWTO disponveis no ldp.conectiva.com.br.
Configuraes necessrias para o kernel 2.2;
[*] Network firewalls
[ ] Socket Filtering
[*] Unix domain sockets
[*] TCP/IP networking
[ ] IP: multicasting
[ ] IP: advanced router
[ ] IP: kernel level autoconfiguration
[*] IP: firewalling
[ ] IP: firewall packet netlink device
[*] IP: always defragment (required for masquerading)
[*] IP: transparent proxy support
O seguintes comandos tem de ser executados, sugiro que sejam adicionados ao rc.local (/etc/rc.d/rc.local no
conectiva)]
/sbin/ipchains -A input -p tcp -s 192.168.0.0/24 -d 0/0 80 -j REDIRECT 8080 (ou a porta que esteja sendo
utilizada pelo squid)
echo 1 > /proc/sys/net/ipv4/ip_forward
Isso vai redirecionar tudo o que vier para a porta 80 (http) para a porta local 8080 do squid.
Bom, isso e s a primeira parte, agora temos de configurar o Squid.
Mais linhas adicionadas ao squid.conf:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
O modo do httpd-accelerator permite ao squid responder como se fosse um servidor Web real, e redirecionar
a chamada para o servidor real.
Bom, os clientes no passam to liso assim de configurao, eles devem ver o squid como seu gateway
primrio, ou pelo menos o gateway primrio deles deve ver o squid como o gateway para porta 80, essa
configurao depende de cada rede.
Bem espero que isso possa comear a dar uma luz no fascinante SQUID.
Para saber mais
http://www.squid-cache.org/Doc/FAQ/FAQ.html

Você também pode gostar