Proxy e Cache HTTP
O Squid é um software largamente utilizado como servidor proxy e cache HTTP em diversos tipos de redes, como corporativas, de provedores, universidades etc. Possui alta performance e suporta os protocolos HTTP, FTP e Gopher. A sua página é www.squid-cache.org. De um modo simplificado, o Squid recebe os pedidos de usuários que desejam visualizar páginas externas e verifica se tem a página em cache. Se tiver a página em cache, verifica se ela ainda é válida e envia para o cliente. Se não tiver a página em cache, busca a página no servidor externo, armazena no cache e manda para o cliente. Assim, na próxima vez que alguém solicitar esta página a mesma será carregada muito mais rapidamente, pois estará em um cache local. Entre as principais vantagens de utilizar o Squid estão:
· Aumento na segurança, pois todas as requisições para páginas externas irão passar através do proxy;
· Aumento da velocidade de navegação e/ou diminuição da utilização do link Internet, já que muitas páginas acessadas pelos usuários estarão em cache local;
· Possibilidade de definir uma política de acesso, bloqueando páginas fora do escopo a que se destina a Internet na instituição, como chat, pornografia etc.
O Squid necessita de um diretório no disco onde irá armazenar o seu cache. Geralmente, em máquinas com esse propósito criamos um filesystem especial para o Squid, que pode ser /squid, onde serão guardados o cache e os logs. O tamanho do cache pode ser determinado pela configuração do Squid, e quanto maior o cache mais páginas serão armazenadas e mais rápida será a navegação.
Efetue o download da última versão estável do Squid, a partir do seu site. A versão atual é 2.5 STABLE4, e o arquivo se encontra em http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE4.tar.gz. Extraia este arquivo no /tmp, e vá até o diretório que será criado.
# ./configure --prefix="/usr/local" --sysconfdir="/usr/local/etc/squid" --localstatedir="/var" --enable-storeio="ufs diskd" --enable-removal-policies="lru heap" --enable-default-err-language="Portuguese" --disable-hostname-checks
O executável do Squid será instalado em /usr/local/sbin/squid. O arquivo de configuração será /usr/local/etc/squid/squid.conf. Deve ainda ser removido o diretório /var/logs (iremos utilizar outro diretório para os logs do Squid):
# rmdir /var/logs
Crie um usuário e um grupo de nome squid:
# pw group add squid -g 180
# pw user add squid -c "Squid" -d "/nonexistent" -s "/sbin/nologin" -u 180 -g 180
Crie o diretório /var/log/squid, para armazenar os logs do Squid. Atribua a este diretório o dono squid e aplique a permissão 750.
Vá até o diretório /usr/local/etc. Visualize o arquivo squid.conf.default e veja todas as opções. Segue abaixo um exemplo sintetizado do arquivo squid.conf. Copie-o no diretório mencionado. Mantenha o squid.conf.default como referência.
-------------------- Arquivo squid.conf --------------------
#http_port 10.10.0.5:3128
# O cache_dir define qual o diretorio e qual o espaco
# utilizado para o cache no disco. Podem ser definidos
# varios diretorios se necessario. O tamanho (em MB) nao deve
# ser o tamanho total da particao, descontar no minimo
# 20%.
cache_dir diskd /squid 1000 16 256 Q1=72 Q2=64
acl proibido-urlpath urlpath_regex -i "/usr/local/etc/squid/proibido-urlpath"
acl proibido-dominios dstdom_regex -i "/usr/local/etc/squid/proibido-dominios"
http_access deny proibido-urlpath
http_access deny proibido-dominios
-------------------- Fim do arquivo squid.conf --------------------
O diretório no qual o Squid irá guardar o cache deverá ter o dono squid e permissão 750.
Como estaremos utilizando o diskd, é interessante fazer um certo tuning, adicionando algumas opções no kernel. Adicione as opções abaixo, e após isso recompile e instale o novo kernel, e reinicie a máquina.
# Suporte a memoria compartilhada.
# Maximo de segmentos de memoria compartilhada por processo.
# Numero maximo de identificadores de memoria compartilhada.
# Tamanho maximo de segmento de memoria compartilhada.
# Numero maximo de paginas de memoria compartilhada.
# Suporte a filas de mensagens.
# Numero maximo de bytes por fila de mensagem.
# Numero maximo de identificadores de filas de mensagens.
# Numero maximo de segmentos de mensagem no sistema.
# Tamanho de um segmento de mensagem.
# Numero maximo de mensagens no sistema.
options MSGTQL=2049
Após ter configurado, execute o Squid pela primeira vez com a opção "-z":
Isto irá criar a estrutura de diretórios que irá suportar o cache.
Para efetuar o serviço de proxy transparente, este servidor deverá encaminhar para a porta do Squid as requisições HTTP vindas dos clientes, da rede interna por exemplo. Para isso, você deverá ter um firewall configurado e funcionando, veja a seção IPFW2. Coloque a seguinte regra no ipfw2:
add 800 fwd 127.0.0.1,3128 dst-port { 80 or 21 } src-ip 10.10.0.0/16
add 810 allow dst-port 3128 dst-ip 10.10.0.5 src-ip 10.10.0.0/16
add 900 deny dst-port 3128
A rede 10.10.0.0/16 no exemplo é a rede interna, cujas requisições nas portas 80 e 21 serão direcionadas para a porta 3128 em localhost. Também será permitido que máquinas da rede local contatem o Squid, caso o proxy seja configurado manualmente. O ip 10.10.0.5 no exemplo é o da interface do servidor conectada a rede interna. A terceira regra irá bloquear qualquer outro tráfego tendo como destino a porta 3128. Estas regras devem ficar antes da(s) regra(s) do NAT, caso esteja utilizando-o.
Vá até o diretório /usr/local/etc/squid. Poderão ser criados os arquivos proibido-url, proibido-urlpath e proibido-dominios, todos com o dono squid. Estes arquivos deverão possuir a relação de páginas cujo acesso não será permitido. Deverão ter uma entrada por linha, e descritas em expressões regulares - na maioria das vezes não são necessárias espressões muito elaboradas, bastando inserir as strings, uma por linha. O arquivo proibido-url deve conter as strings que serão verificadas contra toda a URL. O proibido-urlpath, as strings que serão verificadas contra a URL completa menos o nome do servidor e domínio, por exemplo no endereço www.exemplo.org/testes/pagina, o urlpath é apenas "testes/pagina". Já o proibido-dominios é o contrário, contém as strings que serão verificadas apenas contra o nome e domínio do site, no exemplo anterior seria "www.exemplo.org". Um excelente guia sobre expressões regulares se encontra no endereço http://aurelio.net/er/.
Para que os logs do Squid sejam rotacionados na freqüência desejada, insira uma linha no arquivo /etc/crontab que execute o comando "squid -k rotate". O exemplo abaixo faz com que a rotação seja feita todo sábado às 23h58min:
Crie um script de inicialização para o Squid, em /usr/local/etc/rc.d/squid.sh. Os comandos de inicialização e shutdown deverão ser, respectivamente: