Man no meio usando iptables

2

Eu gostaria de testar um subsistema que se comunica com outros subsistemas via tcp. Eu usei o seguinte:

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

para interromper o tráfego em uma porta para que eu pudesse, por meio 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. Eu, então, desejo manipular os dados no meu script antes de encaminhá-los para o subsistema em teste.

Posso fazer isso usando o iptables? Existe uma abordagem melhor?

    
por Baz 05.05.2015 / 10:17

1 resposta

0

Você poderia tentar isso (o tráfego de entrada para a porta 1234 será redirecionado para 4321 no host local, onde você pode ter seu script escutando):

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 você quiser acessar a porta 1234 da mesma máquina, precisará adicionar uma regra OUTPUT , já que PREROUTING não é usado 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 com nc -l 4321 (aqui você pode usar seu próprio script). Em um cliente, tente nc server_host_name_or_ip 1234 e escreva qualquer coisa para verificar se o servidor está fazendo corretamente o redirecionamento.

Não se esqueça de salvar a configuração iptables !

    
por 05.05.2015 / 10:53