Índice das dicas

Configurando o proxy transparente nas novas versões do Squid

Criado 31/ago/2006 às 20h53 por Carlos E. Morimoto

6

O Squid permite compartilhar a conexão entre vários micros, servindo como um intermediário entre eles e a internet. Usar um proxy é diferente de simplesmente compartilhar a conexão diretamente, via NAT.

Ao compartilhar via NAT, os micros da rede acessam a internet diretamente, sem restrições. O servidor apenas repassa as requisições recebidas, como um garoto de recados. O proxy é como um burocrata que não se limita a repassar as requisições: ele analisa todo o tráfego de dados, separando o que pode ou não pode passar e guardando informações para uso posterior.

Um dos principais problemas de usar um proxy é que você precisa configurar manualmente cada micro da rede para utilizá-lo, o que é um trabalho cansativo e tedioso, sobretudo em grandes redes.

O Squid responde a este desafio com a possibilidade de criar um proxy transparente, onde o proxy se integra a uma rede já existente, acelerando a conexão, mas sem precisar de qualquer configuração nos clientes.

Ao usar um proxy transparente, você tem basicamente uma conexão compartilhada via NAT, com a mesma configuração básica nos clientes. O proxy entra na história como um adicional. Uma regra de firewall envia as requisições recebidas na porta 80 do servidor para o proxy, que se encarrega de responder aos clientes. Toda a navegação passa a ser feita automaticamente através do proxy (incluindo o cache dos arquivos do Windows update, downloads diversos e os pacotes instalados através do apt-get), sem que você precise fazer nenhuma configuração adicional nos clientes :).

Mesmo que alguém tente desabilitar o proxy manualmente nas configurações do navegador, ele continuará sendo usado. Basta usar o endereço IP do servidor rodando o proxy como gateway da rede.

Lembre-se de que, para usar o proxy transparente, você já deve estar compartilhando a conexão no servidor via NAT e, naturalmente, já deve estar com um servidor Squid configurado.

Você aprende a configurar o Squid em detalhes no capítulo 5 do livro Redes e Servidores Linux 2ed. Você pode também ler meu tutorial antigo, disponível no: http://www.hardware.com.br/tutoriais/configurando-servidor-proxy-squid/.

Para ativar o proxy transparente, rode o comando abaixo. Ele direciona as requisições recebidas na porta 80 para o Squid:

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
O "eth0" no comando indica a placa da rede local, onde o proxy recebe as requisições dos outros micros da rede e o "3128" indica a porta usada pelo Squid. Adicione o comando junto com os 4 comandos que compartilham a conexão no final do arquivo "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh" (no Debian) para que eles sejam executados durante o boot.Finalmente, você precisa ativar o suporte ao modo transparente dentro do arquivo "/etc/squid/squid.conf" e reiniciar o serviço.

É aqui que entra a parte principal desta dica. A partir do Squid 2.6 a configuração de proxy transparente mudou, tornando desatualizados a maioria dos tutoriais e dicas antigos. Se você está usando uma versão recente, do Squid 2.6 em diante, a configuração de proxy transparente é feita com uma única linha. Basta substituir a linha "http_port 3128" no início do arquivo por:

http_port 3128 transparent

Ou seja, na verdade você precisa apenas adicionar o "transparent", para que o Squid passe a entender as requisições redirecionadas pela regra do firewall.

No caso das versões mais antigas, anteriores à 2.6 (como a usada no Debian Sarge e no Ubuntu 5.10), você usa a receita antiga, onde é necessário adicionar as quatro linhas abaixo, no final do arquivo "/etc/squid/squid.conf" (neste caso, sem alterar a linha "http_port 3128"):

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Em qualquer um dos dois casos, você precisa reiniciar o serviço para que a alteração entre em vigor:

# /etc/init.d/squid restart

Em caso de dúvida sobre qual versão do Squid está instalada, use o comando "squid -v", que além de reportar a versão, informa todas as opções que foram usadas durante a compilação:

# squid -v

Squid Cache: Version 2.6.STABLE2configure options: '--prefix=/usr' '--exec_prefix=/usr' '--bindir=/usr/sbin' '--sbindir=/usr/sbin' '--libexecdir=/usr/lib/squid' '--sysconfdir=/etc/squid' '--localstatedir=/var/spool/squid' '--datadir=/usr/share/squid' '--enable-async-io' '--with-pthreads' '--enable-storeio=ufs,aufs,diskd,null' '--enable-linux-netfilter' '--enable-linux-proxy' '--enable-arp-acl' '--enable-epoll' '--enable-removal-policies=lru,heap' '--enable-snmp' '--enable-delay-pools' '--enable-htcp' '--enable-cache-digests' '--enable-underscores' '--enable-referer-log' '--enable-useragent-log' '--enable-auth=basic,digest,ntlm' '--enable-carp' '--with-large-files' 'i386-debian-linux' 'build_alias=i386-debian-linux' 'host_alias=i386-debian-linux' 'target_alias=i386-debian-linux'

