Вы находитесь на странице: 1из 44

Este artigo é um resumo de "TCC Projeto Squid", pela qual juntamente com mais dois

grandes amigos, Cristiano e Gilberto, obtivemos o título de Bacharel em Ciência da


Computação. Portanto espero que possa ajudar os demais amigos, seja como material
de pesquisa ou idéias para possíveis soluções pertinentes ao proxy Squid.
Resumo
Este trabalho apresenta um estudo a respeito dos servidores Proxy e do desempenho do Squid, um
servidor Proxy Livre, que possui características que o tornam um dos melhores. É feito um detalhamento
a respeito de sua implementação e como ele é usado como servidor de Proxy e sistemas para esta
finalidade.

Apesar das operações do mesmo (contém um problema em específico que é o seu desempenho no
recebimento de um número elevado de requisições), este é o objetivo deste trabalho, onde apresentamos
soluções para a resolução desta deficiência.
Sumário
1. Introdução
2. Objetivo
3. Estrutura
4. Proxy
o Origem do Proxy
o Tipos de Proxy
o Squid
o Delegate
o Oops
o Dansguardian
o Principais Características dos Proxy
o Proxy Transparente
o Proxy Controlado
o Proxy Transparente X Proxy Controlado
o Vantagens do Proxy Transparente
o Desvantagens do Proxy Transparente
o Vantagens do Proxy Controlado
o Desvantagens do Proxy Controlado
o Arquitetura do Proxy
o Cache
o Autenticação
o Listas de controles de acesso
o Proxy para SSL

5. Squid
o Características do Proxy Squid
o Restrições de acesso
o Arquivo de configuração
o Função do Proxy Squid
o Progresso do Squid
o Tipos de protocolos
o Proxy transparente no Squid
o Listas de controle de acesso
o Squid como servidor
o Estrutura de Hardware
o Tags
o Referências de conexão
o Vantagens

6. Conhecendo algumas soluções


o Configuração
o HDparm
o Banco de Dados
o Alteração do Código fonte
o Compilação do Kernel

7. Aplicando a solução escolhida


o A escolha
o Desenvolvendo a solução
o Detalhamento do processo
o Introdução ao Perl
o Características do Perl
o Introdução ao PostgreSQL
o Outras soluções aplicadas
o HDparm
o Kernel

8. Conclusão
9. Lista de anexos
10. Referências
Lista de siglas e abreviaturas

ACL (Access Control List ou Lista de Controle de Acesso): definida pela área de ciência da computação
como uma lista que define quem tem permissão de acesso a certos serviços. Isso é para quem um servidor
deve permitir ou negar determinada tarefa. É normalmente uma lista de princípios com os tipos de acesso
definido para cada usuário ou grupo.

ADSL (Asymmetric Digital Subscriber Line): é um formato de DSL, uma tecnologia de comunicação de
dados que permite uma transmissão de dados mais rápida através de linhas de telefone do que um modem
convencional pode oferecer.

Backbone: No contexto de redes de computadores, o backbone (traduzindo para português, espinha


dorsal) designa o esquema de ligações centrais de um sistema mais amplo, tipicamente de elevado débito
(velocidade, no português do Brasil) relativamente à periferia.

Backup: Refere-se à cópia de dados de um dispositivo para o outro com o objetivo de posteriormente os
recuperar (os dados), caso haja algum problema.

Browser: (também conhecido como web browser) é um programa que habilita seus usuários a interagirem
com documentos HTML hospedados em um servidor Web.

Cache: É um dispositivo de acesso rápido, interno a um sistema, que serve de intermediário entre um
operador de um processo e o dispositivo de armazenamento ao qual esse operador acede. A vantagem
principal na utilização de uma cache consiste em evitar o acesso ao dispositivo de armazenamento - que
pode ser demorado - e que vale a pena armazenar as informações procuradas em meio mais rápido.

CGI (Common Gateway Interface): Consiste numa importante tecnologia que permite gerar páginas
dinâmicas permitindo a um navegador passar parâmetros para um programa alojado num servidor web.

Dial-up: É um tipo de acesso à Internet no qual uma pessoa usa um modem e uma linha telefônica para se
ligar a um nó de uma rede de computadores do ISP. A partir desse momento, o ISP encarrega-se de fazer
o routing para a Internet.

DNS (Domain Name System - Sistema de Nomes de Domínios): É um sistema de gerenciamento de


nomes hierárquico.

Ethernet: É uma tecnologia de interconexão para redes locais - Local Area Networks (LAN) - baseada no
envio de pacotes. Ela define cabeamento e sinais elétricos para a camada física, e formato de pacotes e
protocolos para a camada de controle de acesso ao meio (Media Access Control - MAC) do modelo OSI.
A Ethernet foi padronizada pelo IEEE como 802.3. A partir dos anos 90, ela vem sendo a tecnologia de
LAN mais amplamente utilizada e tem tomado grande parte do espaço de outros padrões de rede como
Token Ring, FDDI e ARCNET.

Expressão regular: Um padrão a ser usado para procurar ou substituir palavras ou grupos de palavras. É
um meio preciso de se fazer buscas de determinadas porções de texto.

Firewall: É o nome dado ao dispositivo de rede que tem por função regular o tráfego de rede entre redes
distintas e impedir a transmissão de dados nocivos ou não autorizados de uma rede a outra. Dentro deste
conceito incluem-se, geralmente, os filtros de pacotes e Proxy de protocolos.

FTP (File Transfer Protocol - Protocolo de Transferência de Arquivos): É uma forma bastante rápida e
versátil de transferir arquivos, sendo uma das mais usadas na internet.

Gateway: É uma máquina intermediária geralmente destinada a interligar redes, separar domínios de
colisão, ou mesmo traduzir protocolos. Exemplos de gateway podem ser os routers (ou roteadores) e
firewalls, já que ambos servem de intermediários entre o utilizador e a rede. Um Proxy também pode ser
interpretado como um gateway (embora em outro nível, aquele da camada em que opera), já que serve de
intermediário também.

Gopher: É um protocolo de redes de computadores que foi desenhado para indexar repositórios de
documentos na Internet.

Host: É qualquer máquina ou computador conectado a uma rede. Os hosts variam de computadores
pessoais a supercomputadores, dentre outros equipamentos, como roteadores.

HTML (HyperText Markup Language - Linguagem de Formatação de Hipertexto): Trata-se de uma


linguagem de marcação utilizada para produzir páginas na Internet. De modo geral são documentos de
texto escritos em códigos que podem ser interpretados pelos browsers para exibir as páginas da World
Wide Web.
HTTP (HyperText Transfer Protocol - Protocolo de Transferência de Hipertexto): É um protocolo da
camada de "Aplicação" do modelo OSI, utilizado para transferência de dados na World Wide Web. Esse é
o protocolo da World Wide Web (www). O mesmo transfere dados de hiper-midia (imagens, sons e
textos). Algumas de suas características são: geralmente este protocolo, utiliza a porta 80 e é usado para a
comunicação de "sites".

ICP (Infra-estrutura de Chaves Públicas): Uma Infra-Estrutura de Chaves Públicas é um órgão ou


inciativa pública ou privada para a organização de uma estrutura de emissão de chaves públicas,
baseando-se no princípio da terceira parte confiável, oferecendo uma mediação de acreditação e confiança
em transações entre partes que utilizam certificados digitais, bem como se responsabilizando pela emissão
de tais certificados, assumindo-se então como a parte confiável destas transações. A infra-estrutura de
chaves públicas do Brasil é a Infra-Estrutura de Chaves Públicas Brasileira, ou ICP-Brasil.

ICQ: É um programa de comunicação instantânea pela Internet que foi o mais popular durante anos.

IMAP (Internet Message Access Protocol): É um protocolo de gerenciamento de correio eletrônico


superior em recursos ao POP3 - protocolo que a maioria dos provedores oferece aos seus assinantes. A
última versão é o IMAP4. O mais interessante é que as mensagens ficam armazenadas no servidor e o
internauta pode ter acesso a suas pastas e mensagens em qualquer computador.

IP (Internet Protocol - Protocolo de Internet): É um protocolo usado entre duas máquinas em rede para
encaminhamento dos dados.

ISP (Internet Service Provider): Oferece principalmente serviço de acesso à internet, agregando a ele
outros serviços relacionados, tais como "e-mail", "hospedagem de sites" ou blogs, entre outros.

Kernel: É entendido como o núcleo do Sistema Operacional ou, numa tradução literal, cerne. Ele
representa a camada mais baixa de interface com o Hardware, sendo responsável por gerenciar os
recursos do sistema computacional como um todo. É no kernel que estão definidas funções para operação
com periféricos (mouse, discos, impressoras, interface serial/interface paralela), gerenciamento de
memória, entre outros. Resumidamente, o kernel é um conjunto de programas que fornece para os
programas de usuário (aplicativos) uma interface para utilizar os recursos do sistema.

Link: É uma referência num documento em hipertexto a outro documento ou a outro recurso.
Login: É um conjunto de caracteres solicitado para os usuários que por algum motivo necessitam acessar
algum sistema computacional. Geralmente os sistemas computacionais solicitam um login e uma senha
para a liberação do acesso.

Logs: É o termo utilizado para descrever o processo de registro de eventos relevantes num sistema
computacional.

MIME (Multipurpose Internet Mail Extensions): É uma norma da Internet para o formato das mensagens
de correio eletrônico.

NAT (Network Address Translation): Também conhecido como masquerading é uma técnica que consiste
em reescrever os endereços IP de origem de um pacote que passam sobre um router ou firewall de
maneira que um computador de uma rede interna tenha acesso ao exterior (rede pública).

