Proxy Transparente com Squid / iptables

3

Estou tentando forçar um PC a usar um proxy de squid transparente remoto redirecionando todos os pacotes de saída para a porta 80 para o proxy squid, embora esteja tendo alguma dificuldade com a linha de comando exata do iptables.

O mini-HOWTO no link tem alguns bons links para os dois casos "extremos": um três ( ou mais) configuração da máquina que possui um cliente, roteador e proxy e uma configuração de máquina única, onde todos os três na mesma máquina.

Na minha configuração, eu tenho uma máquina (chamada foo), com um IP de 192.168.1.100. Normalmente, ele se conecta à Internet através de um roteador em 192.168.1.1, que faz NAT e tem um IP público. Neste caso, o foo também é conectado através de um túnel OpenVPN (o endereço do túnel do foo é 10.8.0.5/6) para uma máquina chamada bar (endereço remoto 10.8.0.1), que executa o squid. Eu quero usar iptables para encaminhar todos os pacotes de saída de foo para a porta 80 para proxy do squid da barra, na porta 3128.

Eu não consegui descobrir qual cadeia e quais destinos usar; todas as minhas tentativas foram ou ilegais (-A SAÍDA sem -t nat e -a-destino) ou simplesmente não fizeram nada de bom (várias combinações de -A PREROUTING, OUTPUT, POSTROUTING, etc).

EDITAR: O mais perto que eu cheguei foi:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to 10.8.0.1:3128

Agora, nenhum tráfego da porta 80 chega a lugar nenhum, mas pelo menos está sendo processado. Usar -A PREROUTING falha ... talvez porque os pacotes são originados localmente em vez de serem roteados pela máquina?

    
por Mikeage 14.05.2009 / 21:15

3 respostas

3

Se eu entendi corretamente, o que você quer fazer não será tratado simplesmente configurando o iptables. O alvo REDIR só pode ser usado para segmentar processos em execução no sistema local. Acredito que tentar usar um alvo DNAT para encaminhar a caixa do squid remoto removeria algumas das informações que a caixa remota do squid precisa para tratar adequadamente o pedido

Se você me permitir adivinhar um pouco. Eu acho que você está tentando deixar o gateway padrão como 192.168.1.1 em seu host e, em seguida, enviar seu tráfego de porta 80 através da vpn certo?

O squid remoto precisa de alguma configuração para poder atuar como um proxy transparente. Se você puder configurar o redirecionamento correto do iptables no host do squid, e o host remoto estiver no caminho da rede, então é possível usar algum roteamento avançado para encaminhar todas as solicitações da porta 80 através da VPN.

P.S. Se eu estou entendendo suas necessidades corretamente adicionar um comentário, eu posso atualizar minha resposta com mais detalhes sobre como configurar o roteamento.

    
por 14.05.2009 / 21:54
1

Vá para foo e faça isso: telnet 10.8.0.1 3128

Isso funciona? Nesse caso, a sua vpn funciona!

Você pode fazer um

GET / HTTP/1.1
Host: www.heise.de

Será exibida uma página? Então o squid está configurado para funcionar como proxy transparente!

Nesse caso, as regras simples do seu link devem funcionar:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.8.0.1:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d 10.8.0.1 -j SNAT --to iptables-box

(foo é a caixa iptables em que você está trabalhando)

Isso funciona?

    
por 15.05.2009 / 00:58
0

aqui você pode ver um breve artigo sobre proxy transparente com squid e iptables link

    
por 15.11.2009 / 08:15