Configurando o Squid Transparent Proxy em uma máquina separada do roteador

1

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.

    
por rubjim 31.03.2015 / 19:17

1 resposta

0

Eu tenho esta configuração (ou perto dela) funcionando atualmente, mas com algumas diferenças. Em vez do CentOS, estou usando uma rota estática para capturar o tráfego na porta 80 para meu gateway pfSense e redirecioná-lo para outra caixa baseada em pfSense executando o Squid. A diferença com a minha configuração, é quando o pfSense Squid está configurado para fazer o proxy transparente, ele ouve conexões na porta 80 em vez do usual 3128. Você pode executar um netstat e ver se o Squid está escutando na porta 80 e tentar encaminhar para em vez disso.

Boa sorte.

    
por 06.04.2015 / 21:58