Irei apresentar a primeira parte do artigo.
Observação: os creditos deste artigo vai para:
Antonio Claudio Sales Pinheiro
Uso e configuração do Squid - Parte 1
Resumo
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
#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
#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.
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Servidor Proxy Squid ARL
auth_param basic credentialsttl 2 hours
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.
/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.
Nenhum comentário:
Postar um comentário