Como seqüestrar tráfego para uma porta usando iptables

1

Eu tenho um aplicativo escutando na porta 2000. Eu quero proxy todo o tráfego para esta porta (originando localmente) para uma porta diferente, digamos 4000.

Agora eu estou fazendo algo assim.

iptables -t nat -A OUTPUT -p tcp --dport 2000 -d 127.0.0.1 -j DNAT --to-destination 127.0.0.1:4000

Isso funciona enquanto não houver nada em 2000. se eu fizer telnet para 2000, o tráfego será roteado para 4000 como esperado. Mas, se houver algo que escute em 2000, o tráfego não será seqüestrado ou intermediado por proxy. Existe uma maneira de conseguir isso?

    
por deadc0de 19.06.2017 / 08:04

1 resposta

1

Parece que a versão nc que você está usando usa o IPv6 por padrão. Quando você tem nc ouvindo na porta 2000, o cliente se conecta a essa instrução ignorando sua regra DNAT somente IPv4.

Quando nada está escutando na porta 2000, ele ainda tenta se conectar a isso usando o IPv6, mas falha, e então retorna para o IPv4, onde a regra DNAT irá enviá-lo para a instância que estiver escutando na porta 4000.

A melhor solução que posso imaginar no momento é simplesmente criar regras equivalentes para IPv4 e IPv6:

iptables -t nat -A OUTPUT -p tcp --dport 2000 -d 127.0.0.1 -j DNAT --to-destination 127.0.0.1:4000
ip6tables -t nat -I OUTPUT -p tcp --dport 2000 -d ::1 -j DNAT --to-destination '[::1]:4000'
    
por 19.06.2017 / 09:03

Tags