Homem no meio usando iptables

Homem no meio usando iptables

Desejo testar um subsistema que se comunica com outro subsistema via tcp. Eu usei o seguinte:

"iptables -A OUTPUT -p tcp --dport "+port_number" -j DROP"

parar o tráfego em uma porta para que eu pudesse, através de um script, enviar meus próprios dados para o sistema em teste. Isso funcionou muito bem.

Agora desejo, no entanto, encaminhar o tráfego para o meu script, em vez de simplesmente descartá-lo. Desejo então manipular os dados em meu script antes de encaminhá-los para o subsistema em teste.

Posso fazer isso usando iptables? Existe uma abordagem melhor?

Responder1

Você poderia tentar isso (o tráfego de entrada para a porta 1234será redirecionado para 4321o host local, onde seu script poderá escutar):

iptables -I INPUT -p tcp --dport 1234 -j ACCEPT
iptables -I INPUT -p tcp --dport 4321 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1234 -j REDIRECT --to-ports 4321

Se quiser acessar a porta 1234também da mesma máquina, você precisará adicionar uma OUTPUTregra, pois PREROUTINGnão é usada pela interface de loopback:

iptables -t nat -I OUTPUT -p tcp -o lo --dport 1234  -j REDIRECT --to-ports 4321

Agora, no servidor, você pode tentar ouvir nc -l 4321(aqui você pode usar seu próprio script). Em um cliente, tente nc server_host_name_or_ip 1234escrever qualquer coisa para verificar se o servidor está fazendo o redirecionamento corretamente.

Não se esqueça de salvar a iptablesconfiguração!

informação relacionada