Guia de Consulta Rápida
Squid
Welber Amaro Santos de Souza
Cláudio José Pinto
Dalva de Souza Barbosa
Novatec
Copyright  2007 da Novatec Editora Ltda.
Todos os direitos reservados e protegidos pela Lei 9.610 de
19/02/1998. É proibida a reprodução desta obra, mesmo
parcial, por qualquer processo, sem prévia autorização,
por escrito, do autor e da Editora.
Editor: Rubens Prates
ISBN: 978-85-7522-107-5
Primeira impressão: Janeiro/2007
Novatec Editora Ltda.
Rua Luís Antônio dos Santos 110
02460-000 São Paulo SP – Brasil
Tel.: +55 11 6959-6529
Fax: +55 11 6950-8869
E-mail: [email protected]
Site: www.novatec.com.br
Sumário
Introdução............................................................................... 5
O que é proxy....................................................................... 5
Sobre o Squid........................................................................ 5
Aplicação.............................................................................. 5
Versão atual do Squid............................................................ 5
Ferramentas administrativas.................................................. 6
Requisitos............................................................................. 6
Instalação................................................................................ 6
Download ............................................................................ 6
Instalando .deb..................................................................... 6
Instalando RPM.................................................................... 6
Instalando .tar.gz................................................................... 7
Opções do ./configure........................................................... 7
Opções de linha de comando.................................................. 16
Opções de rede.......................................................................18
Opções com efeitos no algoritmo de seleção de caches “vizinhos”.. 25
Opções que afetam o tamanho do cache................................. 33
Parâmetros administrativos.................................................... 37
Arquivos de log e diretórios de cache...................................... 39
Opções para suporte a programas externos............................. 46
Opções para ajuste do cache................................................... 58
Timeouts............................................................................... 64
Controles de acesso................................................................ 68
Opções para o serviço de registro de cache.............................. 86
Miscelânea............................................................................. 87
Parâmetros para atraso de requisição.....................................102
Opções httpd_accelerator...................................................... 117
Índice remissivo.................................................................... 118
Introdução
Introdução
O que é proxy
É um sistema que controla as solicitações efetuadas pelo cliente
(por meio de um navegador, por exemplo) a um servidor e, de
acordo com as opções, disponibiliza ou não as informações
solicitadas, caracterizando-se assim como um tipo de firewall.
Pode também oferecer outros serviços, tais como cache de
conteúdo, cluster, antivírus etc.
Sobre o Squid
O Squid é o proxy, sob licença GPL, mais conhecido no mercado.
O Squid surgiu como uma ótima opção de proxy para a
plataforma Linux, sendo vantajoso não somente pela isenção
de custos de licença, mas principalmente pela robustez, rápida
evolução, estabilidade e segurança. O Squid é disponibilizado
sob a licença GPL, ou seja, pode ser utilizado para qualquer
propósito, o código-fonte pode ser estudado e/ou aperfeiçoado
e distribuído livremente.
O Squid, assim como outros proxies, tem como característica
operações de filtro, logs de acesso, tradução de endereços (NAT) e
implementação de mecanismo de autenticação.
O Squid é um aplicativo de rede que atua na camada 7 do
modelo OSI como proxy para um ou mais serviços, podendo ser
utilizado com os serviços: TELNET, FTP, SMTP, DNS, HTTP e
outros, colocando-o como um tipo de firewall.
Suporta os protocolos FTP, HTTP, SSL, WAIS e Gopher.
Também suporta protocolos internos e de administração, tais como
ICP, Cache Digest, HTCP e SNMP.
Aplicação
O Squid é ideal para filtrar os conteúdos de mensagens de e-mail e
http, fazendo análise dos seguintes tipos de conteúdo suspeito:
• Componentes Java Applet.
• Scripts das mensagens recebidas.
• Conteúdos de tipos específicos MIME.
• Análise e remoção de vírus.
• Comandos específicos dos serviços.
• Mensagens contendo seqüências específicas de caracteres.
Versão atual do Squid
A versão estável atual do Squid (até Novembro/2006) é a squid2.6.STABLE5. Recomenda-se a instalação da última versão
estável para garantir maior segurança e aplicação de possíveis
correções.
Introdução
Ferramentas administrativas
Existem atualmente diversas ferramentas comerciais ou não,
que facilitam a administração do Squid, além de projetos em
andamento. A ferramenta open source mais conhecida é o
Webmin (http://www.webmin.com). Para acesso aos logs via
Web, pode-se utilizar o Sarg (http://sarg.sourceforge.net/). Além
da possibilidade de se trabalhar com outras ferramentas que
podem, em conjunto com o Squid, oferecer uma solução de
antivírus, como exemplo podemos citar o Squid-Clamav e o
Viralator (http://viralator.sourceforge.net).
Requisitos
O manual do Squid recomenda 124Mbytes de memória RAM
disponível (além da utilizada pelo sistema), quando utilizado
com controle de banda (delay pools). Como cache, será necessário
dimensionar o espaço em disco de acordo com as necessidades,
determinadas de acordo com o volume do tráfego e dos dados
a serem gravados no cache. Como proxy transparente, será
necessário configurações adicionais de firewall, bem como
preparação do kernel (Linux).
Instalação
Download
O pacote do Squid pode ser obtido no site http://www.squidcache.org. O Squid está disponível para as plataformas Linux,
FreeBSD, NetBSD, OpenBSD, BSDI, MAC OS/X, SUN, SCO Unix,
OS/2, HP-UX, Microsoft e outras. A seguir a forma de instalação
nas mais populares plataformas do mercado.
Instalando .deb
O Linux Debian (.deb) utiliza pacotes de uma maneira parecida
com que o Red Hat utiliza os RPMs. Os pacotes do Debian são
instalados com o comando dkpg -i ou apt-get install seguidos
do nome do pacote.
apt-get install squid
Instalando RPM
Originalmente desenvolvido pela Red Hat, os arquivos RPM
(Red Hat Package Manager) são distribuídos em formato binário,
pré-compilados ou como RPMs-fonte. Para instalar um RPM
é utilizado o comando rpm -ivh seguido do nome do pacote.
O RPM, como gerenciador de pacotes, oferece outras opções
obtidas por meio do comando rpm –help. Passos:
1. Faça download da versão do Squid disponível para sua
distribuição.
2. Instale com o comando rpm -ivh squid-*
Instalação
Instalando .tar.gz
Um pacote-fonte é um grupo de arquivos e diretórios que na
maioria das vezes precisam ser compilados. Geralmente vêm
acompanhados de um arquivo especial chamado Makefile, que
contém instruções que dizem ao código-fonte onde se encontram
as bibliotecas auxiliares para o aplicativo a ser instalado. Estes
pacotes vêm empacotados e compactados com aplicações como
tar e gzip, respectivamente.
Antes de instalar um pacote-fonte é necessário desempacotálos e descompactá-lo com os aplicativos tar e gzip. Os pacotes são
compilados com a seqüência de comandos: make e make install.
# groupadd squid
# useradd -g squid -s /dev/null squid >/dev/null 2>&1
$ wget http://www.squid-cache.org/Versions/v2/2.6/squid2.6.STABLE5.tar.gz
$ tar zxvf squid-2.6.STABLE5.tar.gz
$ cd squid-2.6.STABLE5
$ ./configure
# make
# make install
Opções do ./configure
O comando configure, desenvolvido em script shell, é utilizado
para definir as opções de compilação do Squid, para que a
compilação do Squid se adapte a vários tipos de sistemas. A
sintaxe (entre colchetes é opcional) do comando é:
./configure [opção]... [VARIÁVEL=valor]...
Sua forma mais comum de uso é:
./configure [opção]
Para definir variáveis de ambiente a serem utilizadas
pelo compilador (como CC , CFLAGS etc.), especifique-as como
VARIÁVEL=valor.
Configuração
-h, --help
Mostra a ajuda e sai.
Mostra opções específicas para o pacote.
--help=recursive
Mostra a ajuda breve de todos os pacotes
incluídos.
-V, --version
Mostra informação da versão e sai.
-q, --quiet, --silent Não imprime a mensagem “checking...”.
--cache-file=ARQUIVO Gera arquivo com resultado dos testes
de configuração da compilação.
-C, --config-cache Nome alternativo para a opção
‑‑cache‑file=config.cache.
-n, --no-create
Não cria arquivos de saída.
--srcdir=Fonte
Define diretório do fonte do Squid.
--help=short
Instalação
Diretórios de instalação
--prefix=PREFIXO
PREFIXO de instalação da estrutura
de diretórios do Squid (default=/usr/
local/squid).
--exec-prefix=PREFIXOPREFIXO da instalação dos executáveis do Squid (default=PREFIXO/bin,
PREFIXO/lib).
Ajuste fino dos diretórios de instalação
--bindir=DIR
Executáveis do usuário (PREFIXO/bin).
Executáveis do administrador (PREFIXO/
sbin).
--libexecdir=DIR
Local do libexec (PREFIXO/libexec).
--datadir=DIR
Local dos dados compar tilhados
(PREFIXO/share).
--sysconfdir=DIR
Local dos arquivos de configuração
(PREFIXO/etc).
--sharedstatedir=DIR Diretório de arquivos modificáveis,
independente de arquitetura (PREFIXO/
com).
--localstatedir=DIR Diretório de dados variáveis (PREFIXO/
var).
--libdir=DIR
Diretório de bibliotecas de código-objeto
(PREFIXO/lib).
--includedir=DIR
Diretório de arquivos de cabeçalhos C
(PREFIXO/include).
--oldincludedir=DIR Diretório de arquivos de cabeçalhos C
para não-gcc (/usr/include).
--infodir=DIR
Diretór io de documentação info
(PREFIXO/info).
--mandir=DIR
Diretório de documentação man
(PREFIXO/man).
--sbindir=DIR
Nomes de programas
--program-prefix=PREFIXO
Prefixo para nomes de programas
instalados.
--program-suffix=SUFIXO Acrescenta SUFIXO aos nomes de
programas instalados.
--program-transform-name=PROGRAMA
Executa sed PROGRAMA nos nomes de
programas instalados.
Tipos de sistemas
--build=Sistema
--host=ARQUITETURA
Define o tipo de sistema. Se não for
definido, tentará detectá-lo.
Define a arquitetura da máquina, ou
seja, i386, i486, i586, i686 etc.
Características opcionais
--disable-ATRIBUTO
Não inclui determinado atributo (o
mesmo que ‑‑enable‑ATRIBUTO=no).
Instalação
--enable-ATRIBUTO[=ARGUMENTO]
Habilita um determinado atributo.
--enable-maintainer-mode
Habilita a criação de regras e dependências que não são úteis (e em alguns casos
confusas) para uma instalação casual.
--disable-dependency-tracking
Desabilita a pesquisa de dependências,
aumentando a velocidade de criação
do arquivo binário pelo compilador.
--enable-dependency-tracking
Habilita a pesquisa de dependências,
ficando mais lenta a construção do
arquivo de compilação.
--enable-shared[=PKGS]C ria bibliotecas compartilhadas
[default=no].
--enable-static[=PKGS]C r i a b i b l i o t e c a s e s t á t i c a s
[default=yes].
--enable-fast-install[=PKGS]
Otimização para uma instalação
rápida.
--disable-libtool-lockEvita travamento durante a compilação (pode parar compilações
paralelas).
--enable-dlmalloc=LIB Compila e utiliza o pacote malloc de
Doug Lea.
--enable-gnuregex
Compila com suporte à biblioteca
GNUregex. Somente utilizada se
durante a execução do ./configure
for requerido que acrescente em sua
linha de comando esta opção. Essa biblioteca normalmente só é requerida
no Windows e no Unix muito antigos
que não possuem a biblioteca regex
embutida do sistema.
--disable-optimizations
Não compila o Squid com otimizadores
de compilação habilitados,ou seja,será
compilado com as opções e símbolos
de depuração do código-fonte, utilizado pelo programador para facilitar a
localização de erros de programação.
A otimização se aplica somente na fase
de produção, ou seja, quando o Squid
vai realmente ser utilizado na prática
e não em testes e em depurações do
código. Mas, durante o desenvolvimento e depuração, utilize esta opção
para reduzir o tempo de compilação
e habilitar facilmente o debugging.
Implica no uso de --disable-inline.
10
Instalação
--disable-inline
Não compila métodos triviais para
serem utilizados na linha de comando.
O Squid é codificado de maneira que
a maioria de seu código seja capaz de
ser utilizado na linha de comando,
ou seja, pode-se iniciar o Squid e
definir parâmetros que normalmente
ficariam dentro do squid.conf. Para
uso em produção esse procedimento
é recomendado, mas em desenvolvimento utilize ‑‑disable‑inline
para reduzir o tempo de compilação
e habilitar a velocidade de criação
(make). Em produção, ou testes de
carga, utilize ‑‑enable‑inline para
compilar o Squid com os métodos
triviais em linha de comando.
--enable-debug-cbdata Provê algumas informações de debug
em cbdata.
--enable-xmalloc-statistics
Exibe estatísticas malloc em uma
página de status.
--disable-carp
Desabilita o suporte a CARP.
--enable-async-io=N_THREADS
A t a l h o p a r a a s o p ç õ e s :.
--with-aufs-threads=N_THREADS ,.
--with-pthreads,--enable-storeio
= ufs,aufs.
--enable-storeio=”lista de módulos”
Compila com suporte à lista de
módulos de “store I/O”. O padrão
é compilar apenas o módulo “ufs”.
Ver diretório src/fs para a lista de
módulos disponíveis para obter informações sobre como criar módulos de
“store” personalizados.
--enable-disk-io=”lista de módulos”
Compila com suporte à lista de módulos “disk I/O”. O padrão é compilar
apenas o módulo “Blocking”. Ver
diretório src/DiskIO para a lista de
módulos disponíveis para obter informações sobre como criar módulos de
“disk” personalizados.
--enable-removal-policies=”lista de políticas”
--enable-icmp
Compila com suporte à lista de “políticas de remoção” dos objetos do
cache. O padrão é compilar apenas o
módulo “lru”. Ver diretório src/repl
para a lista de módulos disponíveis
para obter informações sobre como
criar políticas personalizados.
Habilita “ICMP pinging”.
Instalação
11
--enable-delay-pools
Habilita “delay pools” para limitar o
uso da largura de banda.
--enable-esi
Habilita ESI para aceleradores. Requer
libexpat. Habilitando ESI fará com
que o Squid siga o “Edge Acceleration Specification” (http://www.esi.
org). Isto irá fazer com que o Squid
ignore os cabeçalhos de controle de
cache dos clientes. Utilizar esta opção
somente em um Squid configurado
para ser um acelerador web.
--enable-useragent-log Habilita o log do cabeçalho UserAgent.
--enable-referer-log Habilita o log do cabeçalho
Referer.
--disable-wccp
Desabilita o “Web Cache Coordination Protocol”.
--enable-kill-parent-hack
“Mata” o processo parent durante o
shutdown.
--enable-snmp
Habilita monitoramento via SNMP.
--enable-cachemgr-hostname=host
Compila cachemgr.cgi como padrão
para um determinado host.
--enable-arp-acl
Habilita o uso da ACLARP (endereço
MAC).
--enable-htcp
Habilita o protocolo HTCP.
--enable-ssl
Habilita repassagem SSL utilizando
OpenSSL.
--enable-forw-via-db Habilita banco de dados Forw/Via.
--enable-cache-digestsUtiliza “Cache Digests”. Consulte
também o site: www.squid-cache.
org/FAQ/FAQ-16.html.
--enable-default-err-language=idioma
Seleciona o idioma default para
páginas de erro (Consulte PREFIXO/
share/errors/).
--enable-err-languages=idioma1 idioma2 ...
Seleciona os idiomas a serem
instalados para página de erro
(default=todos).
--enable-poll
Habilita suporte a poll().
--disable-poll
Desabilita suporte a poll().
--enable-select
Habilita suporte a select().
--disable-select
Desabilita suporte a select().
--enable-kqueue
Habilita suporte a kqueue().
--disable-kqueue
Desabilita suporte a kqueue().
--enable-epoll
Habilita suporte a epoll().
--disable-epoll
Desabilita suporte a epoll().
12
Instalação
--disable-http-violations
Permite remover o código que reconhecidamente viole as especificações
do protocolo HTTP.
--enable-ipf-transparentHabilita proxy transparente usando
redirecionamento de endereço de rede
do IP-Filter.
--enable-pf-transparentHabilita proxy transparente usando
redirecionamento de endereço de rede
do PF.
--enable-linux-netfilterHabilita proxy transparente suportado
pelo sistema Linux (Netfilter).
--enable-large-cache-files
Habilita suporte a grandes arquivos
(>2GB).
--enable-leakfinder
Habilita a procura de“falha”no código.
Para o funcionamento desta opção, é
necessário modificar o código-fonte.
--disable-ident-lookupsHabilita a remoção de código que
executa lookups ident (RFC 931).
--disable-internal-dns Previne que o Squid envie e receba requisições DNS diretamente, e habilita
os processos ‘dnsservers’ antigos.
--enable-truncate
Faz com que o Squid utilize
truncate() em vez de unlink() quando estiver removendo arquivos do
cache. Truncate fornece um pequeno
aumento de performance, mas pode
causar problemas quando utilizado
com “async I/O” e utiliza mais inodes
que unlink.
--enable-hostname-checks Rejeita qualquer nome de host que
possua caracteres estranhos em seu
nome, obedecendo as regras padrão
da internet para nomes de máquina.
Padrão em versões mais antigas do
Squid, a partir da versão 3 não tentará
policiar o uso de DNS.
--enable-underscores Por padrão o Squid rejeita qualquer
nome de host que contenha o caractere “_” (sublinhado) para se adequar
às regras padrão da internet. Se
discordar desta regra, pode habilitar
“_” no nome do host utilizando esta
opção fornecida pela biblioteca do
resolvedor de nomes onde o Squid
está sendo executado.
--enable-default-hostsfile=path
Define a localização padrão do arquivo
hosts. Consulte a diretiva hosts_file
no arquivo squid.conf para maiores
detalhes.
13
Instalação
--enable-auth=”lista de módulos de autenticação”
Compila o Squid com suporte a uma
lista de autenticações. O padrão é
compilar com suporte apenas a autenticação Basic. Consulte o diretório
src/auth do fonte do Squid para obter
a lista de métodos de autenticação
disponíveis.
--enable-basic-auth-helpers=”lista de helpers”
Seleciona qual lista de helpers para
autenticação Basic será compilada
e instalada como parte do processo
normal de compilação do Squid. Consulte o diretório helpers/basic_auth
do fonte do Squid para a lista de
helpers disponíveis.
--enable-ntlm-auth-helpers=”lista de helpers”
Seleciona qual lista de helpers para
autenticação ntlm será compilada e
instalada na compilação do Squid.
Consulte o diretório helpers/ntlm_
auth do fonte do Squid para a lista
de helpers disponíveis.
--enable-digest-auth-helpers=”lista de helpers”
Seleciona qual lista de helpers para
autenticação digest será compilada
e instalada na compilação do Squid.
Consulte o diretório h e l p e r s /
digest_auth do fonte do Squid
para a lista de helpers disponíveis.
Habilita “falha de abertura” para
autenticação NTLM quando houver
falha em pelo menos um dos passos
de autenticação que habilita o Squid
a autenticar o usuário.
--enable-external-acl-helpers=”lista de helpers”
Seleciona qual lista de helpers para
autenticação externa será compilada
e instalada na compilação do Squid.
Consulte o diretório h e l p e r s /
--enable-ntlm-fail-open
external_acl do fonte do Squid
para a lista de helpers disponíveis.
Desabilita memPools. Determina o
estado padrão de memPools. Classes
específicas sobrescrevem esta opção
em tempo de execução do Squid, e
somente o arquivo lib/MemPool.c
precisa ser alterado para modificar o
status padrão para todas as classes.
--enable-win32-service Compila o Squid como um serviço
WIN32. Disponível somente para
Windows NT e Windows 2000.
--disable-unlinkd
Não utiliza unlinkd.
--disable-mempools
14
Instalação
--enable-stacktraces
Habilita chamadas automáticas em
erros fatais.
--enable-cpu-profiling Permite que seja visto quais funções
internas do Squid estão consumindo
tempo de processamento. É necessário
modificar o código-fonte para adicionar novas sondagens. Esta opção
é para desenvolvedores, para que
possam medir a performance das
otimizações das funções internas do
Squid. Consulte lib/Profiler.c para
mais informações.
--enable-x-accelerator-vary
Habilita suporte ao cabeçalho HTTP
X-Accelerator-Vary. Que pode ser
utilizado para indicar a variação
em uma configuração de acelerador.
Utilizada em conjunto com outro código que adiciona cabeçalhos HTTP
personalizados para as requisições.
Pacotes opcionais
--with-PACKAGE[=Argumento]
Utilizar pacote, o Argumento é opcional.
--without-PACKAGE
Não utilizar pacote (igual a opção
‑‑with‑PACKAGE=no).
--with-valgrind-debug Inclui instrumentos de debug para ser
utilizado pelo depurador valgrind.
--with-aufs-threads=THREADS
Ajusta o número de threads (processos simultâneos) para gravação de
objetos do “aufs”.
--with-pthreads
Utilizar threads POSIX.
--with-aio
Utilizar POSIX AIO.
--with-dl
Utilizar lincagem dinâmica.
--with-openssl=prefixo Compila o Squid utilizando as bibliotecas do OpenSSL. O caminho para
as bibliotecas de desenvolvimento do
OpenSSL e cabeçalhos de instalação
pode ser especificado fora dos diretórios padrão.
--with-coss-membuf-size Tamanho de COSS membuf [default=1048576 bytes].
--with-large-files
Habilita suporte a arquivos grandes
(logs etc).
--with-build-environment=ambiente
--with-maxfd=Número
Define o ambiente de configuração.
Define o número máximo de
descriptors.
15
Instalação
Arquivos e diretórios do Squid
A estrutura de arquivos e diretórios do Squid dependerá
dos parâmetros definidos durante a fase de configuração da
compilação (./configure). Nos pacotes pré-compilados (rpm,
tgz e deb), os locais dos diretórios já foram predefinidos.
Arquivo/diretório
sbin
Descrição
Diretório de programas normalmente
executados pelo root.
sbin/squid
Executável para inicialização do
Squid.
bin
Diretório de programas que podem ser
executados por todos os usuários.
bin/RunCache
Executável para teste do cache.
bin/RunAccel
Executável para teste de proxy transparente.
bin/squidclient
Executável para teste de cliente do
Squid.
libexec
Diretório com executáveis auxiliares
do Squid.
libexec/unlinkd
Executável para apagar arquivos do
cache.
libexec/cachemgr.cgi CGI para fornecer informações sobre
o cache.
libexec/diskd
Executável para gravação de cache
ufs (opcional).
libexec/pinger
Executável para envio de pacote
ICMP.
etc
Diretório dos arquivos de configuração.
etc/squid.conf
Arquivo de configuração.
etc/squid.conf.default Arquivo-padrão de configuração.
etc/mime.conf
Arquivo com os tipos MIME do
Squid.
etc/mime.conf.default Arquivo-padrão de tipos MIME.
share
Diretório de arquivos compartilhados.
share/mib.txt
Arquivo de definições para acesso de
informações via SNMP.
share/icons
Diretórios com imagens de tipos
MIME.
share/error
Diretório dos idiomas das mensagens
de erro.
var
Diretório de dados variáveis (logs,
cache etc.).
var/logs
Diretório de logs.
var/cache
Diretório de cache.
Download

Guia de Consulta Rápida Welber Amaro Santos de Souza Cláudio