Em resumo, você vai ter a conexão compartilhada via NAT no servidor e configurará os clientes para acessar através dela, colocando o servidor como gateway da rede. Ao ativar o proxy transparente, a configuração dos clientes continua igual, a única diferença é que agora (graças à nova regra do Iptables) todo o tráfego da porta 80 passará, obrigatoriamente, pelo servidor Squid. Isso permite que você se beneficie do log dos acessos e do cache feito pelo proxy, sem ter que se sujeitar às desvantagens de usar um proxy, como ter que configurar manualmente cada estação.

Uma observação importante é que esta configuração de proxy transparente não funciona em conjunto com o sistema de autenticação incluso no Squid. Ao usar o proxy transparente a autenticação deixa de funcionar, fazendo com que você precise escolher entre as duas coisas. Caso você precise combinar o uso de autenticação com o proxy transparente, você precisará utilizar outra solução, como o NatACL ou o NoCatAuth, que você encontra nos links: http://www.hostname.org/proxy_auth/ e http://nocat.net/.

6 comentáriosPor Carlos E. Morimoto. Revisado 31/ago/2006 às 20h53

Comentários

A opção "transparent" está obsoleta
Criado 30/set/2011 às 10h19 por Alberto (anônimo)
Carlos,

Parabéns pelo site, que sempre acesso, e pelo artigo.
Gostaria de só comentar um atualização.
A partir da versão 3.1 do Squid, a linha:

http_port 3128 transparent

deve ser substituída por:

http_port 3128 intercept
A opção "transparent" está obsoleta por Carl Gustav (anônimo)
Eu não entendi uma coisa...
Criado 22/dez/2010 às 16h48 por Rodrigo (anônimo)
Eu não entendi uma coisa: "você já deve estar compartilhando a conexão no servidor via NAT". Como faço esse compartilhamento? Que compartilhamento é esse?

Fiz alguns testes, estou usando o Fedora 14. Através do system-config-firewall eu usei a opção MASCARAR e selecionei minha eth1 (que está conectado diretamente no router/internet). Feito isso, meu linux compartilhou a Internet para todos os computadores da minha rede que tem como gateway o IP do meu linux. Isso é compartilhar a conexão no servidor via NAT?

Após os passos acima, executei o comando "#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128" e também dei restart no squid com a opção "transparent" digitada, e não funciona. Como testei isso? O teste foi simples: digitei "http_access deny all" no squid e restartei o serviço; no client configurei o proxy na porta 3128 no firefox, testei digitando www.uol.com.br e bloqueou (perfeito! o squid está funcionando); no outro navegador, não configurei o proxy, e o site não foi barrado. Ou seja, concluo que fiz algo errado ou tá faltando alguma explicação neste tópico.

Alguém tem alguma sugestão?
Sugestão por Igor Rocha (anônimo)
squid facil !! por José Rodrigues Filho (anônimo)
Meus parabéns
Criado 26/dez/2010 às 19h16 por Igor Rocha (anônimo)
Carlos bom dia,
Primeiramente quero lhe dar meus parabens pela enorme sabedoria
que você tem!
Eu sou iniciante no Linux, e quase tudo o que eu ja aprendi, consegui
conquistar lendo seus livros e seguindo suas dicas...

Apenas lendo eles ja tenho uma rede com 10 micros onde existe um servidor principal
rodando o squid (versão 3),dhcp,ssh,apache2,bind tudo num unico servidor (de configuração razoavel),
uso nele o Debian e não tive problema algum em configurá-lo, realmente não é querer dar uma
de puxa saco, mas no Linux depois que se entende a estrutura dos diretórios, os comandos (nem que seja o basico) fica tudo mais facil do que no mundo da MS!!!!

Sem contar que por as configurações serem feitas em modo texto tudo fica mais rapido e agil!!!
assim facilitando e muito o serviço!!!!

Espero que tu continue desenvolvendo esse trabalho maravilhoso, e explicando dessa maneira.(simples e util)..

Cara grande abraço de um fã...