NFS (Network File System): É um modelo de sistema de arquivos, que tem como função centralizar
arquivos em um servidor, formando assim um diretório virtual. NNTP (Network News Transfer
Protocol): É um protocolo da internet para grupos de discussão da chamada usenet.

OSI (Open Systems Interconnection): É um conjunto de padrões ISO relativo à comunicação de dados.

POP (Post Office Protocol (POP3)): É um protocolo utilizado no acesso remoto a uma caixa de correio
eletrônico.

RAID (Redundant Array of Independent Disks - Conjunto Redundante de Discos): É um meio de se criar
uma unidade virtual composta por vários discos individuais, com a finalidade de duplicação (redundância,
recuperação de falhas) ou balanceamento (operações I/O em paralelo).

SCSI (Small Computer System Interface): A tecnologia SCSI foi criada para acelerar a taxa de
transferência de dados entre dispositivos de um computador, desde que tais periféricos sejam compatíveis
com o padrão.

SMTP (Simple Mail Transfer Protocol): É o padrão de fato para envio de e-mail através da Internet.

SSL (Secure Sockets Layer): É um protocolo criptográfico que provêem comunicação segura na Internet
para coisas como e-mail, navegação por páginas, e outros tipos de transferência de dados.

Tag: São estruturas de linguagem de marcação que consistem em breves instruções, tendo uma marca de
início e outra de fim.

TCP (Transmission Control Protocol): É um dos protocolos sob os quais assenta o núcleo da Internet nos
dias de hoje. A versatilidade e robustez deste protocolo tornou-o adequado para redes globais, já que este
verifica se os dados são enviados de forma correta, na seqüência apropriada e sem erros, pela rede.

Telnet: É um protocolo cliente-servidor de comunicações usado para permitir a comunicação entre


computadores ligados numa rede, baseado em TCP.

TTL (Time to Live): Significa o número de máquinas que os pacotes podem demorar numa rede de
computadores antes de serem descartados (máx. 255). UDP: Dá às aplicações acesso direto ao serviço de
entrega de datagramas, como o serviço de entrega que o IP dá.

URL (Universal Resource Locator - Localizador Universal de Recursos): É o endereço de um recurso,


disponível em uma rede; seja a Internet, ou uma rede corporativa, uma intranet.

WEB: É uma rede de computadores na Internet que fornece informação em forma de hipertexto.

Introdução

A popularização da Web1 tem provocado sérios problemas de desempenho nos acessos à Internet, de
forma que a redução do tempo tem se tornado um fator extremamente relevante. O número de usuários
que se conectam na rede cresce de forma acentuada.

O tempo para se recuperar um documento Web depende de determinados fatores (tipo de conexão,
tamanho do documento, localização do mesmo). Para minimizar as conseqüências deste crescimento,
alguns métodos podem ser adotados como a utilização de um servidor mais rápido, alteração dos meios
físicos (cabos, roteadores, switches, etc) de forma que se aumente a banda. Contudo, isto além de não ser
economicamente viável, pode não resolver o problema, uma vez que são numerosos os fatores que
envolvem uma única transação Web. Alternativas como o cache de páginas Web, espelhamento de
arquivos entre outros têm sido aplicados para resolver determinadas situações inerentes à rede.
O procedimento de implantação de um sistema de cache de navegação que armazene localmente objetos
como páginas HTML2 (HyperText Markup Language), imagens e arquivos da Internet, podem melhorar a
qualidade do serviço fornecido aos usuários. Os servidores de Proxy ajudam a diminuir de forma
significativa o tempo médio de acesso a páginas e a transferência de arquivos, porque muitos deles
(páginas Web, arquivos, fotos, etc) são requisitados mais de uma vez, entretanto, exceto na primeira vez
estas requisições são feitas remotamente, ou seja, as páginas são carregadas direto do servidor que estão
hospedadas, caso contrário às requisições são atendidas de forma local.

1Web: Rede de computadores na Internet que fornece informação em forma de hipertexto.

2HTML: É um dispositivo de acesso rápido, interno a um sistema, que serve de intermediário entre um
operador de um processo e o dispositivo de armazenamento.

De uma forma geral os visualizadores de páginas Web conhecidos como browsers fazem conexão direta
com os servidores remotos. Entretanto, eles podem ser configurados para se conectar a um servidor
Proxy.

Assim, quando um usuário requisitar uma página, o browser primeiramente verifica seu cache local. Se a
página URL1 não é encontrada, ele a requisita para o servidor Proxy local. Se este tem a cópia e ela não
expirou, ele a retorna imediatamente, caracterizando desta forma o conceito de cache hit. Caso esta não
esteja no cache, ele entrará em contato com o servidor remoto e fará a transferência, mantendo uma cópia
opcional em seu cache e enviando uma cópia para a máquina do usuário, neste caso, haverá o que
chamamos de conceito cache miss.

Uma das funções do Proxy é denominada de Filtro. Este filtro é usado para permitir ou negar o acesso à
Internet ou a determinados sites, ou seja, controle de conteúdo. Administradores podem criar regras
conforme suas políticas de segurança para filtrar requisições baseadas no endereço IP2 (Internet Protocol)
do cliente, domínios, redes e URL do objeto requisitado, bloqueando assim requisições consideradas
impróprias a política adotada. Tais funcionalidades são usadas principalmente em escolas e em
organizações que utilizam o critério de permissão para o acesso a páginas que realmente sejam de seu
interesse. O filtro podem conter regras simples baseados em uma lista de páginas Web, bem como conter
regras mais complexas.
1URL: É o endereço de um recurso, disponível em uma rede; seja a Internet, ou uma rede corporativa ou
uma intranet.

2IP: É um protocolo usado entre duas máquinas em rede para encaminhamento dos dados.

Objetivo

O objetivo deste trabalho é a implementação e a otimização do Proxy Squid que apesar de funcionar de
uma forma completa e atender determinadas necessidades apresenta um fator relevante, que é o seu
desempenho quanto ao processamento de requisições ACL1 (Access Control List).

O seu desempenho se torna crítico quando a quantidade de usuários conectados ao Proxy é grande e ao
carregar uma black-list muito grande que leva ele a travar, a partir desta quantidade ele passa a consumir
um valor considerável de memória, e para compensar tal situação, é necessário disponibilizar um
computador mais potente o que acaba onerando os custos significativamente, pois a cada demanda de
processos é necessário ajustar o hardware.

O Squid possui esta deficiência, o que estamos propondo é minimizar esta situação aplicando soluções
que são a melhora do programa do Squid como um front-end ideal para a solução e também melhorando a
entrada e saída do disco rígido, e aplicando uma configuração ideal para o hardware diretamente no
kernel influenciando diretamente no desempenho do mesmo e diminuindo a sobrecarga da memória
efetuada durante o trabalho do Proxy.

Estrutura

Para atingir este objetivo o trabalho foi estruturado da seguinte forma:


• Proxy;
• Squid;
• Conhecendo algumas possíveis soluções;
• Aplicando a solução escolhida.

1. ACL: É normalmente uma lista de princípios com os tipos de acesso definido para cada usuário ou
grupo.
Origem do Proxy

O Proxy surgiu da necessidade de conectar uma rede local à Internet através de um computador da rede
que compartilha sua conexão com as máquinas da rede. Conforme Peter (Thoeny 2002), se considerarmos
que a rede local é uma rede interna e a Internet é uma rede externa, podemos dizer que o Proxy é quem
permite que outras máquinas tenham acesso externo, ou seja, a conexão com a Internet.

Geralmente, máquinas da rede interna não possuem endereços válidos na Internet, primeiro pelo fato da
segurança nas redes privadas e também devido à falta de IPs válidos, portanto, não têm uma conexão
direta com a Internet. Assim, toda solicitação de conexão de uma máquina da rede local para um host da
Internet é direcionada ao Proxy, este, por sua vez, realiza o contato com o host desejado, repassando a
resposta da solicitação para a máquina da rede local.

É comum termos o Proxy como conexão direta com a Internet.

Tipos de Proxy

Existem vários softwares diferentes com as características de Proxy, alguns mais especializados em
somente alguns protocolos, outros com mais funcionalidades, como filtragem de controle de conteúdo e
firewall, outros mais especializados em otimização de cache em RAM1 ou disco rígido.

Dentre os vários Proxy existentes para o sistema operacional Linux, com pelo menos suporte à HTTP2,
HTTPS3 e FTP4, conforme citado por Peter Thoeny (2002) destaca-se Squid, Delegate, Dansguardian,
Oops entre outros.
1. RAM: Randomic Access Memory
2. HTTP: É um protocolo da camada de "Aplicação" do modelo OSI, utilizado para transferência de
dados na Internet.
3. HTTPS: É um protocolo da camada de "Aplicação" do modelo OSI, com implementação de
segurança.
4. FTP: É uma forma bastante rápida e versátil de transferir arquivos, sendo uma das mais usadas na
internet.
Squid

Foi originado de um projeto denominado Harvest entre o governo americano e a Universidade de


Colorado. Atualmente é o Proxy mais popular e mais usado como controle de conteúdo, na qual possui
vários programadores como desenvolvedores do projeto pelo mundo.

É geralmente disponibilizado por padrão pela maioria dos sistemas operacionais Linux, fornecendo todas
as funcionalidades de um Proxy comum.

