Proxy web com Linux
Publicado em 10 de junho de 2003
Veja abaixo um longo artigo introdutório sobre o Squid, o mais popular sistema de proxy web e ftp para Linux. Este artigo é de minha autoria, e foi publicado originalmente na edição impressa da Revista do Linux.
Proxy - Web com Linux
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.
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.
Funcionamento
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.
Vantagens e desvantagens
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.
Instalação e configuração
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.
Controle de acesso
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.
Iniciando o squid
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.
Configuração do cliente
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]
Conclusão
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.
Para Saber Mais
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
Postado por brain em junho 10, 2003 10:40 AM