Configurando o squid e iptables para proxy transparente


Introdução:
Proxy transparente é uma forma de se implementar um proxy em uma rede sem que haja a necessidade de configurá-lo nos aplicativos clientes. Na verdade, na maioria das vezes o cliente nem se dá conta de que há um proxy na rede, a menos que haja algum controle limitando acesso. Embora alguns (a maoiria?) dos profissionais não goste do proxy transparente (e eu me incluo nessa turma), algumas vezes é um mal necessário.

Funcionamento:
No modo normal de proxy, os equipamentos são configurados explicitamente para enviar os dados para o proxy. No proxy transparente, os equipamentos não sabem da existência do proxy. Assim, eles enviam os dados para o gateway da rede, que intercepta os dados e os envia para o proxy.

Observação:
Devido ao fato do cliente não saber da presença do proxy, não é possível utilizar autenticação no squid com proxy transparente (o cliente não tem como enviar os dados para um equipamento que ele não sabe que está lá ...). Existem porém outras alternativas como o NoCat.net/ .

Habilitando:
São necessárias duas configurações: habilitar o squid para trabalhar em modo transparente e realizar o desvio dos dados no firewall/gateway (aqui veremos a configuração do iptables). 

Configurando o squid:
Existem duas formas de realizar a configuração, dependendo da sua versão do squid. Todas as configurações são realizadas no arquivo de configuração do squid (normalmente em /etc/squid/squid.conf)

Versão 2.6 (e anteriores):
http_port 3128
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
Versão 2.7 em diante:

http_port 3128 transparent # (beeem mais simples, não é?)

Configurando o IP Tables (independente da versão do squid):

Considerações:
O endereço IP do servidor com o squid é 10.10.14.2, o squid está rodando na porta 3128 e a interface de rede do firewall conectada à rede local é a eth0.

1) Se o squid ficar na mesma máquina que o FW (não recomendável por questões de segurança)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
2) Se o squid ficar em uma máquina diferente (recomendado)
iptables -t nat -A PREROUTING -i eth0 -p tcp -s !10.10.14.2 --dport 80 -j DNAT --to-destination 10.10.14.2:3128

3 comentários:

Reborn disse...

Fala Professor, desculpa se coloquei errado rsrrs, mas queria saber algum jeito de bloquear o gtalk do gmail pelo iptables, tenho tentando varios comandos sem sucesso. Seu site está de parabéns.

Anônimo disse...

Bom dia! Estou montando um fw com squid e iptable, minha maquina possui duas placas de rede....eth0(internet) e eth1(LAN)....gostaria de saber como faço para direcionar os pacotes da rede LAN para passar pelo proxy (porta 3128)..posso direcionar tudo, do firewall, da porta 80 pra 3128 que mesmo os pacotes da rede lan irão ser tratados desta forma?..estou com esta dúvida...se puder me ajudar eu agradeço muito.

Leandro Paulo disse...

Bom dia! Estou montando um fw com squid e iptable, minha maquina possui duas placas de rede....eth0(internet) e eth1(LAN)....gostaria de saber como faço para direcionar os pacotes da rede LAN para passar pelo proxy (porta 3128)..posso direcionar tudo, do firewall, da porta 80 pra 3128 que mesmo os pacotes da rede lan irão ser tratados desta forma?..estou com esta dúvida...se puder me ajudar eu agradeço muito.