Você está na página 1de 29

Squid

Antes de explicar o que o Squid devemos falar um pouco sobre Proxy, ou seja, o que um Servidor Proxy. Para responder essa pergunta apresentamos a figura abaixo, na qual temos um rede DMZ, na qual h um servidor Proxy funcionando.

Na figura abaixo temos diagrama mostrando 3 computadores acessando um mesmo endereo na internet (http://www.linuxbrasil.org.br/exemplo1.html). O que um servidor Proxy faz ofertar as pginas estticas em html e outros formatos estticos, que no exemplo ao lado a pgina exemplo1.html. Note que as consultas feitas pela pgina exemplo1.html e feita e respondida pelo servidor Proxy, o qual armazena localmente em cache esta pgina quando um dos 3 computadores da LAN faz a consulta pela mesma, ou seja, digamos por exemplo, que o computador esquerda tenha feito a consulta inicialmente. Ento o servidor Proxy ter que buscar esta pgina diretamente no site do Projeto Linux Brasil e, em seguida ir armazen-la em cache para que os outros 2 computadores a encontrem no servidor Proxy posteriormente.

Quando novos computadores forem adicionados a esta LAN, as consultas pela pgina exemplo1.html sero respondidas diretamente pelo servidor Proxy, no sendo necessria uma nova consulta diretamente no portal do Projeto Linux Brasil para repassar ao novo computador.

Dessa forma fica fcil ver os porqus de se utilizar servidores Proxy em redes locais (LANs).

O Squid um dos mais populares servidores Proxy no mundo Linux e um dos melhores programas para misso crtica de controle de contedo (controle do acesso internet). Podendo esconder requisies repetidas (envitar consumo da largura de banda da rede junto ao seu provedor), esconder www e DNS, e outros recursos de rede compartilhados para um grupo de pessoas numa rede local (LAN). Ele pode ser usado tanto em sistemas Linux / Unix e Windows.

Alm dos atributos acima, o Squid est em desenvolvimento h muito tempo, seu cdigo aberto, com licena GNU GPL e funciona com muitos protocolos, tais como TLS, SSL e HTTPS, embora seja principalmente usado para HTTP e FTP. Com todas essas atribuies, este software torna-se completo e eficaz para realizar misses crticas em situaes reais nas empresas. Tanto que centenas de provedores de internet o utilizam para oferecer contedo aos seus usurios.

Instalando o Squid

O Squid pode ser encontrado diretamente no site oficial do Projeto: http://www.squid-cache.org/. Abordaremos aqui a instalao no Debian, Fedora / Red Hat.

Para instalar o Squid no Debian e semelhantes use o seguinte comando (logado como root e conectado internet, claro):

# apt-get install squid3

Siga as instrues que aparece (escolha S, claro) para poder instalar.

J a instalao no Fedora feita assim:

# yum install squid

Configurao do servidor Proxy Squid

Arquivo de configurao

Debian

/etc/squid3/squid.conf Fedora /etc/squid/squid.conf Usaremos o arquivo squid.conf baseado no Debian, que contm aproximadamente 3000 linhas e pode ser editado retirando os comentrios com #, portanto faa uma copia antes.

# cp squid.conf squid.conf.original

Agora explicaremos as principais diretivas arquivo squid.conf onde voc pode edit-lo com qualquer editor de texto kwrite, gedit (ambiente grfico) e vi, nano e mcedit (modo texto) utilizando o recurso de localizar texto dos editores de texto. No final mostraremos o arquivo j configurado e pronto para ser utilizado.

Editando o squid.conf

Define a porta do squid http_port 3128

Esse o diretrio de cache do squid onde so armazenadas as pginas da internet, onde 100 tamanho em MB (Megabytes) do cache, 16 o nmero de diretrios e 256 o nmero de subdiretrios de cada diretrio. cache_dir ufs /var/spool/squid3 100 16 256

Essa opo indica a quantidade de memria RAM que o squid ir consumir, no caso de um servidor squid exclusivo para cache deve-se utilizar 80% a 90% de toda memria RAM do computador.

Por exemplo 512 MB de RAM (80% de 512 MB = cache_mem 410 MB), 128 MB um bom valor para comear com 512 MB ou 1 GB. cache_mem 8 MB

Essa opo define a porcentagem de limite mnimo para substituio de um objeto(pginas e imagens), essa substituio inicia quando o swap em disco estiver acima do limite mnimo definido aqui.

cache_swap_low 90

Define o limite mximo, o contrrio de cache_swap_low cache_swap_high 95

Essa opo define o tamanho mximo de um objeto em cache, os objetos maiores do que esse limite, no sero salvos em disco. Um nmero grande indica economia de banda e perda de performance no cache, um nmero pequeno menor no economiza largura de banda, mas aumenta a velocidade do cache para o tempo de resposta. recomendado um valor entre 4 e 16 MB. maximum_object_size 4096 KB

Os objetos maiores do que esse tamanho, no sero armazenados em memria maximum_object_size_in_memory 8 KB

Mscara de rede da sua rede client_netmask 255.255.255.0

Email do usurio do computador local que administra do squid cache_mgr admin@firewall.linuxbrasil.org.br

usurio dono do squid cache_effective_user proxy (No Debian proxy e no Red Hat / Fedora squid)

grupo dono do squid

cache_effective_group proxy (No Debian proxy e no Red Hat / Fedora squid)

Nome do computador que est instalado o squid e onde ser exibidas as mensagens de erro. visible_hostname firewall.linuxbrasil.org.br

Diretrio de erros do squid error_directory /usr/share/squid3/errors/English

Para exibir os erros em portugus altere para: error_directory /usr/share/squid3/errors/Portuguese

Arquivos de logs de acesso e objetos do cache do squid access_log /var/log/squid3/access.log cache_log /var/log/squid3/cache.log cache_store_log /var/log/squid3/store.log

Comandos do squid Iniciando o squid

Debian

# /etc/init.d/squid3 start

Fedora # /sbin/service squid start

Verificando status do squid

Com o comando netstat, podemos ver a porta e se o servio est ativo.

# netstat -nap | grep ":3128" tcp 0 0 0.0.0.0:3128 0.0.0.0:* OUA 3914/(squid)

Criando novo cache do squid

As vezes o squid pode travar, e para tentar resolver o problema criando novos diretrios de cache, pare o squid e execute o comando:

# /etc/init.d/squid3 stop # squid3 -z

Reiniciando configuraes do squid

Caso voc tenha feito algumas alterao no arquivo squid.conf, execute o comando com o squid executando:

# /etc/init.d/squid3 start # squid3 -k reconfigure

Entrando em modo de depurao

Para analizar erros voc pode entrar em modo debug para fazer a depurao de possveis erros, para isso execute os comandos abaixo:

# squid3 -k debug e # squid3 -X

Verificando logs do squid

Para ver os erros do servio do squid execute o comando: # tail -f /var/log/syslog

Para ver os acessos do squid execute o comando: # tail -f /var/log/squid3/access.log

Proxy transparente

um recurso utilizado pelo squid, onde no precisa configurar o proxy no navegador (onde recomendado caso a rede tenha muitos computadores) e sim no prprio arquivo de configurao do squid squid.conf , onde os acessos aos sites so feitos pelo squid e

10

especificar controle de acesso.

Para o squid operar como proxy transparente, necessrio que esteja no mesmo computador que est configurado como firewall e acessando a internet, onde sero implementadas regras para seu funcionamento.

Para verses antigas anterior a verso 2.6 do squid era necessrio editar o arquivo squid.conf e adicionar as seguintes linhas :

httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on

Agora em verses acima da 2.6, que nesta configurao estamos usando a verso 3.0.PRE5, execute o comando squid -v, e verifique a verso do seu squid alm de exibir as diretivas de compilao na hora da instalao. # squid -v

Para habilitar proxy transparente a partir da verso 2.6, basta mudar a linha: http_port 3128

E acrescentar a palavra transparent aps a porta do squid http_port 3128 transparent

11

Aps alterar o arquivo squid.conf, crie uma regra no seu arquivo de firewall utilizando o comando com iptables abaixo, onde eth1 interface de rede da rede local.

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Agora verifique a sada do comando iptables -L -v -t nat e veja o o redirecionamento na interface eth1 atravs da porta 3128 do squid.

# iptables -L -v -t nat Chain PREROUTING (policy ACCEPT 298 packets, 19416 bytes) pkts bytes target prot opt in out source destination 0 0 REDIRECT tcp -- eth1 any anywhere anywhere tcp dpt:www redir ports 3128

Para fazer um teste execute o comando tail -f /var/log/squid3/access.log , e acesse a internet de um computador da rede. # tail -f /var/log/squid3/access.log

ACL - (Access Control Lists - Listas de controle de acesso)

uma lista de controle de acesso aos sites permitidos e no permitidos, onde podemos bloquear ou liberar um computador ou uma rede, bloquear ou liberar por sites, palavras, horrios e etc.

Entendo como o squid l as ACLs

12

*OBS o squid l linha por linha de cima para baixo do arquivo squid.conf, portanto as suas ACLs sero interpretadas dessa forma tomando cuidado na ordem das linhas do arquivo.

Veja exemplos de ACLs abaixo:

acl acl acl acl

LIBERADOS src 192.168.1.2 192.168.1.3 BLOQUEADOS src 192.168.1.4 192.168.1.5 SITES_PERMITIDOS dstdomain .google.com.br .uol.com.br SITES_BLOQUEADOS dstdomain .orkut.com .jogos.com

http_access allow LIBERADOS SITES_PERMITIDOS http_access deny BLOQUEADOS SITES_BLOQUEADOS

Acima foram criadas 2 ACLs de endereos IP: LIBERADOS - com os endereos IP que podem acessar os sites que esto permitidos BLOQUEADOS - com os endereos IP que no podem acessar os sites que esto bloqueados

Em seguida foram criadas 2 ACLs de sites: SITES_PERMITIDOS - com os sites que podem ser acessados SITES_BLOQUEADOS - com os sites que no podem ser acessados

A linha http_access allow LIBERADOS SITES_PERMITIDOS , diz ao squid para permitir (allow) os endereos IP 192.168.1.2 e 192.168.1.3, acessarem os sites .google.com.br e .uol.com.br (repare um ponto ., indicando qualquer nome de host para os domnios do google.com.br e uol.com.br).

Em seguida a linha http_access deny BLOQUEADOS SITES_BLOQUEADOS, diz ao squid para negar (deny) os endereos IP 192.168.1.4 e 192.168.1.5, acessarem os sites .orkut.com .jogos.com (repare um ponto ., indicando qualquer nome de host para os

13

domnios do orkut.com e jogos.com).

A medida que aumentar o nmero de endereos IP e sites, necessrio criar uma lista em arquivos, como mostrado mais abaixo nos exemplos de bloqueio de sites e palavras.

Voc pode adicionar as suas ACLs no arquivo squid.conf , abaixo da linha que est em comentrio # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS.

Permitindo um ou mais computadores acessar internet

acl IP_PERMITIDO src 192.168.1.2 192.168.1.3/32 192.168.1.4/255.255.255.255 http_access allow IP_PERMITIDO

Os computadores com endereo IP 192.168.1.2 192.168.1.3 192.168.1.4 estaro liberados para acessar a internet, e o restante bloqueado.

*OBS Observe que o endereo IP 192.168.1.3 possui a mscara de rede no formato CIDR /32, pois possui 32 bits e o endereo 192.168.1.4 possui a mscara de rede 255.255.255.255 preenchendo todos os 4 campos do endereo IP.

Permitindo uma ou mais redes de computadores acessar internet

*OBS obrigatrio a mscara de rede no formato padro 255.0.0.0 , 255.255.0.0 , 255.255.255.0 e etc ou formato CIDR /8, /16, /24 e etc.

14

acl REDE_PERMITIDA src 192.168.0.0/255.255.255.0 192.168.1.0/24 http_access allow REDE_PERMITIDA

As redes com endereo 192.168.0.0 192.168.1.0 estaro liberadas para acessar a internet, e o restante bloqueado.

Restringindo um ou mais computadores acessar internet

acl rede 192.168.1.0/24 acl IP_BLOQUEADO src 192.168.1.2 192.168.1.3/32 192.168.1.4/255.255.255.255 http_access deny IP_BLOQUEADO http_access allow rede

Os computadores com endereo IP 192.168.1.2, 192.168.1.3 e 192.168.1.4 estaro bloqueados para acessar a internet, e o restante da rede 192.168.1.0/24 estar liberada.

Restringindo uma ou mais redes de computadores acessar internet

*OBS obrigatrio a mscara de rede no formato padro 255.0.0.0 , 255.255.0.0 , 255.255.255.0 e etc ou formato CIDR /8, /16, /24 e etc.

acl rede 192.168.0.0/24 acl REDE_BLOQUEADA src 192.168.1.0/255.255.255.0 192.168.2.0/24 http_access deny REDE_BLOQUEADA http_access allow rede

15

As redes com endereo 192.168.1.0/255.255.255.0 192.168.2.0/24 estaro bloqueadas para acessar a internet, e a rede 192.168.0.0/24 liberada.

Bloqueando sites

acl rede src 192.168.1.0/24 acl SITES_BLOQUEADOS dstdomain /etc/squid3/sites_bloqueados http_access deny SITES_BLOQUEADOS http_access allow rede

Este arquivo /etc/squid3/sites_bloqueados deve ser criado manualmente, e nele estaro os sites que sero bloqueados, sendo que cada sites deve estar um em cada linha.

# touch /etc/squid3/sites_bloqueados

Agora edite o arquivo e inclua os sites que deseja bloquear

# nano /etc/squid3/sites_bloqueados

Veja um exemplo do arquivo:

.google.com.br .orkut.com

16

*OBS No esquea de colocar um ponto . no incio do domnio

Bloqueando palavras

acl rede src 192.168.1.0/24 acl PALAVRAS_BLOQUEADAS url_regex -i /etc/squid3/palavras_bloqueadas http_access deny PALAVRAS_BLOQUEADAS http_access allow rede

*OBS - A opo -i aps a palavra url_regex, serve para tanto palavras maisculas e como minsculas.

Este arquivo /etc/squid3/palavras_bloqueadas deve ser criado manualmente, e nele estaro as palavras que sero bloqueadas, sendo que cada palavra deve estar uma em cada linha.

# touch /etc/squid3/palavras_bloqueadas

Agora edite o arquivo e inclua os sites que deseja bloquear

# nano /etc/squid3/palavras_bloqueadas

Veja um exemplo do arquivo:

17

jogos SEXO

Bloqueando por horrio

*Obs O bloqueio por horrio s funciona quando o squid estiver configurado como proxy transparente, portanto no funcionar com autenticao.

Para bloquear por horrio utilizado o formato de dias em ingls aps a palavra time da seguinte forma:

Domingo Segunda Tera Quarta Quinta Sexta Sbado

Sunday (representado pela letras S) Monday (representado pela letras M) Tuesday (representado pela letras T) Wednesday (representado pela letras W) Thursday (representado pela letras H) Friday (representado pela letras F) Saturday (representado pela letras A)

acl REDE src 192.168.1.0/24 acl HORARIO_BLOQUEADO time MTWHF 08:00-18:00 http_access allow REDE HORARIO_BLOQUEADO http_access deny REDE

Esta ACL ir bloquear a internet de segunda sexta, das 08:00 s 18:00 para a rede REDE que foi criada acima com o endereo 192.168.1.0/24. Repare que a acl REDE est liberada

18

para acessar internet apenas nestes dias dias horrios, em seguida bloqueada para outros dias e horrios que no estejam especificados na acl HORARIO_BLOQUEADO.

Bloqueando por extenso de arquivo

acl REDE src 192.168.1.0/24 acl DOWNLOAD_BLOQUEADO url_regex -i /etc/squid3/download_bloqueado http_access deny DOWNLOAD_BLOQUEADO http_access allow rede

*OBS - A opo -i aps a palavra url_regex, serve para tanto palavras maisculas e como minsculas.

Este arquivo /etc/squid3/palavras_bloqueadas deve ser criado manualmente, e nele estaro as palavras que sero bloqueadas, sendo que cada palavra deve estar uma em cada linha.

# touch /etc/squid3/download_bloqueado

Agora edite o arquivo e inclua os sites que deseja bloquear

# nano /etc/squid3/download_bloqueado

Veja um exemplo do arquivo, onde bloqueia qualquer arquivo que tenha essas extenses:

.*\.exe$

19

.*\.tar.gz$ .*\.avi$ .*\.mp3$

Autenticao de usurios atravs do proxy squid * ATENO ! 1. Autenticao pelo proxy no funciona junto com proxy transparente, sendo assim voc ter que escolher entre as dois mtodos: autenticao ou proxy transparente. 2. Para autenticao voc ter que configurar o proxy em todas os computadores, e como proxy transparente no. 3. O bloqueio por horrio no funcionar se a configurao for feita no navegador, sendo assim ter que configurar o squid como proxy transparente.

Agora retire o comentrio da seguinte linha no arquivo squid.conf, onde /usr/lib/squid3/ncsa_auth programa de autenticao.

auth_param basic program /usr/lib/squid3/ncsa_auth /usr/etc/passwd

Altere o caminho para o arquivo de senha para o diretrio de configurao do squid /etc/squid3

auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd_squid

Caso voc mudar a mensagem da tela de autenticao, retire o comentrio da linha:

auth_param basic realm Squid proxy-caching web server

20

Altere para algo como:

auth_param basic realm Squid proxy Autenticacao de usuarios

Agora edite o arquivo squid.conf e acrescente as seguintes linhas na seo de ACLs :

acl LOGIN proxy_auth REQUIRED http_access allow LOGIN

Agora ser necessrio criar o arquivo de usurios e senhas com o comando htpasswd, que vem junto com o servidor web Apache, portanto se caso voc no tenha o Apache instalado, instale-o:

No Debian use apt-get e no Fedora yum:

Debian

# apt-get install apache2

Fedora # yum install httpd

21

Depois de instalado o apache, agora podemos utilizar o comando htpasswd, criar o arquivo de usurios e senhas e restringir o acesso a internet fazendo autenticao por usurio.

# htpasswd -c /etc/squid3/passwd_squid aluno1

Agora s digitar a senha para o usurio aluno1

A opo -c deve ser utilizada apenas na primeira vez que for criar o arquivo, na prxima vez que executar o comando para criar outro usurio, no ser necessrio. Pronto agora basta configurar os computadores da rede para utilizar o proxy squid.

Configurao dos clientes no navegador para acessar a internet pelo squid

Quando o squid est configurado com autenticao, e no como proxy transparente, os navegadores do computadores da rede devero ser configurados para acessar a internet pelo proxy squid.

Para configurar o proxy no Mozilla Firefox e semelhantes, clique em: Editar Preferncias Avanado Rede Configuraes Configurao manual de proxy

Agora basta preencher os campos com o endereo IP do proxy, que neste caso 192.168.1.1 e especificar a porta do squid 3128, como mostra as imagens abaixo.

22

23

24

Limpando o arquivo squid.conf

Agora iremos criar o arquivo squid.conf limpo a partir do arquivo original, onde sero retiradas as linhas que esto sem comentrios # .

# cp squid.conf squid.conf.backup # egrep -v "^#|^$" squid.conf.backup > squid.conf Agora faa o download do arquivo de squid.conf no formatato .tar.gz e depois descompate-o.

Download do arquivo conf Aps ter feito alguma alterao no arquivo squid.conf, execute o comando:

# squid3 -k reconfigure

ou reinicie o squid

Debian

25

# /etc/init.d/squid3 restart

Fedora # /sbin/service squid restart

Limpando o cache do squid

Quando existe muitos computadores na rede, a quantidade de acessos aumentar o tamanho do cache do squid tambm. Portanto voc ter que apagar os arquivos de acesso e de cache do diretrio /var/spool/squid3/.

Siga os passos a seguir para apagar os arquivos e em seguida mostrado um script para fazer essa tarefa, baseado no Debian (podendo ser adaptado para qualquer distribuio Linux) que pode ser includo como uma tarefa agendada em uma crontab.

Remova os objetos(pginas de internet) de cache do squid # rm -rf /var/spool/squid3/*

Remova os arquivos de log do squid # rm -rf /var/log/squid3/access.log # rm -rf /var/log/squid3/cache.log # rm -rf /var/log/squid3/store.log

26

Crie os arquivos em branco de log do squid # touch /var/log/squid3/access.log # touch /var/log/squid3/cache.log # touch /var/log/squid3/store.log

Verifique as permisses e proprietrio na sua distribuio Linux com o comando ls -l e altere o dono e o grupo

# chown proxy.proxy /var/log/squid3/access.log # chown root.root /var/log/squid3/cache.log # chown proxy.proxy /var/log/squid3/store.log

# chmod 640 /var/log/squid3/access.log # chmod 644 /var/log/squid3/cache.log # chmod 640 /var/log/squid3/store.log

Crie um novo diretrio de cache do squid # /etc/init.d/squid3 stop # /usr/sbin/squid3 -z

Agora inicie o squid # /etc/init.d/squid3 start

27

Abaixo segue o script, onde voc pode mudar sua permisso para executar, copiar e fazer suas alteraes para sua distribuio Linux.

Download do script #!/bin/sh # limpa_cache_squid.sh

################################################################

# script para limpar o cache do squid desenvolvido pelo Prof. Fernando Projeto Linux Brasil

################################################################ echo limpando cache squid !!!

# removendo os objetos(pginas de internet) de cache do squid

# tome cuidado, repare um asterstico *, indicando que ir remover apenas o contedo do dire rm -rf /var/spool/squid3/*

# removendo os arquivos de log do squid rm -rf /var/log/squid3/access.log rm -rf /var/log/squid3/cache.log rm -rf /var/log/squid3/store.log

# criando os arquivos em branco de log do squid touch /var/log/squid3/access.log touch /var/log/squid3/cache.log

28

touch /var/log/squid3/store.log

# verifique as permisses e proprietrio na sua distribuio Linux com o comando ls -l e altere chown proxy.proxy /var/log/squid3/access.log chown root.root /var/log/squid3/cache.log chown proxy.proxy /var/log/squid3/store.log

chmod 640 /var/log/squid3/access.log chmod 644 /var/log/squid3/cache.log chmod 640 /var/log/squid3/store.log

# Criando um novo diretrio de cache do squid /etc/init.d/squid3 stop /usr/sbin/squid3 -z

echo iniciando squid !!! /etc/init.d/squid3 start

29