Como posso redirecionar o tráfego da Internet do servidor local para o servidor proxy com tabelas ip (DEBIAN 6)?

2

Então fiz topologia como mostrado na figura.

O roteador tem 3 interfaces assim:

eth0 to internet side (with ip 192.168.1.10/24 gateway 192.168.1.254/24).

eth1 to server-PC side (with ip 192.168.20.1/28)

eth2 to Client side (with ip 172.16.20.1/29)

Servidor e cliente conectados e acessam a Internet do roteador-pc. O Server-pc usa um ip estático ( 192.168.20.2 ), enquanto o cliente obtém um ip automático do DHCP no router-pc

E eu quero configurar o iptables no meu Router-PC para redirecionar a Internet do cliente para o servidor Proxy no meu PC-Servidor. Então o cliente deve usar credencial para acessar a internet (eu já configurei o proxy de autenticação no meu squid e já configurei o proxy manualmente no lado do cliente).

O firewall que eu estou executando é:

iptables -t nat -A PREROUTING -p tcp -s 172.16.20.0/29 -j DNAT --to 192.168.20.2

192.168.20.2 é o endereço IP do meu servidor. Então, você pode me ajudar a consertar a configuração que fiz, de acordo com o que eu quero?

Desculpe pelo meu inglês ruim. Obrigado.

    
por Hanif Habibie 09.04.2015 / 15:35

1 resposta

1

Primeiro: por favor, note que o Debian 6 "squeeze" está fora do suporte desde 2013, e fora do suporte a longo prazo desde 2016. Usando o Debian 6 para prevenir o acesso à Internet desta forma é muito provável que seja ineficaz, devido a bugs de segurança que permitem que as restrições sejam contornadas, funcionalidade ausente que impossibilita a implementação dos conjuntos de regras solicitados ou ambos. Eu strongmente recomendo que você atualize seu sistema para uma versão Debian suportada, preferencialmente Debian 9 "stretch".

Segundo, combinar proxies autenticados com o modo proxy transparente não funciona tão bem. O problema é que o host final pode também exigir autenticação (por exemplo, porque você está efetuando login em um servidor DAV que requer autenticação em nível HTTP) e, em seguida, seu proxy transparente irá ou não comer credenciais, ou confundir-se com eles.

Em vez disso, o que sugiro é o seguinte:

  • Bloqueie todo o tráfego que não ultrapasse o proxy:

    iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 443 -j REJECT
    iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 80 -j REJECT
    

    Isso impede todo o tráfego da Internet que não ultrapasse o proxy.

  • Configure seu servidor DHCP para que ele envie um nome de domínio para os clientes:

    subnet 172.16.20.1/29 {
        (...)
        option domain-name "example.com";
    };
    

    (use seu nome de domínio local, não example.com aqui)

  • Configure seu servidor DNS para que ele saiba o nome do host wpad.example.com , que deve apontar para o seu roteador (novamente, substitua example.com pelo seu nome de domínio).
  • Crie um arquivo wpad.dat e forneça o seguinte conteúdo:

    function FindProxyForURL(url, host) {
        return "PROXY 172.16.20.1:3128";
    }
    

    Note que este é um JavaScript simples; Se você quiser usar um proxy diferente dependendo do URL de destino, basta modificar a função.

    Em seguida, exiba esse arquivo pelo HTTP no roteador, com o nome "/wpad.dat". Certifique-se de que o tipo MIME para esse arquivo seja application/x-ns-proxy-autoconfig ou application/x-javascript-config .

Com isso, os navegadores em sua rede serão configurados automaticamente para usar o proxy (desde que você tenha a opção "Detectar automaticamente as configurações" ativada, quando relevante) e não confundirão seus usuários com relação à autenticação.

    
por 22.05.2018 / 12:18