Como explicado no título, estou tentando configurar um proxy transparente do Squid em uma máquina separada do roteador e também separado da rede privada que desejo filtrar por meio do proxy.
O contexto seria assim:
-
A Máquina do roteador executa o CentOS 6.0 com as políticas do iptables aplicadas.
-
A interface da WAN é eth0. A interface eth3 conecta a rede que contém o servidor proxy e eth2 é a interface de rede privada.
-
As regras do Iptables são aplicadas para aceitar tráfego nas redes privadas.
-
A versão do Squid é 3.5.2 e está sendo executada no CentOS 7.0.
Algo importante: o proxy funciona perfeitamente se configurado manualmente no navegador do cliente e sem o sinalizador transparente no arquivo squid.conf.
Os problemas começam a surgir quando tento tornar o proxy transparente.
Isso é o que eu já tentei:
Na máquina do roteador, apliquei a seguinte regra do iptables:
$ iptables -t nat -I PREROUTING 1 -i eth2 -s private-ip -p tcp --dportar 80 -j DNAT - para o squid-ip: 3128
Primeiro pensei que isso seria suficiente, pois funcionava perfeitamente quando configurado manualmente e a única diferença agora é que preciso redirecionar o tráfego para a máquina de lula. Mas não foi como eu esperava.
Executando alguns testes com o tcpdump no roteador, percebi que sem o flag transparente, a máquina proxy conhece o caminho para a Internet e volta para a máquina do cliente por meio do roteador (privateIP > router > proxyServer > router > ; internet | e de volta | > router > proxyServer > router > privateIP).
Mas com o sinalizador transparente os pacotes só passam pelo roteador e pelo proxy e depois voltam novamente para a máquina do cliente ignorando completamente o arquivo squid.conf bloqueando tudo, assim, nenhum pacote sai do proxy para ir para a internet (privateIP > router > proxyServer > router > privateIP). Parece que o proxy do squid não sabe o que fazer com o tráfego de entrada, então ele não pode lidar com petições corretamente agora que está configurado para ser transparente e não está localizado no gateway.
Eu pensei que precisava de uma regra POSTROUTING para executar o SNAT e alterar o endereço de origem para que o tráfego de entrada da Internet também passasse pelo proxy, mas nenhum pacote realmente fosse para a Internet, então agora estou presa.
Talvez haja algo que o squid realiza automaticamente quando não está no modo transparente que preciso configurar manualmente quando o defino como transparente.
Qualquer ajuda seria apreciada.