Permite atuar como Proxy para os protocolos HTTPS, HTTP, FTP e Gopher1. Para outros protocolos
como correio eletrônico (SMTP2 e POP3) e ICQ4.
1. Gopher: É um protocolo de redes de computadores que foi desenhado para indexar repositórios de
documentos na Internet.
2. SMTP: É o padrão de fato para envio de e-mail através da Internet.
3. POP: É um protocolo utilizado no acesso remoto a uma caixa de correio eletrônico.
4. ICQ: É um programa de comunicação instantânea pela Internet.

Delegate

Este também é um Proxy interessante, de autoria de Yutaka Sato (2006), o Delegate é um Proxy Server
5multiplataforma com relays e vários protocolos de aplicação em TCP/IP ou em UDP/IP, incluindo o
HTTP, FTP, Telnet1, NNTP2, SMTP3, IMAP4, LPR5, LDAP6, ICP7, DNS8, SSL9 e Socks10. O
Delegate interliga uma comunicação entre usuários e clientes, onde uma comunicação direta é impossível,
ineficiente, ou inconveniente, conforme Sato (2006).
1. Telnet: É um protocolo cliente- servidor de comunicações usado para permitir a comunicação
entre computadores ligados numa rede, baseado em TCP.
2. NNTP: É um protocolo da internet para grupos de discussão da chamada usenet.
3. SMTP: é um protocolo relativamente simples, baseado em texto simples, em que um ou vários
destinatários de uma mensagem são especificados, sendo depois a mensagem transferida.
4. IMAP: É um protocolo de gerenciamento de correio eletrônico superior em recursos ao POP3
5. LPR: É a porta de impressão em Linux.
6. LDAP: Serviço de rede que disponibiliza integração de senhas para qualquer serviço.
7. ICP: Uma Infra-Estrutura de Chaves Públicas é um órgão ou inciativa pública ou privada para a
organização de uma estrutura de emissão de chaves públicas.
8. DNS: É um sistema de gerenciamento de nomes hierárquico.
9. SSL: É um protocolo criptográfico que provêem comunicação segura na Internet para coisas como
e-mail, navegação por páginas, e outros tipos de transferência de dados
10. Socks: é um protocolo de internet que permite que aplicações cliente-servidor usem
transparentemente o serviço de uma rede ao firewall.

Oops

É um Proxy mais simples que os anteriores. Surgiu como uma alternativa ao Squid. Oops é leve, embora,
trata-se de um poderoso Proxy com cache. Suas principais características conforme (Cipriano 2006), é:
• HTTP/1.1 (ainda sem conexões persistentes) e FTP;
• Ele está pronto para servir pedidos imediatamente após iniciado;
• Armazenamentos em disco são checados em segundo plano, enquanto servem pedidos diretamente
da rede;
• Reconfiguração limpa em Sighup1 e sem sessões quebradas, novas configurações aplicadas a
novas conexões;
• Arquivo de configuração e ACLs fáceis de ler e entender;
• Controle de largura de banda;
• Diversos tipos de módulos existem como geração de logs, acesso, saída, relato de erros, filtragem
de URL, etc;
• Objetos são armazenados em arquivos grandes e sem esquema de objeto por arquivo. Esses
arquivos grandes podem ser dispositivos como (/dev/hda).

1. Sighup: Define-se como a reinicialização de um processo sem a necessidade de reiniciar a máquina.

Dansguardian

É uma ferramenta capaz de filtrar acessos a Internet com base em diferentes critérios, possui filtros com
as seguintes características, conforme descrito por Silva (2006).
• Filtros de domínios ou URLs com um desempenho visivelmente superior a outras ferramentas;
• Filtros baseados em frases associadas à pornografia ou consideradas inapropriadas;
• Filtros por figuras ou por tipo de conteúdos (MIME1);
• Filtros por extensão de arquivos, como: .exe, .dll, .scr, etc;
• Filtro com características em que é possível bloquear ou limitar upload na Internet.

A ferramenta difere da maioria disponível no mercado pelo fato de não funcionar apenas como filtro de
URL, mas também como um efetivo filtro de conteúdos de páginas Web. Pois, faz uma varredura do
conteúdo de cada página acessada por seus usuários e não somente uma liberação ou proibição do nome
do site ou da URL acessada.

Este filtro de conteúdo funciona em conjunto com qualquer Proxy, podendo ser instalado em sistemas
operacionais Linux, FreeBSD, OpenBSD, NetBSD, Mac OSX e Solaris.

O Dansguardian não tem características de Proxy, portanto é obrigatório o uso de um servidor Proxy para
que a ferramenta seja implementada, embora ele tenha sido citado neste trabalho por ser relevante suas
funções.

Nas soluções comumente encontradas no mercado, o filtro de conteúdo recebe as requisições do


navegador do usuário, aplica as restrições estabelecidas ou as exceções configuradas e, em seguida, passa
a requisição para o Proxy.

Este faz o seu papel que é a intermediação entre o cliente e o servidor a ser acessado. No processamento
interno de arquivos contendo proibições e exceções, existe uma ordem pré-estabelecida.

1. MIME: É uma norma da Internet para o formato das mensagens de correio eletrônico.

Apesar do Dansguardian não ter características de Proxy o mesmo foi citado apenas para fim de
conhecimento, uma vez que o objetivo deste trabalho é demonstrar os diversos tipos de aplicações para
otimização do Proxy Squid, procurando a melhor solução para desempenho do mesmo tornando-o tão
eficiente quanto o Dansguardian no processo de filtro de conteúdos, pois quando o Squid utiliza uma base
muito extensa (Black-list1), consequentemente passa a utilizar muita memória e se torna lento demais
sobrecarregando consideravelmente a rede.
Principais características dos Proxy

Um exemplo muito comum de compartilhamento de Internet é baseado em um servidor Proxy com duas
interfaces de rede, geralmente um modem e uma interface Ethernet, sendo que a interface do modem é a
interface de saída para Internet, enquanto a interface de rede, é a interface de acesso às máquinas da rede
local. O compartilhamento de Internet apresentado se refere ao serviço básico de um Proxy. Mas um bom
Proxy deve ainda prover várias outras funcionalidades complementares conforme Peter Thoeny (2002).

Existem duas características principais de Proxy, na qual são definidos, como Proxy Transparente e Proxy
Controlado, conforme Martins (2006).

Proxy transparente

Nele é simplesmente feito um encaminhamento de pacotes vindos da Internet para uma máquina que esta
na rede interna. Com o Proxy transparente não é preciso configurar o navegador como por exemplo o
Internet Explorer ou o Firefox, facilitando a administração da rede. Isto é realizado através de
configurações no roteador ou no firewall padrão da rede local, de forma que toda solicitação de tráfego
externo é direcionada para o Proxy. Assim, o Proxy funciona de forma transparente para o usuário, sem
necessidade de configuração.

1. Black-list: Arquivo contendo nome de sites proibidos.

Proxy controlado

Esta é uma característica dos softwares especializados em agir como servidores Proxy, como o próprio
Squid. Eles possuem certas opções que o Proxy Transparente para facilitar o controle de quem pode ou
não utilizar o Proxy, e a sua configuração deve estar como padrão em todos os browser com o IP do
servidor Proxy. Conforme Thoeny (2002), com ele também é possível implementar o controle de
conteúdo com base em ACL (Access Control List), ou seja listas de acesso previamente definidas.
Proxy transparente X Proxy controlado

Vantagens e desvantagens estão relacionadas com o seu tipo de caso, onde em uma situação hipotética
você poderá ter uma empresa em que os administradores preferem colocar o IP do Proxy em cada
máquina e também pode acontecer que em certos casos o administrador de departamento de informática
deseja não colocar nenhuma informação nos navegadores dos usuários, como um administrador de rede,
vai ter que decidir qual tipo de Proxy utilizar e qual o melhor para a situação, vão existir casos em que um
Proxy Transparente vai oferecer o suficiente para as regras de certa empresa e vão existir casos em que
irão ser necessário as funções que somente um Proxy controlado pode oferecer.

Vantagens do proxy transparente

É mais simples de ser configurado quando já está habilitado no Kernel, quando não está habilitado no
kernel o mesmo deve ser reinstalado com o suporte ativo para que seja usado. Programas como ICQ
funcionam plenamente com ele e não precisa que as máquinas clientes sejam configuradas. Afinal de
contas, qual é a idéia de Proxy transparente? Sabemos que a tradução de Proxy para nossa língua é
intermediário, logo o intermediário transparente é o Proxy onde não é necessário a configuração do
navegador.

Também é possível através do Proxy transparente fazer com que todo o acesso do cliente à Internet fique
submetido ao Proxy, ou seja, o cliente é forçado a utilizar o Proxy. Entre outras vantagens, conforme
citado por Martins (2006):
• Não é necessário a configuração do navegador do cliente, isto sem dúvida é bem vindo em uma
grande rede;
• Como já dito anteriormente, o uso do Proxy transparente força o cliente a passar pelo Proxy;
• Com a configuração do Proxy transparente, todos os serviços ficam disponíveis aos seus clientes,
lembrando que o Squid só trabalha com os protocolos HTTP e FTP. Configurado o Proxy
transparente, você pode fazer uso de outros serviços como: SSH, Telnet, E-mail, etc;
• Outro recurso do Proxy transparente é que ele funciona como uma maneira de bloquear acesso
evitando que aqueles usuários mais espertos retirem as definições do Proxy de dentro do
navegador, podendo assim visitar sites proibidos;
Com o Proxy transparente todas as requisições feitas á porta 80 são automática redirecionadas para a
porta do Squid, e assim fica virtualmente impossível de sair para a Internet.

Desvantagens do proxy transparente

