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.