Tabela de conteúdo |
O Squid é um software feito para fazer proxy de web e ftp, suporta cache, autenticação simples, ntlm, ldap, dentre outros.
Essa é a estrutura esperada para nosso servidor de Proxy:
REDE LAN
||
\/
Proxy Squid (IP_LAN:3128)
||
\/
REDE WAN
note que o Squid fuciona tanto como um sistema de cache para melhorar a eficiência da navegação de Internet sem a necessidade de redownload, bem como um filtro para evitar a navegação por sites proibidos na sua rede.
No Debian Lenny temos 2 pacotes que fornecem o Squid, o pacote: squid e o pacote squid3, o que muda no caso é a versão e fica a gosto de quem está configurando, vamos instalar o mais estável:
# apt-get install squid
feito isso, o Proxy já deve estar executando e escutando a porta 3128 (padrão).
Quem apenas precisa que os sejam realizados filtros sem autenticação a forma mais rápida e torná-lo transparente e redirecionar o tráfego da porta http (80) para a porta proxy (3128). No Squid altere apenas a linha abaixo:
http_port 3128
e adicione:
http_port 3128 transparent
basta reiniciar o serviço e já teremos nosso Proxy transparente, falta agora redirecionar o tráfego, a regra do Iptables abaixo faz o serviço:
# iptables -t nat -A PREROUTING -p tcp --dport http -j REDIRECT --to-port 3128
pronto, nosso tráfego está sendo redirecionado.
Nosso Proxy está bem simples e restringe apenas algumas páginas, nosso objetivo agora é liberar mediante senha sites, mas os usuários e senhas correspondentes estão em uma base OpenLDAP.
Primeiro é necessário checar se nosso Proxy se conecta no servidor LDAP:
# /usr/lib/squid/ldap_auth -D "cn=admin,dc=exemplo,dc=com,dc=br" -w SENHA \
-b "dc=exemplo,dc=com,dc=br" -s sub -f "uid=%s" -h servidorldap.exemplo.com.br -v 3
vai ficar a linha em branco, você deve digitar:
USUARIO SENHA
com espaço entre usuário e senha, a saída depois que der ENTER deve ser:
OK
agora vamos editar o /etc/squid/squid.conf e colocar a linha que vai chamar a conexão com o OpenLDAP:
auth_param basic program /usr/lib/squid/ldap_auth -D "cn=admin,dc=exemplo,dc=com,dc=br" \ -w SENHA -b "dc=exemplo,dc=com,dc=br" -s sub -f "uid=%s" -h servidorldap.exemplo.com.br -v 3 acl ldapauth proxy_auth REQUIRED http_access allow ldapauth
quando você quiser que uma regra bloqueada seja acessada pelo usuário do OpenLDAP:
acl blocked-sites url_regex -i "/etc/squid/blocked-sites" http_access deny blocked-sites !ldapauth
que vai bloquear os sites que estão no arquivo blocked-sites, e vai pedir senha para liberar caso seja um usuário autenticado positivamente no OpenLDAP.
Estamos tendo problemas com centralização das regras dos servidores deu Proxy, pensando nisso, a centralização seria a melhor solução para:
para que isso funcione vamos usar a regra external_acl_type que nos permite usar um script em shell para buscar as regras e é assim que vamos fazer as consultas no banco.
Vamos criar este script primeiro:
#!/bin/bash
export PGPASSWORD="SENHA"
while read url
do
CMD=$(echo "select domain from ${1} where '${url}' ilike '%' || domain || '%';" \
| psql --username=USUARIO -h ENDERECO_HOST -p 5432 -d BANCO_DE_DADOS \
| egrep -v "domain|^-|^\(|^$" | sed -e "s/ //g")
if [ $CMD ]
then
echo "OK"
else
echo "ERR"
fi
done
e as regras de acls:
external_acl_type sql_porn_domain %DST /etc/squid/modulo/sql-consult.sh TABELA acl porn_domain external sql_porn_domain
agora basta definir que esta acl é bloqueada:
http_access deny porn_domain
pronto, suas regras vão ficar no banco de dados.
Apenas para ficar bem completo, o script que criamos lê seguinte banco de dados:
CREATE SEQUENCE NOME_seq;
CREATE TABLE NOME(
id integer PRIMARY KEY DEFAULT nextval('NOME_seq'),
domain CHAR(100) UNIQUE NOT NULL
);
agora basta cadastrar os sites com o SQL:
INSERT INTO NOME(domain) VALUES ('dominio.com');
pronto, nossa centralização com banco de dados para o Proxy está pronto.
Como estamos usando o Clamav mais recente que está no Volatile do Debian, o HaVP correspondente no repositório Stable não funciona mais, por isso fizemos um backport do Squeeze para o Lenny. Primeiro baixe o pacote correspondente a sua arquitetura:
vamos instalá-lo:
# dpkg -i Havp_0.91-1.1_i386.deb
feito isso, se ele der algum erro por falta de dependências resolva com o comando:
# apt-get -f install
a configuração do HaVP é simples, veja seu arquivo de configuração:
SERVERNUMBER 40 MAXSERVERS 100 ACCESSLOG /var/log/havp/access.log ERRORLOG /var/log/havp/havp.log LOG_OKS false TEMPDIR /var/tmp TRANSPARENT false PARENTPROXY localhost PARENTPORT 3128 FORWARDED_IP true PORT 8080 BIND_ADDRESS 127.0.0.1 TEMPLATEPATH /etc/havp/templates/br SCANIMAGES false MAXSCANSIZE 5000000 KEEPBACKBUFFER 200000 ENABLECLAMLIB true ENABLECLAMD false
tem diversos outros módulos de suporte aos antivirus proprietários, mas como todos estarão desabilitados omitimos na configuração. O número definido em ServerNumber tem a ver com a quantidade de máquinas atrás do seu servidor de Proxy, para quantidades superiores a 500 computadores, 40 é o recomendado.
No Squid devemos colocar a seguinte entrada:
acl HTTP proto HTTP cache_peer 127.0.0.1 parent 8080 0 no-query no-digest no-netdb-exchange default cache_peer_access 127.0.0.1 allow all always_direct deny localnet HTTP always_direct allow all never_direct allow localnet HTTP never_direct deny all
onde localnet são as redes privadas da sua rede local.
Existe um pacote no Debian Lenny que ajuda o Squid conforme o usuário vai navegando na Internet, o Prefetch vai buscando os links seguintes e com isso quando o usuário entrar já vai estar no seu Proxy, isso da a impressão ao usuário que o acesso foi mais rápido, mas com isso você aumenta um pouco o processamento no servidor e também não vale a pena se seu espaço para cache é pequeno. Vamos instalar o pacote então:
# apt-get install squid-prefetch
o seu arquivo de configuração está em: /etc/squid-prefetch.conf, veja como ficou nossa configuração para um bom funcionamento com o Proxy configurado:
squid_config_file /etc/squid/squid.conf http_host 127.0.0.1 http_port 3128 max_history_size 5000 max_history_age 86400 prefetch_regex http://.*(\.(html?|te?xt)|/[^\.]*) prefetch_options 0 prefetch_fragments 1 prefetch_maxsize 65536 prefetch_cross 0
basta reinicializar o serviço e deixar o Prefetch cachear as páginas para você:
# /etc/init.d/squid-prefetch restart
pronto, nosso usuário agora vai ter uma impressão de navegação mais rápida.
Por algum motivo o Squid3 que está disponível no Stable do Debian Lenny não funciona com o HaVP e nem com nosso backport e as configurações de cache do Youtube também apresentam problemas.
--Brivaldo 16h58min de 21 de novembro de 2010 (UTC)