Augusto C. Campos - brain@matrix.com.br
Conheça o Squid e saiba porquê ele é um dos títulos mais famosos do mundo Linux, que será encontrado em todos os servidores de rede de qualquer distribuição: uma unanimidade.
Nota: Este artigo é de minha autoria, e foi publicado inicialmente na edição (impressa) de agosto/2000 da Revista do Linux. Esta reprodução é autorizada pela Revista do Linux. As figuras foram retiradas intencionalmente. Leia também nosso outro artigo sobre o squid.
Um proxy é o equivalente digital da figura do atravessador ou intermediário, que se coloca entre um servidor e um cliente de rede, gerenciando o tráfego de informações entre ambos. Seu uso mais freqüente em redes locais é na situação onde os computadores da rede não têm acesso direto à Internet, mas podem contatar um servidor de comunicação que tem esse acesso. Neste caso, uma das soluções possíveis é a instalação de um servidor proxy no computador que tem acesso à Internet, para servir de intermediário entre os navegadores (como o Netscape, o Opera e o Internet Explorer) instalados ao longo da rede e os servidores web da Internet.
Este artigo analisa o software squid, que é o mais difundido servidor proxy de web e ftp para Linux. O squid é incluído na maior parte das distribuições de Linux, e você também pode procurar a versão mais atualizada no seu site oficial, em www.squid-cache.org, juntamente com uma grande documentação adicional.
Você não é obrigado a entender como o squid funciona para colocá-lo em operação, mas, assim como o bom piloto tem noção do que ocorre debaixo do capô do motor, o administrador de redes desempenha melhor suas funções quando sabe o que cada componente do seu sistema faz.
Ao contrário de outras técnicas de conexão, como o roteamento simples e o IP masquerading (veja o artigo "Internet Fácil, Fácil" na RdL número 3), normalmente a proxy squid exige alterações na configuração do seu navegador web. Cada navegador tem sua própria maneira de configurar, mas de modo geral todos eles têm suporte a proxy -- até mesmo os de modo texto, como o lynx e o wget -- e utilitários de transferência de arquivos como o GetRight. Consulte a documentação de cada um deles para ver como habilitar o suporte a proxy. A título de exemplo, o final deste artigo traz os passos para a configuração do Netscape.
Quando configurado para usar a proxy, o navegador muda a sua forma de operação. Ao invés de tentar contactar diretamente os servidores web da Internet, ele contacta a proxy e informa a ela a URL que deseja transferir. A proxy, por sua vez, contacta 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, para o caso de algum outro computador da rede requisitar a mesma página em um intervalo de tempo configurável.
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.
Uma das maiores vantagens da 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 e outros) 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 linha com o provedor 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. Veremos alguns exemplos destas regras mais adiante.
A limitação do squid é que ele fornece apenas serviços de http e ftp, ou seja, web e transferência de arquivos. Serviços de e-mail (smtp e pop-3), irc, jogos via internet e todos os outros recursos são completamente ignorados e não são suportados. Se você precisar oferecer serviços como esses, terá que recorrer a uma segunda alternativa em paralelo -- configurações avançadas do Sendmail, ip masquerading, proxy de irc, e muitas outras opções que estão fora do escopo deste artigo.
O squid é incluído junto com a maior parte das distribuições de Linux correntes, e as instruções de instalação variam para cada uma delas -- consulte a documentação inclusa, ela está lá para isto!
No caso das distribuições recentes da Conectiva, caso você ainda não tenha instalado o squid, basta instalar o pacote squid.rpm. No caso do Conectiva Servidor 4.2, por exemplo, insira e monte o CD na unidade, e digite o comando
rpm -ivh /mnt/cdrom/conectiva/RPMS/squid-2.2.4-1cl.i386.rpm
Se a sua distribuição incluir utilitários de configuração do squid, tente utilizá-los mas, de modo geral, a configuração incluída no pacote é suficiente para começar a operar os primeiros testes.
A configuração do squid fica gravada em um arquivo chamado squid.conf, geralmente no diretório /etc ou /etc/squid. Se a sua distribuição não colocou uma cópia deste arquivo lá, ela deve ter incluído um arquivo de exemplo junto com a documentação (diretório /usr/doc). Esses arquivos apresentam muitas informações na forma de comentários, e servem de base para que você possa definir a sua política de proxy, incluindo:
* políticas de acesso: quem pode acessar quais tipos de sites e serviços
* políticas quanto à ocupação de memória
* políticas quanto ao prazo de validade dos arquivos do cache
* outras
A sintaxe deste arquivo ainda não está consolidada, e é extensa demais para ser analisada aqui com detalhes. Você terá que se guiar pelos comentários fornecidos no arquivo squid.conf de exemplo, e pela (farta) documentação disponível. Lembre-se de que o arquivo de exemplo é funcional o suficiente para seus primeiros testes, mas provavelmente você precisará fazer algumas alterações.
Lembre-se também de que o squid depende da sua infra-estrutura de 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 (diald), rede local ou qualquer outra suportada pelo Linux.
O controle de acesso do squid tem recursos suficientes para definir com precisão quais tipos de serviços podem ser acessados por quais máquinas e em quais horários. As regras da lista de controle de acesso (Access Control Lists ou ACLs) têm uma sintaxe bastante simples, e são incluídas no arquivo squid.conf. Vejamos alguns exemplos práticos:
Se você quiser impedir que qualquer usuário acesse páginas que contenham a palavra futebol, acrescente as seguintes linhas ao seu squid.conf:
acl proibir_futebol url_regex futebol http_access deny proibir_futebol
Você também pode bloquear sites específicos. O próximo exemplo impede que qualquer usuário tenha acesso ao domínio menudo.net:
acl proibir_musica dstdomain menudo.net http_access deny proibir_musica
E o bloqueio ainda pode ser para máquinas específicas. Imagine que o usuário da máquina cujo IP é 10.0.0.95 esteja ocupando muito a sua rede, transferindo arquivos de música em formato mp3. Para bloquear este usuário específico, use uma regra como a que segue:
acl mp3 url_regex mp3 acl usuario_ofensor src 10.0.0.95/255.255.255.255 acl deny usuario_ofensor mp3
Após incluir todas as suas regras restritivas, não se esqueça de incluir regras especificando que tudo o que não estiver expressamente proibido deve ser permitido. Na configuração original do squid.conf, as linhas serão como a que segue:
acl minha_rede_local src 10.0.0.0/255.0.0.0 http_access allow all minha_rede_local
Note que você deve definir a `minha_rede_local' como o conjunto de endereço IP e máscara que melhor descrevem a sua rede.
Normalmente o seu squid.conf virá com linhas como as que seguem:
# # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # http_access deny all
Elas servem para bloquear o acesso ao squid até que ele seja configurado, e você deve retirá-las do arquivo quando terminar tal operação.
Na primeira vez que você roda o squid, você deverá instruí-lo para criar seus diretórios de trabalho. Faça isto chamando-o com o parâmetro -z:
squid -z
Após executado o comando, você pode chamá-lo normalmente como um servidor, digitando-o sem parâmetros:
squid
Os modelos de instalação em RPM que eu pude analisar incluem automaticamente o squid nos scripts de inicialização do sistema. Certifique-se de que eles tenham sido incluídos no diretório /etc/rc.d, ou /etc/rc.d/init.d, ou onde o seu sistema espera encontrá-los. Você também pode incluí-los de acordo com as instruções específicas indicadas por sua distribuição.
Em caso de problemas, procure informações nos logs do sistema (a localização deles também é definida no squid.conf), pois o squid é bastante descritivo em seus registros.
Para configurar a maior parte dos clientes web bem-comportados, basta inicializar as variáveis de ambiente http_proxy e ftp_proxy com o valor do endereço e porta do seu servidor proxy squid. Por exemplo, se o seu servidor está instalado em uma máquina cujo nome é yana.lagoa.net, na porta 3128 (que é a porta default do squid), você pode incluir as seguintes linhas em seu ~/.bashrc (ou no script de inicialização mais adequado ao seu caso específico):
export http_proxy="yana.lagoa.net:3128" export ftp_proxy="yana.lagoa.net:3128"
Outros clientes exigem procedimentos específicos -- e isto inclui a maior parte dos navegadores gráficos. Lembre-se de que estas configurações devem ser realizadas em todos os navegadores da rede, mesmo os que rodam em outros sistemas operacionais, como o Internet Explorer.
No caso do Netscape em inglês, comum à maior parte das distribuições de Linux, clique em `Edit' no menu principal, e em seguida em `Preferences'. Na janela de preferências, selecione `Advanced' e após `Proxies'. Vai se abrir uma janela como a da figura 1, onde você deve selecionar `Manual proxy configuration' e clicar no botão `View', para então visualizar uma janela como a da figura 2. Você deverá preencher o endereço e a porta da sua proxy nos campos indicados nos respectivos diálogos. [Nota: as figuras estão disponíveis apenas na edição impressa da Revista do Linux]
Embora não seja possível mostrar toda a riqueza do squid em um único artigo, que envolve muitos aspectos e características adicionais não abordados nesse artigo introdutório, espero ter sido bem-sucedido em mostrar a finalidade desta ferramenta, e indicar como iniciar o processo de sua configuração.
O squid oferece vantagens na administração, controle de acesso, segurança e ocupação otimizada dos meios de transmissão. Sua base instalada é muito grande, e técnicos que implantam redes não podem deixar de conhecê-lo em profundidade. Existe muita documentação disponível em todos os sites importantes de Linux, e conhecê-la é obrigatório.
Certamente há muito a acrescentar a qualquer rede, ainda que todas as estações tenham acessibilidade plena à Internet. Não deixe de consultar as referências dadas no final do artigo, para conhecer ainda mais o potencial deste recurso poderoso.
Site oficial -- www.squid-cache.org (inclui guia do usuário e perguntas freqüentes)
Squidguard -- www.squidguard.org/ (acrescenta serviço de redirecionamento de URLs ao squid)
Squid_redirect -- www.zip.com.au/~cs/adzap/index.html (usa o squid para filtrar banners comerciais de sites)
Calamaris -- Cord.de/tools/squid/calamaris/ - gera relatórios de acesso a partir dos logs do squid
O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.