Este artigo visa mostrar algumas das formas de uso
do servidor proxy Squid, assim como as configurações para os casos
apresentados. Não é proposta analisarmos todas as possíveis implementações
com uso do Squid, fato este impossível de ser realizado, dado a grande
flexibilidade que este software oferece, mas sim mostrar as maneiras mais
comuns de sua utilização e configuração.
1 - Objetivos
O objetivo principal deste documento é
proporcionar o entendimento do funcionamento do servidor proxy Squid e como são
realizadas suas configurações. Não será abordado aqui o processo de instalação,
tendo em vista tratar-se de tarefa muito simples, já que estamos falando de um software
muito popular e presente em praticamente todas as distribuições Linux atuais,
portanto podendo ser instalado através de pacotes da própria distribuição
com muita facilidade. Mesmo que seja feita a escolha de instalação através do
código fonte, provavelmente não será necessário muito mais do que os
comandos ./configure, make all e make install, já velhos conhecidos de
todos.
Falaremos do uso das ACL's, recurso que faz com
que o Squid seja tão flexível e eficiente, apresentado alguns exemplos mais
usados e possíveis erros que podem ser cometidos na construção das regras de
acesso.
Será abordado também a utilização de softwares
geradores de relatórios baseados na análise dos logs gerados pelo Squid, dado
ao fato deste tema ser muito importante para a abordagem do trabalho, já que
tais softwares são fundamentais para o processo de administração do
servidor proxy.
Esta não é uma abordagem definitiva, que visa
esgotar o tema ou apresentar todas as possibilidades de uso e configurações, o
que queremos é apresentar formas de implementar um servidor proxy eficiente de
maneira fácil, rápida e com qualidade.
O sistema operacional Linux será a base para o
desenvolvimento deste trabalho, onde será utilizada a distribuição nacional
Conectiva, versão 9, com kernel 2.4.21-28872cl, e a versão
2.5.1-25760cl do Squid.
2 - O que é o Squid?
Atualmente o acesso à internet tem se tornado
praticamente obrigatório, principalmente no ambiente corporativo, tendo em
vista o dinamismo que as novas tecnologias da comunicação podem trazer para
este ambiente. Entretanto surgem vários problemas quanto a definição de como
implementar esse acesso de computadores das redes corporativas à internet de
forma segura e eficiente. No conjunto de medidas a serem tomadas para
implementar esse acesso temos a utilização de servidores proxy.
Um servidor proxy funciona como um intermediário
no contato dos computadores da rede local com outras máquinas fora dela, como
por exemplo na internet. Ele recebe as requisições de acesso externo dos hosts
locais e as repassa a outros computadores fora da rede local, retornando as
respostas aos computadores que as solicitaram.
O Squid é um dos servidores proxy mais
utilizados no mundo, dado a sua robustez, segurança e recursos que oferece.
Apesar dos poucos protocolos que ele consegue trabalhar, no caso apenas o HTTP,
HTTPS, FTP e gopher, é ainda uma alternativa muito interessante, já que estes
são os principais protocolos da internet, e além do mais, muitos dos
aplicativos que usam outros protocolos tem capacidade de usar o Squid através
de um dos protocolos suportados por ele.
O proxy Squid funciona ouvindo requisições
numa determinada porta padrão, ou numa outra porta que pode ser configurada
pelo administrador da rede.
O Squid é um software livre, o que
implica dizer que ele está licenciado nos termos da GPL (General Public License),
com isso temos uma garantia a mais (ao nosso ver, sem sombras de dúvidas é
muito mais seguro que ter o software nas mão de uma única corporação
que pode fechar as portas de uma hora para outra, como já vimos por várias
vezes) de que nenhuma corporação vai descontinuar o projeto e deixar os seus
usuários sem rumo, já que é a própria comunidade de usuários que contribui
com o desenvolvimento e avanços deste software.
3 - Porque usar o Squid
Além da capacidade de intermediar o acesso à
internet, como já mencionado, o Squid tem outros recursos que o torna uma
excelente alternativa para aproveitamento mais racional da comunicação. Dentre
esses recursos podemos destacar:
Cache
- através desse recurso o Squid armazena em
cache o conteúdo acessado, de forma que se algum host fizer
novamente uma requisição ao mesmo conteúdo, que já se encontra
armazenado, ele recebe diretamente do cache, sem a necessidade de efetuar
uma nova busca dos dados na internet. O uso desse recurso pode trazer uma
rapidez maior ao acesso à internet, pois provavelmente o link do host
com o proxy é bem mais rápido do que deste com a internet;
Autenticação
- podemos restringir o acesso ao servidor
proxy com o uso da autenticação de usuários, de forma que seja melhorada
a segurança, já que somente usuários autorizados poderão acessar a
internet. Este recurso é bastante flexível e pode ser implementado de várias
maneiras, como uso do protocolo LDAP, SMB, módulos PAM, etc;
Registro de acessos
- os acessos são registrados em arquivos de
log, podendo esses serem utilizados para as mais diversas finalidades, que vão
desde a análise de performance do servidor, até a geração de relatórios
detalhados dos acessos à internet. Existem vários softwares
analisadores de logs do Squid capazes de gerar relatórios tão bons, que
por si já justificariam o uso do Squid, em razão do controle
proporcionado;
Controle centralizado
- com o uso do proxy temos a facilidade de
um único ponto centralizador do acesso à internet, o que torna a gerência
da rede mais fácil e eficiente. Uma única máquina é capaz de prover
acesso à várias outras;
Segurança
- como apenas o proxy está diretamente
ligado à internet, temos apenas uma (ou mesmo poucas, caso tenhamos mais de
um servidor proxy) máquina potencialmente vulnerável. Desta forma fica
mais fácil concentrar esforços na melhoria da segurança de apenas um
ponto na rede.
A base instalada do Squid é hoje muito grande,
sendo utilizado por empresas dos mais variados ramos e portes, vão desde
instalações para uso doméstico até grandes corporações, Governos, etc.
Isso mostra a credibilidade que este software livre possui.
4 - Proxy transparente
Cada software que precise acessar a
internet e esteja atraz de um proxy, precisa ter configuradas as informações
de endereçamento e porta onde o proxy da rede esteja ``ouvindo''. Entretanto,
usuários mais ``espertos'' podem querer fugir do controle do proxy e utilizar
uma outra maneira de acesso à internet, sem que este possa ser auditado e
controlado. Caso as configurações relativas ao proxy sejam retiradas do browser
ou outro utilitário pelo usuário, por exemplo, ele poderá se utilizar de um
outro meio para se conectar à internet sem nenhum controle, colocando em risco
a segurança da rede.
Uma das maneiras mais eficientes de implementação
de um proxy, levando-se em consideração a necessidade de controle, é com uso
da técnica denominada proxy transparente. Isto é feito com a utilização de
uma regra no firewall que efetua o redirecionamento das requisições
destinadas à internet ao servidor proxy. Esse redirecionamento faz com que não
mais precisem ser configurados os softwares com as informações do proxy,
pois o firewall se encarrega de redirecionar as requisições à redes
externas para o Squid, independente da vontade ou configuração do usuário. Além
disso realizar a configuração dos parâmetros do servidor proxy numa meia dúzia
de máquinas pode ser fácil e rapidamente feito, mas isto não é interessante
quando temos uma rede com uma quantidade muito grande de máquinas a serem
configuradas.
Para implementarmos esse redirecionamento
precisamos apenas inserir no Iptables, que é o software para criação
de firewall em Linux, a seguinte regra:
Se o redirecionamento for para uma máquina
diferente
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to
192.168.16.10:3128
Se o redirecionamento for para a mesma máquina
#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port
3128
Estas regras dizem ao firewall que todas
a requisições que entrarem pela interface eth0 (interface usada neste
caso apenas como exemplo), no nosso caso esta é a interface onde está ligada
nossa rede interna, destinadas a porta 80, que é a porta padrão do serviço
WWW, e que o protocolo seja o TCP, devem ser redirecionadas para a porta 3128,
que é onde nosso servidor proxy está ouvindo. No primeiro caso como o Squid não
está instalado na mesma máquina onde está o firewall este
redirecionamento é feito para a máquina com IP 192.168.16.10.
Feito o redirecionamento o Squid assume o
controle da conexão e aplica suas regras de forma que sejam liberados os
acessos apenas de acordo com as regras nele definidas.
Uma observação importante é que este recurso
de proxy transparente não funciona com a autenticação de usuário, portanto
cabe uma análise de qual dos dois será mais interessante para cada caso, já
que deveremos fazer uma escolha entre eles. Além do mais, alguns navegadores
podem não funcionar corretamente com o uso deste recurso, então sua adoção
deve ser avaliada antes da implementação, visto que alguns usuários poderão
ter problemas caso estejam usando estes navegadores que não atendem aos padrões.
Outro detalhe importante é com relação ao
fato de que é mais barato em termos de ciclos de CPU e uso da memória ter os
navegadores configurados explicitamente para usar um proxy, do que redirecionar
o tráfego como vimos. É também mais barato em termos de ciclos de CPU e uso
da memória bloquear a porta 80 ao invés de redirecionar o tráfego. O bloqueio
tem menos overhead que a redireção, e pode forçar as pessoas a
utilizar um proxy.
O uso do proxy transparente deve sempre que
possível ser evitado e usado apenas se não houver uma outra maneira mais prática
e eficiente de se fazer o que se pretende com o uso deste recurso.
5 - Autenticação no Squid
Por padrão, o controle de acesso é feito por
máquina, entretanto o Squid fornece mecanismos para ser efetuado um controle
por usuário, dessa forma cada usuário que deseje ter acesso à internet deverá
antes de tudo se autenticar no proxy, para que seu acesso seja liberado.
A autenticação poderá ser feita de várias
maneiras, como por exemplo, no formato NCSA (geralmente associado ao utilitário
htpasswd, o mesmo utilizado pelo Apache), ou ainda através de um
servidor LDAP, um PDC Windows NT/2000, ou módulos PAM, etc. A maneira mais
comum de realizar autenticação é com o uso do formato NCSA que usa o módulo ncsa_auth.
Para este trabalho nossa implementação foi baseada neste método.
O cadastro dos usuários para acesso ao Squid
é feito com o uso do utilitário htpasswd, conforme podemos ver
no exemplo abaixo, lembrando apenas que a opção -c deve ser usada
apenas caso o arquivo de senhas ainda não exista, pois ela instrui o utilitário
a criá-lo.
# htpasswd -c arquivo_de_senhas usuario
Para que o Squid forneça suporte a autenticação
devemos habilitar estas configurações no arquivo squid.conf através
da TAG auth_param. É nela que são realizadas as mudanças necessárias
para que o esquema de autenticação comece a funcionar, já que por padrão ele
não vem habilitado. No próprio arquivo tem comentários que mostram como isso
deve ser feito para cada tipo escolhido. Como vamos utilizar o método básico,
nossa configuração ficou assim.
A linha auth_param basic program /usr/lib/squid/ncsa_auth
/etc/squid/passwd especifica qual módulo será usado, no caso /usr/lib/squid/ncsa_auth
é onde se encontra o arquivo com os usuários e senhas gerado conforme
comentado acima. Em auth_param basic children 5 estamos definindo
quantos processos filhos do módulo de autenticação poderão existir, esse número
é o padrão do Squid, entretanto em redes maiores pode haver a necessidade de
um incremento deste, devido ao número provavelmente maior de usuários que
precisarão se autenticar simultaneamente. Em auth_param basic realm
Servidor Proxy Squid ARL configura-se a mensagem que aparecerá na tela
onde são fornecidas as informações do usuário para autenticação. Esta opção
é interessante para que possamos personalizar este mensagem da tela de login
do nosso servidor. E por último auth_param basic credentialsttl 2 hours
especifica a validade de uma autenticação bem sucedida.
Com estas configurações já temos nosso proxy habilitado
a trabalhar com autenticação de usuários, bastando para
isso que sejam feitas ACL's para isso e definidas as regras de acesso.