Como habilitar o redirecionamento transparente de HTTP / S através de proxy usando iptables?

2

Minha configuração atual consiste nos seguintes elementos:

  • Um roteador piscou com OpenWRT com duas interfaces: eth0 é o acesso ao gateway e eth1 gerencia a rede local (192.128.2.0/24)
  • Uma caixa (que não pode ser usada no modo bridge), configurada para permitir o roteador em sua DMZ (192.168.1.0/24)
  • Um servidor privoxy instalado e em execução no roteador, ouvindo na porta 4000 (interface eth1 )

Quando configuro os clientes em eth1 para usar 192.168.2.1:4000 como um proxy HTTP e HTTPS, tudo corre bem. No entanto, minhas tentativas de usar o iptables para automatizar esse processo de redirecionamento falharam até o momento. Aqui está a última tentativa que fiz:

iptables -t mangle -A PREROUTING -i eth1 -p tcp -m multiport --dport 80,443 -j TPROXY --on-ip 0.0.0.0 --on-port 4000 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -d 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -m multiport --sport 80,443 -j MARK --set-mark 1/1

Meu entendimento é o seguinte:

  1. A primeira regra marca os pacotes HTTP / S (dport = 80 ou 443) provenientes dos clientes locais e os redireciona para o servidor proxy
  2. A segunda e a terceira regras permitem o tráfego local entre as duas redes locais
  3. A última regra marca o tráfego de entrada restante com a marca 1/1

Em seguida, usei ip para definir uma rota para o roteamento de políticas com base na marca configurada com iptables :

ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1

E é claro que não funciona e eu nem sei porque ... Talvez o meu servidor proxy não suporte o recurso TPROXY e eu deva ir com apenas MARK regras ... Mas mesmo então estou um pouco perdido aqui.

    
por Rerito 25.11.2015 / 21:45

1 resposta

3

Primeiro de tudo, dê uma olhada aqui: Conceitos de cache de interceptação para ter alguma idéia sobre o vantagens, desvantagens ou possíveis problemas de uso de proxy transparente.

Em segundo lugar, o tráfego HTTPS ou ssl não funcionará com um proxy transparente normal. Você precisa ter uma configuração especial chamada ssl-bump , que tem seus próprios problemas a serem considerados em relação à privacidade.

Terceiro,

  • se você tiver sua configuração do squid corretamente para o modo transparente / interceptado (em execução na porta 3128) e
  • assumindo eth0 como external e eth1 como interface interna (lan, 192.168.1.0/24), aqui estão duas regras iptables para redirecionar o tráfego http:

    iptables -t nat -A PREROUTING -i eth1 -p tcp --dportar 80 -j DNAT - para 192.168.1.1:3128

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dportar 80 -j REDIRECIONAR - para porta 3128

Isto é sem usar o Tproxy.

    
por 25.11.2015 / 23:54