Proxy transparente que preserva o endereço MAC do cliente [fechado]

1

Eu tenho um cliente que deseja interceptar o tráfego SSL quando sai da rede. Minha solução proposta é configurar um proxy que seja transparente e a camada 2 e a camada 3 para que ele possa ser simplesmente descartado em sua rede sem qualquer alteração na configuração necessária. O proxy tem duas NICs, uma conectada ao servidor e a outra ao cliente. O cliente, o proxy e o gateway estão sob controle do cliente, o servidor não está.

Por exemplo:

client --- Proxy --- gateway -|- server

Eu tenho meu programa proxy configurado com a opção de soquete IP_TRANSPARENT para responder às conexões destinadas a um IP remoto.

Estou usando a seguinte configuração:

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --on-port 3128 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -p tcp -j MARK --set-mark 1
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1

O cliente em questão está em sua própria sub-rede e foi configurado para que o proxy seja o gateway padrão.

O resultado é:

  1. Cliente envia um quadro para o proxy; IP de origem é cliente, MAC de origem é cliente, IP de destino é servidor, MAC de destino é proxy
  2. O proxy encaminha esse quadro para o gateway; IP de origem é proxy, fonte mac é proxy, IP de destino é servidor, destino é gateway
  3. O Gateway encaminha isso para o servidor e recebe uma resposta de volta.
  4. O gateway envia a resposta de volta ao proxy; IP de origem é servidor, MAC de origem é gateway, IP de destino é proxy, MAC de destino é proxy
  5. O proxy encaminha essa resposta ao cliente. IP de origem é servidor, fonte mac é proxy, IP de destino é cliente, destino mac é cliente. A configuração tproxy e iptables permite que o proxy envie pacotes com um endereço IP não local.

Existe alguma maneira de tornar algo transparente no nível do endereço MAC? Ou seja, coloque o cliente na mesma sub-rede que o gateway. O gateway vê o IP e o Mac de origem como os do cliente, mesmo que tenham se originado do proxy. Isso poderia ser feito configurando o proxy como uma ponte, em seguida, usar ebtables para escalar o tráfego a ser tratado pelo iptables?

Quando eu uso o ebtables para empurrar algo para o iptables, parece que meu programa proxy não responde aos pacotes, pois eles são destinados ao endereço mac dos gateways, não aos do proxy.

Quais são alguns outros caminhos possíveis que eu poderia investigar?

EDIT: Quando o cliente e o gateway estão em sub-redes diferentes (e o cliente definiu o proxy como o gateway), ele funciona conforme descrito em 1 a 5. Mas eu quero saber se é possível ter o cliente e o gateway na mesma sub-rede e ter o proxy totalmente transparente (ou seja, o cliente não está ciente do proxy). O cliente não quer mover alguns clientes para uma sub-rede diferente, eles só querem uma queda na solução. Obrigado!

EDIT 2: Eu posso configurar o proxy como uma ponte usando brctl, mas não consigo encontrar uma maneira de direcionar esse tráfego para o meu programa de proxy - perguntado aqui Possível para ponte de linux interceptar tráfico? . Atualmente, com a descrição numerada de 1 a 5, opera na camada 3; é transparente no lado do cliente (o cliente acha que está falando com o IP do servidor), mas não no lado do gateway (o gateway está falando com o IP do proxy). O que eu quero descobrir é, é possível fazer isso funcionar na camada 2, então é totalmente transparente? Quais são as opções disponíveis que eu deveria pesquisar? Obrigado

EDIT 3: esclareceu a situação com mais detalhes.

    
por A G 30.08.2012 / 16:08

1 resposta

1

Se as máquinas estiverem na mesma sub-rede, a resposta é não. Dentro de uma sub-rede, o protocolo ethernet entrega os pacotes de máquina para máquina e, na camada ethernet, o endereço MAC é o verdadeiro endereço de origem e os endereços IP são desconhecidos.

    
por 31.08.2012 / 16:15