Como você força o linux a tratar um pacote tcp como se estivesse no ip de destino?

0

A situação:

  • Um pacote tcp chega na eth0 com o destino 8.8.8.8.
  • Este pacote atende a alguns critérios que me fazem querer interceptá-lo (digamos que estou interessado em todos os pacotes da fonte 10.0.0.5 ou em todos os pacotes na porta 80).
  • O pacote é destacado com uma regra iptables para que eu possa fazer algo interessante com ele.

Em vez de ignorar o pacote ou direcioná-lo ao seu destino correto, o que posso fazer para enviá-lo para a pilha ip local para que qualquer programa que esteja escutando na porta correta receba-o?

Para esclarecer: Eu não quero modificar o ip de destino do pacote, e eu não quero falsificar o ip de destino para toda a rede - eu só quero roubar pacotes que eu possa combinar com uma regra iptables.

Eu tentei o iptables -j REDIRECT mas parece não conseguir fazer isso
Eu também pensei em criar uma interface temporária que aceita pacotes de todos os ips e usando o iptables para enviar os pacotes do intrest para ele, mas de acordo com o que eu li isso fará com que o linux sele todos os pacotes que ele vê porque acha que tem um IP de destino válido para todos eles, mesmo se o roteamento estiver desativado.

A solução não precisa ser exclusiva para o tcp, desde que funcione com o tcp.

Existe alguma maneira de fazer isso?

    
por ninjarai4 30.01.2015 / 23:38

1 resposta

1

Deve ser possível fazer isso usando REDIRECT no IPTables. Há algumas coisas que não foram mencionadas sobre suas tentativas aqui, e que podem ter sido negligenciadas - isto é, para usar a cadeia de pré-formatação (ou cadeia de saída, mas provavelmente não aqui). Penso também que é necessário usar a tabela NAT:

  1. Você vai querer usar algo como iptables -t nat -A PREROUTING -i eth0 -p tcp --dportar 80 -j REDIRECIONAR - para porta 8000

  2. Você precisa de um programa em execução na porta 8000 na máquina local para realmente manipular o solicitações.

  3. Pode ser necessário ajustar sua pilha, por exemplo, ativar o encaminhamento de ip, ativar send_redirects dependendo do seu caso de uso.

Um pensamento para você - o que você está tentando fazer foi resolvido no Linux para "proxy transparente", então usando guias como este pode te dar um longo caminho em direção ao seu objetivo.

Você também pode querer limpar sua definição de "todos os pacotes na porta 80" - que provavelmente não funcionaria se a resposta fosse dada à pergunta que você fez - suspeito que você esteja falando de todos os pacotes destinados à porta 80 - que é muito diferente de todos os pacotes recebidos da porta 80 também.

    
por 31.01.2015 / 09:23