Possui menos recursos que um Proxy Controlado. Precisa de configurações no Kernel e, em alguns casos,
é necessária a recompilação do Kernel do sistema. Não possui nenhuma segurança de acesso e não possui
um sistema de (caching), o que o torna mais lento em uma rede.

Vantagens do proxy controlado

Com ele você pode utilizar listas de controles de acesso (ACL's) para controlar quem usa e quem não usa
o seu Proxy, pode ser utilizado para uso com SSL, pode servir para liberação de Internet mediante
autenticação do usuário e, principalmente, possui um sistema de (caching), possuindo um desempenho na
rede geralmente melhor, conforme Lima.

Desvantagens do proxy controlado

Alguns programas como ICQ e o protocolo SMTP não funcionam muito bem com ele. E outra
particularidade é a sua falta de segurança quanto à estabilidade da conexão, pois qualquer usuário das
maquinas clientes podem remover as configurações de Proxy, no entanto não será possível a sua
navegação.

Cache

Conforme descrito por Thoeny (2002), o Proxy permite armazenar nele próprio as páginas visitadas com
mais freqüência, ou seja, quando um usuário solicita um site na Internet, o Proxy armazena o seu
conteúdo em cache, juntamente com a sua data. Caso o usuário, depois de um certo tempo, solicite-a
novamente, o Proxy obtém a data da página remota e caso não seja mais atual que a página que está em
cache, este fornece para o cliente a página em cache, sem a necessidade de baixar novamente a página
solicitada. Esta funcionalidade aumenta bastante o desempenho de acesso às páginas, uma vez que o
acesso em cache local é muito mais rápido que o acesso remoto.

Autenticação

Ao requisitar uma página será exibido uma caixa solicitando ao usuário um login e uma senha, e com
base nesta autenticação de regras estabelecidas pelas ACL o usuário poderá ter ou não acesso a página
requisitada.

Listas de controles de acesso

Também conhecidas como ACL's, permite que o administrador restrinja o acesso a determinados sites
baseados em critérios estipulados em listas de controles. Os critérios conforme descrito por Thoeny
(2002) podem ser expressos em regras baseadas no login, palavras-chave na URL, palavras-chave no
conteúdo do site, horário de acesso, etc.

Proxy para SSL

Permite que um navegador e um servidor Web estabeleça uma comunicação segura para realizar
transações. O SSL é uma camada de criptografia do protocolo HTTP, por isto quando utilizados em
conjunto é chamado também de HTTPS (HTTP seguro).

Squid

O Squid caracteriza-se em um software especializado, que faz operação de Proxy de Web e FTP,
completamente livre e com excelente suporte para operação em servidores Linux.
Com o Squid você pode instalar um servidor Linux com acesso à Internet, e fazer com que outras
máquinas clientes (usando sistemas operacionais como: Linux, Windows ou outros) acessem páginas
Web e sites FTP através do servidor Linux, as máquinas clientes precisam somente estar com os seus
(gateway) padrões apontados para o servidor Proxy.
O Squid dá acesso a serviços como HTTP, HTTPS e FTP. Mesmo em redes onde seria possível instalar
IP (masquerading), muitos administradores optam por limitar o acesso direto das máquinas internas à
Web, por várias razões, entre as quais se incluem a segurança e o controle de acesso (através de
mecanismos de restrição e de Log).

O recurso que mais atrai atenção no Squid é o cache de páginas. Como em geral o Link entre as máquinas
clientes e o servidor Proxy é de alta velocidade (rede local ethernet ou similar) e o link entre o Proxy e a
Web é mais lento, é bastante interessante à possibilidade que o Squid oferece de armazenar localmente as
últimas páginas acessadas, de forma a não ter que buscar novamente na Internet uma página que tenha
sido recentemente vista por outro usuário da mesma rede. Naturalmente você pode configurar o tempo de
armazenamento de cada página no cache, e o protocolo HTTP tem recursos suficientes para reconhecer
páginas que não devem ser guardadas no cache e precisam ser buscadas novamente a cada requisição.

Devemos entender que um serviço de Proxy exige bastante memória e espaço em disco rígido. O sistema
deve ser dimensionado de forma adequada.

Características do Proxy Squid

O controle de acesso é uma das característica do Squid muito útil para administradores que lidam
diariamente com grandes acessos públicos, que possuem o seu link Internet saturado com acessos a sites
remotos que não estão relacionados à finalidade da sua rede e a possibilidade de definir listas de
bloqueios para restrições destes acessos indevidos.

Restrições de acesso

Você pode definir listas de controle de acesso baseado no endereço de destino ou na origem da
requisição. Assim, você pode por exemplo definir que em uma escola alunos do laboratório (A) não
podem acessar determinados sites, enquanto que os alunos do laboratório (B) acessam sem restrições.
Utilizando um script externo de filtragem você pode até mesmo criar regras baseadas no horário de
acesso. Desse jeito pode-se criar restrições específicas em determinadas horas, na qual se pode bloquear
arquivos de vídeo e em outra tabela de horário pode-se permitir.
Por exemplo, as seguintes linhas no arquivo /etc/squid.conf impediriam que qualquer pessoa da sua rede
acesse sites, cuja URL contenha a palavra playboy e sexo:
acl porno url_regex playboy
acl livre url_regex sexta
http_access deny porno
http_access allow livre
http_access allow all

Ao contrário de outras técnicas de conexão, como o roteamento simples e o IP (masquerading),


normalmente o Proxy Squid exige alterações na configuração do seu navegador Web. Cada navegador
tem sua própria maneira de configurar conforme citado por Campos(2006), mas de um modo geral todos
eles têm suporte a Proxy.

Ao configurar um navegador ou um aplicativo que estará utilizando um Proxy para estar conectando a
Internet, automaticamente ele muda a sua forma de operação. Ao invés de tentar contatar diretamente os
servidores Web da Internet, ele contata o Proxy e informa a ele a URL que deseja transferir. O Proxy, por
sua vez, contata o site da Internet e transfere o arquivo ou página desejados, entregando-os ao navegador
que fez a requisição e armazenando uma cópia temporária no Cache. De acordo com Campos(2006), caso
algum outro computador da rede requisite a mesma página em um intervalo de tempo configurável, ele
terá a resposta mais rápida.

Se você tiver um Proxy baseado no Squid, os computadores da rede local não precisam ter nenhuma
forma de acesso direto à Internet para entrar na Web e usar o FTP. Sendo assim, você pode concentrar
seus esforços de segurança e administração de rede na máquina que roda a Proxy, conforme
Campos(2006).

Uma das maiores vantagens do Proxy sobre outras alternativas de conexão como o IP (masquerading) é a
existência do cache, que, quando bem configurado, maximiza o aproveitamento do seu canal de conexão
com a Internet. Os documentos estáticos (imagens, páginas HTML geradas estaticamente) solicitados por
qualquer uma das máquinas da sua rede ficam armazenados também no servidor, e caso outra máquina da
rede solicite o mesmo documento, ele é fornecido a partir do cache, economizando assim a sua banda com
o provedor de Internet, que normalmente é de velocidade bem mais baixa do que a rede local que liga as
máquinas clientes ao servidor Proxy.

Outra vantagem importante é o nível de controle oferecido. O Squid permite criar regras avançadas de
restrição de acesso, podendo definir que determinados micros terão acesso irrestrito, outros podem
acessar apenas um determinado conjunto de sites, e outros ainda podem acessar qualquer site. É possível
restringir um determinado conjunto de sites cuja URL possua uma determinada palavra ou expressão
regular. Estas regras podem variar de acordo com o horário, permitindo a criação de regras que restrinjam
o tráfego no horário de expediente, e liberem nos horários de menor demanda.

Arquivo de configuração

A configuração do Squid fica gravada em um arquivo chamado (squid.conf), geralmente no diretório (/etc
ou /etc/squid) dependendo do sistema operacional usado.

As políticas de acesso, ocupação de memória e quanto ao prazo de validade dos arquivos do cache são
funções que estão definidas dentro do (squid.conf). Contudo, basta habilitar as funções neste arquivo.

Função do proxy Squid

O Squid depende da infra-estrutura de sua rede. Quando ele entrar em operação, as rotas e interfaces de
rede da máquina já devem estar ativadas, sejam elas sobre uma linha discada, uma conexão através de um
roteador dedicado, uma conexão sob demanda discada, rede local ou qualquer outra suportada pelo Linux
de acordo com Campos (2006).

Conforme definição de Andrade (2006), o objetivo principal de um servidor Proxy é possibilitar que
máquinas de uma rede privada possam acessar uma rede pública, como a Internet, sem que para isto
tenham uma ligação direta com esta. O servidor Proxy costuma ser instalado em uma máquina que tenha
acesso direto à Internet, sendo que as demais efetuam as solicitações através desta. Justamente, por isto, é
que este tipo de servidor é chamado de Proxy, pois é um procurador, ou seja, o sistema é que faz
solicitações em nome dos outros.

Um servidor Proxy para o protocolo HTTP, por exemplo, pode ter outras funcionalidades implementadas.
Visto que todas as solicitações de páginas efetuadas pelas máquinas da rede privada serão feitas através
dele, é muito útil armazenar localmente as páginas que foram solicitadas, permitindo que os próximos
acessos, efetuados por quaisquer máquinas da rede, possam ser otimizados. Este conceito é chamado de
(caching), na qual a página é baixada imediatamente para o cliente a partir do servidor Proxy, evitando ter
que baixá-la da Internet.

Progresso do Squid

O Squid está continuadamente melhorando sua performance, conforme Bastos (2006), além de adicionar
novas características e ter uma excelente estabilidade em condições extremas.

Sua compatibilidade com várias plataformas e a imensa gama de software para analisar logs, gerar
relatórios, melhorar o desempenho e adicionar seguranças providos pela comunidade open source,
combinados com ferramentas de administração simplificada e baseadas em Web agregam grande valor ao
produto.

Podemos ainda citar a capacidade de clustering, transparent Proxy, cache de FTP e, é claro, seu baixo
custo. O sistema é totalmente aberto, possibilitando a sua otimização à nível de código fonte, além da
otimização via configuração.

Tipos de protocolos

O Squid busca por comunicação TCP (Transmission Control Protocol) e ICP ( Internet Cache Protocol)
em portas específicas. O TCP é usado para comunicação entre webservers e clientes, e o ICP para
conversa entre servidores de cache. Para cada servidor ou cliente, a configuração do Squid precisa
fornecer uma única porta sobre a qual o Squid irá enviar as requisições TCP ou ICP e ouvir as respostas.

O Squid trabalha apenas com FTP, Gopher e HTTP. O Squid, não configura acesso a e-mails, ICQ, IRC,
etc. Visto que não só é função do firewall trabalhar com o NAT (Network Address Translation), como
também não faz sentido criar caches de e-mails pessoais e mensagens do ICQ.

Proxy transparente no Squid

Proxy Transparente é um recurso muito útil para evitar que os usuários removam as configurações do
Browser. Conforme Bastos (2006) os usuários serão obrigados a passar pelo Proxy, mesmo que as
máquinas não estejam configuradas para tal. Extremamente recomendado, principalmente em casos de
bloqueio de sites ou limitação de banda.

Experiências do grupo comprovam que usuários com um pouco mais de conhecimentos irão remover a
configuração de Proxy.

Algumas pessoas desejam trabalhar ao mesmo tempo com autenticação e Proxy transparente. Isso é
possível de ser feito com uma interação entre o firewall e um CGI1.

Listas de Controle de Acesso

O conceito de ACL (Access Control Lists) é utilizado no Squid para estar controlando o que cada usuário
acessa no navegador. A ACL é muito útil, por nos permitir trabalhar com níveis de acesso baseados em
diversas informações.

Não é incomum que em uma instalação do Squid algumas situações podem acontecer, como exemplo
poderíamos citar a diretoria que pode acessar qualquer site, a gerência que não pode acessar determinados
sites e os funcionários da fabrica que pode acessar apenas o site da empresa e de parceiros. Graças ao uso
de ACLs e um pouco de conhecimento, podemos fazer todas essas restrições.

Todas as configurações de usuários, grupos, horários e sites são configuradas em ACLs. A ordem em que
as ACLs aparecem é muito importante, pois ao ser feita uma configuração no arquivo fonte do Squid ele
respeita a regra que vem primeiro ou o arquivo de bloqueio, por isso a Acl que bloqueia os sites deve ser
a primeira.

Outra função essencial no Squid e o suporte a autenticação que para isso se usa um recurso chamado de
(ncsa_auth), que é a alternativa mais simples. Ele está disponível junto com o Squid e pode ser
implementado rapidamente. É a solução ideal para pequenas e médias instalações e redes com arquitetura
de grupo de trabalho.

1CGI: Consiste numa importante tecnologia que permite gerar páginas dinâmicas permitindo a um
navegador passar parâmetros para um programa alojado num servidor web.
Este é um recurso bem interessante para controle pessoal de usuários, pois permite que você crie ACLs
individuais e gere logs de qualidade bem superior.

Existem diversos métodos de autenticação, sendo interessante averiguar exatamente o que irá precisar
com base no plano de regras.

Para controlar o acesso por usuários e grupos, podemos configurar o Squid como PDC. O (smb_auth) lê o
arquivo (\netlogon\proxyauth) que por padrão e localizado no Linux, e em um dos controladores de
domínio previamente informado. Se a leitura desse arquivo retorna um (allow) ou permitido , então o
acesso é liberado. Caso contrário se for um (deny) o acesso é negado.

Crie um arquivo chamado (proxyauth) no compartilhamento NETLOGON de seu PDC (dê preferência ao
primário). Esse arquivo deve conter unicamente a palavra (allow) e dê permissão de leitura para os grupos
e usuários que deseja permitir o acesso.

O recurso de ACL externas é muito útil para um tratamento melhorado de algum recurso que não é
compreendido por ACLs normais. Uma ACL externa pode ser escrita em qualquer linguagem. Ela deve
sempre retornar um valor de confirmação para o (stdout) caso a condição seja satisfeita, ou retornar um
erro para o (stdout), caso ela não seja satisfeita.

Para facilitar a vida dos usuários e do administrador, conforme citado por (Reguly 2006), podemos criar
um arquivo de configuração automática que será colocado nos Browsers dos clientes. Dessa forma todos
terão seu Proxy reconfigurado dinamicamente em caso de mudanças, sem a necessidade de intervenção
em cada máquina. Esse arquivo deve ser acessível via Web e, via de regra, chama-se (proxy.pac).

A utilização de sistemas de cache, como o Squid, tem se mostrado excelentes para aliviar certos sintomas,
reduzindo o tráfego na rede e, conseqüentemente, a latência da mesma ou seja a perda de banda. Toda a
idéia por trás de um sistema de (caching) é criar um grande banco de dados onde os sites mais populares
ou acessados recentemente sejam armazenados para futuras consultas. Isso significa que se 10 usuários da
sua rede tentarem acessar um mesmo site ao mesmo tempo, somente uma das conexões realmente irá ser
feita a esse site. Todas as outras 9 vão se aproveitar do primeiro acesso e utilizar a página já em memória.
Isso é um enorme ganho de desempenho para seu backbone local e para o backbone do ISP1 onde o site
está armazenado e também para o servidor que hospeda o mesmo.
Com todas essas configurações habilitadas e funcionando corretamente é possível diminuir
consideravelmente o fluxo de informações na banda e controlar ao máximo o conteúdo acessado pelos
usuários.

Podemos definir um Proxy ou cache da seguinte forma:


• Velocidade de acesso: A melhor forma de verificar se o seu cache está sendo eficiente é pela
velocidade. Um sistema de cache que não agrega velocidade não está cumprindo o seu papel;
• Disponibilidade: De nada adianta um sistema veloz disponível apenas 2 horas por dia, ou mesmo
que precise de um reboot a cada 2 semanas. Em casos de grandes instalações, ainda é preciso ir
mais a fundo, buscando uma altíssima disponibilidade, como (Redundância de servidores, backup,
eliminação de ponto único de falha);
• Transparência ou Ostensividade: São conceitos específicos e que se adaptam a cada caso. Grandes
instalações, ISPs e empresas não preocupadas com que seus usuários vêem ou fazem na Internet
devem preferir a transparência, onde o usuário desconhece ou não se sente afetado (exceto pelo
ganho de velocidade) pela presença de um cache. Por outro lado, empresas com uma política de
segurança mais rígida, órgãos com informações críticas, ou mesmo pais que queiram controlar o
acesso de seus filhos a alguns sites, vão preferir a ostensividade;

1. ISP: serviço de acesso à internet, agregando a ele outros serviços relacionados, tais como "e-mail",
"hospedagem de sites" ou blogs, entre outros.
• Capacidade de trabalhar com redes heterogêneas: Ele é capaz de trabalhar com diversos tipos de
redes e não sendo necessário estar exclusivamente amarrado a de um fabricante de Software ou de
hardware, sendo assim ele se adapta a qualquer situação. Isso é especialmente verdade quando não
sabemos que tipo de plataforma iremos utilizar em nossa instalação;
• Simplicidade: Deixando um pouco de lado o usuário e focando no administrador, conforme citado
por (Bastos 2006) é preciso ter consciência de que um sistema bom é um sistema fácil de
administrar. O mais rápido, mais disponível e mais abrangente sistema de (caching) é totalmente
inútil se somente uma pessoa no mundo souber lidar com ele.

Cache hierárquico é a extensão lógica do conceito de (caching). Um grupo de caches podem se beneficiar
do compartilhamento de seus dados entre si de várias formas. Isso é facilmente explicável quando
pensamos em termos regionais.

Como exemplo podemos citar o de uma empresa estabelecida em um prédio, pela qual os usuários desta
empresa resolvem enviar uma requisição de acesso a um determinado site, então é repassado esta
requisição ao Proxy mais próximo, na qual baixa-se diretamente as informações sem precisar sair para a
Internet para baixá-la.

Fica fácil de visualizar que se todas as empresas interligassem localmente seus Proxies, todas sairiam
ganhando. Na realidade, essa prática entre pequenas empresas não existe. Mas quando falamos de grandes
empresas e grandes backbone, cada 1 MB economizado com (caching) é 1 MB ganho em outros serviços.

Além de trabalhar com o conceito de árvore conforme citado por (Bastos 2006), onde existe um cache
principal e outros ligados a ele, o Squid trabalha também com um conceito parecido com grupo de
trabalho, onde todos os servidores se consultam mutuamente. Toda a comunicação entre os caches é feita
via ICP.

O ICP foi desenvolvido como parte fundamental do projeto Harvest (Pai do Squid). Seu objetivo é prover
um método rápido e eficiente de obter-se comunicação entre servidores cache. O ICP permite que um
cache pergunte a outro se ele tem uma cópia válida de um determinado objeto, aumentando a
possibilidade de encontrar aquele objeto já (cacheado). Adicionalmente, o ICP permite que requisições
trafeguem entre servidores filhos em uma estrutura de árvore.

Além do controle de cache, o ICP também gera indicações do estado da rede. O não recebimento de uma
resposta ICP normalmente indica que a rota está congestionada ou que outro Host não está ativo. Além
disso, a ordem de chegada de uma resposta ICP pode indicar quais hosts estão com uma distância lógica
menor ou com menos carga. As mensagens ICP são geralmente bem pequenas, com cerca de 66 bytes.
Em uma estrutura hierárquica, normalmente tem-se mais trocas de mensagens ICP do que HTTP.

Roteamento por domínio e outra características de configurações do Squid pode favorecer muito no
desempenho.

A configuração seria assim:


cache_host_domain cache 1 portalxpto.com
cache_host_domain cache 2 portalxing.com
cache_host_domain cache 3 portalling.com
cache_host_domain cache 4 !portalxing.com ! portalxpto.com
!portalling.com

Sendo que o cache 4 será o responsável por todos os domínios que não sejam os 3 anteriores.
Squid como servidor

Uma situação muito útil, mas por vezes pouco explorada do Squid é a sua capacidade de trabalhar com
Proxy reverso. Isso significa que, além de armazenar objetos remotos, criando toda uma série de
vantagens já discutidas aqui, ele também pode armazenar objetos de um servidor Web interno, aliviando
seu uso e provendo maior segurança.

Estrutura de Hardware

Especificar o hardware é uma etapa muito importante no início do projeto. O ideal é traçar um perfil de
como é e de como será em 1 ano o volume de uso desse hardware.

Ao escolher devemos sempre utilizar um hardware que permita atualizações, especialmente em memória
e armazenamento. Instalar servidores já com todos os bancos de memória usados ou no máximo de seus
recursos sempre evitar.

Pequenas instalações dispensam disco rígido do tipo SCSI1, uma opção que já fica inviável em
instalações maiores.

Conforme citação de Bastos (2006), ao utilizar RAID2, prefira o nível 0 do que outros, visto que o
mesmo é feito para desempenho.

É interessante utilizar um disco rígido separado para os dados e para os logs do Squid. Se isso não for
possível, ao menos uma partição separada é extremamente recomendada. Como normalmente, tanto os
dados quanto os logs ficam abaixo do diretório (/var), esse é o ponto de montagem para essa partição.

O desempenho das resoluções DNS é um ponto crítico e deve ser analisado como se segue. Em uma
situação ideal, deveria existir um cache de DNS na mesma máquina ou em uma máquina muito próxima,
para diminuir ao máximo o tempo de resolução dos nomes.

Em múltiplas rotas como em instalações com o ISP pode ser vantajoso definir suas rotas manualmente. Já
em empresas médias ou grandes que utilizam links de baixo custo, como ADSL3, o balanceamento de
carga nos links é uma ótima opção, conforme citado por Bastos (2006).
1. SCSI: A tecnologia criada para acelerar a taxa de transferência de dados entre dispositivos de um
computador, desde que tais periféricos sejam compatíveis com o padrão.

2. RAID: É um meio de se criar uma unidade virtual composta por vários discos individuais, com a
finalidade de duplicação ou balanceamento.

3. ADSL: Asymmetric Digital Subscriber Line.

Tags

A seguir será mostrado algumas tags de configuração do Squid. Alterações bem feitas e pensadas podem
trazer um grande ganho para a performance do cache, enquanto um erro de configuração pode impedir o
Squid de trabalhar ou até mesmo remover muitas de suas funcionalidades.

Estas configurações são feitas editando o arquivo (squid.conf), localizado por padrão no diretório
/etc/squid/.
• http_port: Esta tag define qual porta ou portas do serviço do Squid estará aberta, por padrão é
definida a 3128;
• cache_mem: Especifica o ideal a ser usado pelo Squid de memória, levar em consideração a
quantidade de memória usada, por que ao ser setado valores extremamente altos os outros serviços
do sistema operacional serão prejudicados;
• cache_swap_low: Este parâmetro é especificado para quando o tamanho do diretório de Swap já
estiver no mínimo, por padrão costuma-se inserir o valor de 90;
• cache_swap_high: Esta outra tag é para especificar o tamanho do diretório de Swap quando o
mesmo já estiver no máximo, por padrão costuma-se inserir o valor de 95.

Referências de conexão

Em conexões intermitentes o Squid pode operar em redes (dial-up) ou (demand-dial). O modo (off-line)
irá funcionar para algumas destas redes, mas está longe de ser uma solução ideal. Infelizmente muitas das
funcionalidades do modo (off-line) do Squid parecem ter desaparecido durante o desenvolvimento da
série Squid 2.x. Na versão 2.3 STABLE4, o modo (off-line) não tem quase nenhum efeito.
Ter um cache no lado intermitente do Link pode acabar com alguns dos problemas destas conexões,
conforme Vesperman (2006), dando acesso a informação que está em cache e assim reduzindo o uso do
Link. Sem as correções do (patch), o Squid pode funcionar razoavelmente bem em conexões (dial-on-
demand), mas discar cada vez que uma consulta tem que ser resolvida pode influenciar consideravelmente
no custo.

O Squid foi projetado para conexões permanentes. Fazer o Squid funcionar em conexões intermitentes
exige alterações no modo em que o Squid trabalha com as páginas Web antigas e pesquisas DNS antigas.

As páginas são consideradas antigas quando o seu TTL1(time to live) tiver sido expirado. Muitas páginas
Web possuem valores de validade em seus cabeçalhos informando até quando a página pode se
considerada atualizada, e quando a mesma pode ser considerada como página antiga. O Squid também
possui informação padrão de validade, se não há dados nos cabeçalhos, o Squid configura os seus
próprios. Páginas antigas são mantidas no cache.

Se o cache ficar sem espaço, as páginas antigas são descartadas em uma ordem (mais velha primeiro).
Este algoritmo é chamado LRU2(least recently used). Outros algoritmos estão disponíveis em versões
mais atuais do Squid.

Se mesmo assim você estiver com problemas de espaço no cache a recomendação e adquirir um novo
disco rígido com bem mais espaço e mais memória.

Páginas antigas que ficam no cache são validadas quando um cliente solicita a página. O Squid gasta uma
solicitação, perguntando (Ei, esta página mudou?), e o servidor de origem irá responder com (Sim, aqui
está à nova página), ou (Não, ela ainda é boa).

A página é considerada recente novamente, seja uma nova página ou uma antiga. Este processo é
chamado de solicitação IMS, uma abreviação para (if modified since) que significa, desde a última vez
que o Squid verificou que a mesma é recente.

Pesquisas DNS também são armazenadas em cache, e possuem um TTL configurável. Quando uma
entrada cacheada de (Fully Qualified Domain Name), FQDN, ou uma entrada IP DNS expira, ela é
removida do cache.
1. TTL: Significa o número de máquinas que os pacotes podem demorar numa rede de computadores
antes de serem descartados.

2. LRU: Algoritmo Adaptativo de Substituição de Páginas.

O modo (off-line) também nunca expira informações de DNS que esteja no cache, e nunca renova páginas
antigas. Isto não é o que os usuários de (dial-up) e outros usuários com conexões intermitentes querem.
Usando a configuração não modificada do Squid, (offline_mode on) que assinala ao Squid para nunca
tentar uma validação, e (offline_mode off) que assinala uma operação normal.

Vantagens

O Squid está continuadamente melhorando a sua performance, além de adicionar novas funcionalidades e
ter uma excelente estabilidade em condições extremas.

Sua compatibilidade com várias plataformas e a imensa quantidade de softwares para analisar logs, gerar
relatórios, melhorar o desempenho, bem como a adição de segurança providos pela comunidade open
source, combinados com ferramentas de administração simplificada e baseadas em Web agregam grande
valor ao produto.

Podemos ainda citar a capacidade de clustering, transparent proxy, cache de FTP e, é claro, seu baixo
custo.

Configuração

Esta idéia surgiu da possibilidade de configurarmos o Squid de uma forma que o mesmo atinja o seu
potencial máximo.

Porém utilizando esta idéia, iremos somente redefinir configurações pré-existentes para que estas se
encaixem no objetivo proposto. Nas páginas de anexos está o Squid proposto.
HDparm

Aumenta a taxa de transferência de dados do discos rígidos IDE com o HDparm. Como as maiorias das
distribuições Linux sempre adaptam o sistema operacional para que ele esteja totalmente compatível,
algumas vezes é deixado de lado o desempenho do hardware e é neste caso que entra programas como o
HDparm.

A taxa de transferência de dados quintuplica com o uso dos novos parâmetros, se a compararmos com a
configuração padrão. O ganho de desempenho tende a ser muito grande mas o risco de perda de dados é
diretamente proporcional a ele. A melhor proteção é fazer primeiro um backup do sistema e somente
depois realizar teste para se chegar a um valor ideal de (multcount) que significa a quantidade de setores
que ele está lendo por vez.

Banco de dados

Quando pensamos em uma solução para resolver o problema proposto a principio a alteração no código
fonte seria a opção mais viável, no entanto, ao pesquisarmos e nos aprofundarmos mais no assunto
descobrimos a vantagem de utilização de bancos de dados.

A vantagem de utilizar o banco de dados é que sua indexação interna é mais rápida e dinâmica, o que
facilita a resposta do Squid para com o navegador, ou seja, a capacidade de armazenar uma grande lista
diretamente no disco rígido e não em memória como acontece normalmente.

Alteração do código-fonte

Uma das soluções concentra a idéia de alteração do código fonte do Squid otimizando o mesmo, esta
idéia foi proveniente de um orientador. Como seria feita esta alteração?. Pesquisamos métodos de
ordenação e métodos de busca para verificar qual deste métodos seria o mais rápido em relação ao
utilizado no Squid, caso o algoritmo utilizado atualmente pelo Squid não apresentasse uma melhor
característica de performance, seria aplicado um (patch) com a nossa implementação ou melhoramento da
estrutura do próprio algoritmo já existente no código fonte.
Compilação do kernel

Uma das opções que pode ser implementada no sistema operacional Linux que se encontra instalado o
Squid, é a compilação do Kernel com somente o necessário, ou seja, com um núcleo (kernel) mais enxuto
e dedicado, se torna evidente que o mesmo ficará mais rápido pelo fato de não estar compartilhando
outros recursos.

A escolha

Optamos por utilizar um banco de dados para armazenar nossa (black-list) e desenvolvemos um programa
(Front-End), que faz a intermediação entre o banco de dados e o Squid. Este programa é desenvolvido
utilizando a linguagem de programação Perl, o banco de dados que utilizamos para armazenar a nossa
(black-list) é o PostgreSQL. Dentro desta escolha incluímos como solução requerida a implementação do
HDparm e compilação do kernel e por ultimo incluímos nas listas de anexo o hardware ideal para a
quantidade de usuários.

Desenvolvendo a solução

Utilizamos a linguagem de programação Perl, para servir como (front-end) para o banco de dados que
guardará a (black-list) do Squid. A vantagem de utilizar a linguagem Perl é sua flexibilidade para
trabalhar com qualquer banco de dados como: Oracle, Postgres, Mysql, Sqlite, etc.

Foi feito alguns testes para conexão de banco de dados utilizando linguagem de programação C para
conectar ao banco de dados Postgres, mas devido à falta de várias bibliotecas que são necessárias para
executar esta conexão acabamos pesquisando outras linguagens e deparamos com a linguagem Perl, ela é
excelente para a função de conexão com banco de dados.

A propriedade de conexão será da seguinte forma: o Proxy Squid através de um recurso chamado
(redirect_program) que é uma tag interna do software Squid, aponta para o script feito em Perl que é
nosso (front-end) e por sua vez o (front-end) faz um SELECT na lista (black-list) que está no banco de
dados.
Vantagem sugerida é que a (black-list - lista de URLs) não será carregada na memória e sim no banco de
dados, então o Proxy Squid fará toda a consulta de URLs diretamente em cima do banco de dados não
sobrecarregando a memória do computador.

Testamos o (front-end) feito em Perl com o banco de dados Postgres e seu funcionamento é perfeito, foi
constatado isso através de testes utilizando os seguintes parâmetros tabela 3:
1. Inserimos dados no banco de dados;
2. Fizemos um select dos dados armazenados;
3. Excluímos os dados. Todo este processo é feito através de um script Perl. O Perl utiliza uma
biblioteca chamada DBI que facilita esta conexão com o banco de dados.

Detalhamento do processo

O primeiro passo foi criar o banco de dados e inserir no mesmo as URLs para serem consultadas
futuramente. O banco de dados usado como dito anteriormente é o Postgres, e foi definido com o nome de
(Bdblack) para o banco, e sua tabela com o nome (sites) com a seguinte estrutura:

create table sites (url varchar(300), domínio varchar (300))

Para o nosso (front-end) que será o intermediador entre o Squid e o banco de dados criado pela linguagem
de programação Perl o nome dele é (consulta.pl).

Introdução ao Perl

A Linguagem Prática de Extração e Geração de Relatórios (The Practical Extraction and Report
Language) é uma linguagem de programação estável e multiplataforma, usada em aplicações de missão
crítica em todos os setores, e é bastante usada para desenvolver aplicações Web de todos os tipos, foi
criada por Larry Wall em dezembro de 1987. A origem do Perl remonta ao (shell scripting, Awk e à
linguagem C), e está disponível para praticamente todos os sistemas operacionais, mas é usado mais
comumente em sistemas Unix e compatíveis.

Perl é uma das linguagens preferidas por administradores de sistema e autores de aplicações para a Web.
É especialmente versátil no processamento de cadeias (strings), manipulação de texto e no (pattern
matching) implementado através de expressões regulares, além de permitir tempos de desenvolvimento
curtos.

A linguagem Perl já foi portada para mais de 100 diferentes plataformas, e é bastante usada em
desenvolvimento Web, finanças e bioinformática.

Características do Perl

No geral, a sintaxe de um programa em Perl se parece muito com a de um programa em C, existem


variáveis, expressões, atribuições, blocos de código delimitados, estruturas de controle e sub-rotinas.

Além disso, Perl foi bastante influenciado pelas linguagens de shell script, todas as variáveis são
precedidas por um cifrão ($). Essa marcação permite identificar perfeitamente as variáveis em um
programa, aonde quer que elas estejam. Um dos melhores exemplos da utilidade desse recurso é a
interpolação de variáveis diretamente no conteúdo de strings. Perl também possui muitas funções
integradas para tarefas comuns como ordenação e acesso de arquivos em discos rígidos.

A linguagem suporta estruturas de dados arbitrariamente complexas. Ela também possui recursos vindos
da programação funcional (as funções são vistas como um outro valor qualquer para uma subrotina, por
exemplo) e um modelo de programação orientada a objetos. Todas as versões de Perl possuem
gerenciamento de memória automático e tipamento dinâmico. Os tipos e necessidades de cada objeto de
dados no programa são determinados automaticamente. A memória é alocada ou liberada de acordo com
o necessário. A conversão entre tipos de variáveis é feita automaticamente em tempo de execução e
conversões ilegais são erros fatais.

Sua interface de integração com base de dados (DBI) suporta muitos bancos de dados, incluindo Oracle,
Sybase, PostgreSQL, MySQL e outros. Perl permite programação procedural e orientada a objetos. Perl
pode acessar bibliotecas externas em C e C++. O módulo Perl (CGI.pm), parte da distribuição padrão de
Perl, faz com que a manipulação de formulários HTML seja muito simples.

Perl pode manipular dados encriptados, incluindo transações de comércio eletrônico. O pacote DBI do
Perl faz com que a integração com banco de dados Postgres seja muito simples.
Introdução ao PostgreSQL
O PostgreSQL é um sistema gerenciador de banco de dados objeto-relacional (SGBDOR1), baseado no
POSTGRES Versão 4.2 desenvolvido pelo Departamento de Ciência da Computação da Universidade da
Califórnia em Berkeley. O POSTGRES foi pioneiro em vários conceitos que somente se tornaram
disponíveis muito mais tarde em alguns sistemas de banco de dados comerciais.

O PostgreSQL é um descendente de código fonte aberto do código original de Berkeley. São suportados o
SQL-92 e o SQL-1999, além de serem oferecidas muitas funcionalidades modernas, como:
• comandos complexos ;
• chaves estrangeiras;
• gatilhos;
• visões;
• integridade transacional;
• controle de simultaneidade multiversão.

Além disso, o PostgreSQL pode ser estendido pelo usuário de muitas maneiras como, por exemplo,
adicionando novos:
• tipos de dados;
• funções;
• operadores;
• funções de agregação;
• métodos de índice;
• linguagens procedurais.

Devido à sua licença livre, o PostgreSQL pode ser utilizado, modificado e distribuído por qualquer pessoa
para qualquer finalidade, seja privada, comercial ou acadêmica, livre de encargos.

SGBDOR1: Sistema gerenciador de banco de dados objeto relacional.

O HDparm

Conforme a definição de (Thomas Wölfer 2004) o Hdparm é essencial para prover desempenho em discos
rígidos IDE em sistemas Linux recém-instalados, que não utiliza o total de possibilidades oferecidas pelo
hardware.
O Hdparm consegue modificar a configuração do disco rígido obtendo o máximo do mesmo. Através do
comando (hdparm -Tt /dev/hdaX) podemos medir a velocidade do cache do disco (memória, processador
e buffer) que durante a leitura de informações calcula os valores de desempenho do disco
desconsiderando as informações de dados do cache fornecendo uma medida eficiente do disco rígido que
está sendo analisado.

É recomendável efetuar vários testes, a fim de calcular uma média, entretanto é necessário que
desabilitemos vários serviços no computador para que o mesmo não fique sobrecarregado durante os
testes prejudicando a precisão dos dados analisados.

Aplicando o HDparm de forma criteriosa podemos aumentar em até cinco vezes o desempenho do disco
rígido, algo ideal para aplicações que necessitem de respostas altas. Algumas controladoras suportam 32
bits e estão rodando em 16 bits, este suporte pode ser configurado com a opção (-c), conforme segue
(hdparm -c1 -mf6 /dev/hdaX), com este comando o suporte a (I/0) é configurado para o modo 1 que seria
32 bits, desta forma dobramos a taxa de transferência de dados do disco rígido. Aplicando o comando
(Hdparm -d1 -x66-u1 -m16 -cd /dev/hdaX), obtemos resultados que demonstram grande desempenho do
disco rígido, através da opção (-d1) ativamos o (flag) de utilização de acesso direto à memória (using-
dma), a opção (-x66) ativa o ULTRADMA, a opção (-u1) desativa o mascaramento de outras interrupções
(umaskirq). Podemos observar que a taxa de transferência de dados quintuplica com o uso de novos
parâmetros comparado a configuração padrão do computador.

Depois de efetuar a configuração que aplica o desempenho do disco rígido através do HDparm devemos
salvar a mesma para que a configuração não perca durante a reinicialização do sistema, basta utilizar um
script de inicialização do sistema, chamado (rc.local) ou outro nome dependendo da distribuição para que
toda a configuração fique de forma permanente, mas talvez em algumas controladoras, é realizado um
parâmetro chamado (IDE reset) pode-se ainda perder a configuração. Aplicando a opção (-k1) no
comando evitamos que tal reset seja efetuado.

Kernel

Para ganhar uma alta performance no sistema operacional Linux o ideal e compilar o Kernel (núcleo do
sistema operacional, que faz a negociação entre Hardware e Software), com um kernel compilado
somente com o básico, ou seja, com suporte no kernel somente aos hardware que estão disponíveis na
máquina, a velocidade em processamento é aproveitada somente para as aplicações em uso, à memória
fica alocada somente para os aplicativos e serviços que o sistema operacional precisa.

Os procedimento abaixo foi citado por Gustavo Paes (2004), o foco é o kernel 2.6 com Linux Slackware
9, porém seus conceitos podem ser levados para outras distribuições. Antes de tudo, atualize o
(Modutils/module-init-tools). É necessário um conjunto novo de programas de gerenciamento de módulos
(modprobe, insmod, rmmod, etc), pois os que vêm com o Slackware 9 não funcionam para o kernel 2.6.2.

1. Baixe o module-init-tools mais recente:


• ftp://ftp.kernel.org/pub/linux/kernel/people/rusty/modules/

2. Descompacte o arquivo com:

$ tar -xvzf module-init-tools-0.9.15-pre4.tar.gz

3. Entre no diretório que foi criado:

$ cd module-init-tools-0.9.15-pre4

4. Leia o arquivo README se houver a necessidade.

5. Agora é a hora de compilar:

$ ./configure --prefix=/
$ make moveold
$ make
$ su
# make install

6. Usar programa (generate-modprobe.conf) e converta o /etc/modules.conf para /etc/modprobe.conf:

# ./generate-modprobe.conf /etc/modprobe.conf

Kernel: É entendido como o núcleo do Sistema Operacional ou, numa tradução literal, cerne.
NOTA: Os procedimentos a seguir devem ser executados pelo usuário root.

1. Baixe o kernel novo em:


• http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.2.tar.bz2

2. Descompacte-o na pasta /usr/src/:

# cd /usr/src
# tar -xvjf linux-2.6.2.tar.bz2

3. Recrie o link simbólico "linux" apontando para a pasta do novo kernel:

# ln -s /usr/src/linux-2.6.2 linux

4. Entre no diretório /usr/src/linux:

# cd /usr/src/linux

5. Resete as configurações do kernel:

# make mrproper

6. Configure os módulos do seu kernel:

# make xconfig

Existem duas formas de carregar os dispositivos no kernel, como módulo (tecla M) e como parte do
kernel (tecla Y).

Opte por carregar como módulo, isto acelera a velocidade, isso necessita usar o (/etc/rc.d/rc.local)
descrito acima ou o (/etc/modprobe.conf) para carregar os módulos automaticamente.

Em LOADABLE MODULE SUPPORT, habilite o carregamento automático de módulos, ele vai tentar
carregar as dependências de um módulo que você esteja tentando carregar;
Em PROCESSOR TYPE, escolha o processador, um kernel específico para o processador é bem mais
rápido e estável que um de 486.

Nesse ponto, tenha em mãos o manual da placa mãe, placa de vídeo, placa de TV, modem, etc;

Em NETWORK SUPPORT, habilite os drivers da placa de rede.

Não use o (i2c) como parte do kernel, isso da futuros problemas na compilação do kernel.

Em SOUND, desabilite a placa de som, recomendamos também que na BIOS seja desabilitado Usb,
Sound, Porta paralela.

Lembre-se na parte de sistemas de arquivos habilitar suporte ao EXT2, EXT3 e ReiserFS.

Em CARACTER DEVICES, coloque os drivers para AGP. Recomendação é de usar estes drivers como
parte do kernel.

Em ATA/ATAPI/M, habilite a emulação de SCSI, pois a maioria dos softwares de gravação para o
GNU/Linux requerem que a gravadora esteja no modo SCSI.

Em GRAPHIC SUPPORT, ative o suporte a frame buffer. Ainda em frame buffer, ative o VGA 16-
Color e o VESA VGA, estes dois como parte do kernel;

Ative o driver de sua placa de vídeo como módulo (SIS, NVIDIA, ATI, etc), senão ficará difícil de
atualizar depois, principalmente no caso da NVIDIA.

Em CONSOLE DISPLAY DRIVER SUPPORT, ative o VGA TEXT CONSOLE e o VIDEO MODE
SELECTION SUPPORT.

Ative o FRAMEBUFFER CONSOLE SUPPORT, selecione também SELECT COMPILED-IN


FONTE e marque as fontes 8x8, 8x16 e 4x6.

Ative em LOGO CONFIGURATION todas as opções.

7. Limpe os arquivos temporários e de instalação:


# make clean

8. Compile a imagem do kernel:

# make bzImage

9. Compile os módulos do kernel (isso mesmo só um make):

# make

10. Instale os módulos do kernel:

# make modules_install

11. Copie a imagem gerada para o /boot/:

# cp /usr/src/linux-2.6.2/arch/i386/boot/bzImage /boot/linux-2.6.2

12. Edite o /etc/lilo.conf:

# vi /etc/lilo.conf

e inclua as seguintes linhas no arquivo:


image=/boot/Linux-2.6.2
label=Linux-2.6.2
read-only

13. Atualize o boot do sistema:

# lilo
Conclusão

Durante a pesquisa encontramos algumas aplicações, conforme descrição anterior que foram
implementadas, a fim de aperfeiçoar o desempenho do Squid.

No entanto a nossa aplicação principal foi com o banco de dados PostgreSQL, na qual demonstrou que a
sua implementação com o Squid pode ser uma boa alternativa, tanto em desempenho quanto na economia
de hardware.

Nas pesquisas foram encontradas somente uma pessoa (Alvaro Mendes de Oliveira (2006) - Squid Plus
com AD, redirector, controle de banda e relatórios) que implementou este método com o banco de dados
MySQL.

Nossos testes demonstraram que com um hardware especifico, compilando o kernel somente com o
mínimo e não compartilhando serviços, adicionando o recurso de HDparm corretamente ao disco rígido, e
com a implementação do uso do banco de dados o aumento na velocidade de transferência e resposta do
Squid é aumentada.

O programa fez a busca no banco de dados e retornou ao Squid com maior velocidade, isto é, deixou-se
de utilizar consideravelmente a memória física do equipamento (RAM) e passou-se a utilizar o disco
rígido (HD) utilizando para isto softwares como o Postgres para responder as requisições com muito mais
velocidade.

Com tudo isto que apresentamos neste trabalho, podemos concluir que ao utilizar estas ferramentas em
conjunto (Front-end, HDparm, compilação de Kernel), podemos melhorar a performance do Squid sem
alterar a estrutura do hardware. Assim sendo, com idéias simples economizamos um investimento em
hardware que era o nosso objetivo inicial.

Gerson Raymond
Linux user: #448673
http://www.g2cinformatica.com
Referências

ANDRADE, Jociel. Instalando e configurando o Squid. Acesso em 15 de abril de 2006.

BASTOS, Eri Ramos. Configurando um Squid Ninja. Acesso em 02 de maio de 2006.

CAMPOS, Augusto C. Squid o Melhor Proxy. Acesso em 25 de abril 04 de 2006.

CIPRIANO, Luis Alberto Garcia. Configurando Oops. Acesso em 04 de março de 2006.

Deitel, Deitle; Mcphie, Nieto. Perl Como Programar. 3. ed. São Paulo. Bookman, 2005.

Enciclopédia Bozolinux. Squid. Acesso em 02 de maio de 2006.

Ferreira, Ruben e. Linux - Guia do Administrador do Sistema.1. ed. São Paulo. Novatec, 2003.

JÚNIOR, Walter Flávio Pimenta. Hiperquicksort: Uma Análise Prática com Implementação em MPI.
Acesso em 14 de março de 2006.

MARTINS, Stéfano. Guia Sobre Squid/Proxy Transparente. Acesso em 11 de março de 2006.

Oliveira, Alvaro Mendes de.Squid Plus com AD, redirector, controle de banda e relatórios. Acesso em 23
de setembro de 2006.

Paes, Gustavo. Instalando e configurando os módulos do kernel 2.6 no Slackware. Acesso em 15 de


Agosto de 2006.

RESENES, Jonas. Configurando o Squid no Slackware. Acesso em 18 de fevereiro de 2006.

REGULY,Alvaro.Instalando e configurando o Squid. Acesso em 15 abril de 2006.

REIS, Cristiano Fernandes dos reis. Desenho de rede ideal de um serviço Proxy. São Paulo. 2006.

SATO,Yutaka. Configurando Dansguardian. Acesso em 17 de Abril de 2006.


SILVA, Hedwio Carvalho.Configurando o Dansguardian.
http://www.dansguardian.org
Acesso em 23 de Abril de 2006.

Stones, Richard; Matthew, Neil. Professional Linux Programando. 2. ed. São Paulo. Makron Books,
2002.

THOENY,Peter. Monografia Proxy. Acesso em 02 de Maio de 2006.

VESPERMAN, Jennifer. Instalando e Configurando o Squid. Acesso em 11 de Março de 2006.

Wolfer, Thomas. Aumente a taxa de transferencia de dados de seus discos IDE com o hdparm. Linux
Magazine. São Paulo: Setembro, ano 1, n 2, set 2004. pg. 36.

Вам также может понравиться