iptables port-mirroring

7

Eu preciso conseguir uma cópia dos pacotes recebidos na porta 8001 para a porta 8002. Eu tentei o seguinte, mas recebo um erro que --tee é indefinido.

sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee
    
por Parikshit 30.06.2011 / 14:59

2 respostas

6

O --tee flag não faz parte da cadeia DNAT, faz parte do ROUTE. Você só pode usá-lo após uma declaração de -j ROUTE . Você pode obter ajuda específica do iptables sobre o assunto assim:

 $ iptables -j ROUTE help

Eu estava olhando para o seu comando iptables, e isso não faz sentido para mim. Por que você está tentando combinar com a origem e a porta de origem de um pacote quando, na sua pergunta, você disse "packegs received on port"? Você está tentando dividir o tráfego de entrada para atingir duas portas ou obter a saída de uma porta e vinculá-la à entrada de outra?

Se o primeiro, há realmente dois passos. Você não pode usar tee para obter uma cópia do pacote E mangle o pacote para alterar os números de porta ao mesmo tempo. Você pode tentar isso em duas etapas, primeiro enviando a si mesmo uma cópia duplicada do pacote, depois combinando apenas a cópia e desconfigurando a porta de destino. AVISO: não testado, considere este pseudo-código:

$ sudo iptables -A PREROUTING -t mangle -p tcp -s !127.0.0.1/32 --dport 8001 -j ROUTE --gw 127.0.0.1 --tee
$ sudo iptables -A POSTROUTING -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002
    
por 30.06.2011 / 15:13
6

Além da resposta do Caleb , se você estiver trabalhando com o mais novo iptables (v1.4.14) que não tem mais o alvo ROUTE você precisará de algo como o seguinte, testado no Debian Wheezy *:

iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1 --dport 8001 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

Teste usando "netcat" ( man nc ). Em uma janela do terminal, digite o seguinte e pressione a tecla Enter :

nc -l 8002

O comando aguardará a entrada que você digitará em uma segunda janela de terminal.

Na segunda janela do terminal s, digite o seguinte e pressione a tecla Enter :

nc 127.0.0.1 8001

O comando aguardará mais entrada. Digite qualquer coisa e pressione a tecla Enter . Depois de pressionar a tecla Enter na segunda janela do terminal, o texto que você digitou na segunda janela do terminal deve aparecer na primeira janela do terminal. Pressione Ctrl -c na segunda janela para finalizar a sessão.

* Esta sintaxe é não suportada no RHEL / Centos (6.5 ou anterior) :-( então você precisa usar socat para tee e encaminhar pacotes de entrada na porta original para duas novas portas Se você tivesse processos escutando na porta de recepção original, então você precisa reconfigurá-los para escutar em uma das portas tee, já que socat é agora o ouvinte na porta original. Consulte Esta postagem SE por exemplo socat de sintaxe para clonagem de portas.

    
por 17.12.2014 / 08:56