Suponha que os pacotes TCP sejam enviados para o ip de destino (dest_ip) e possam ser eliminados pelo seguinte comando:
iptables -A INPUT -d dest_ip -p tcp -j DROP
Mas quando eu tento redirecionar o pacote usando o iptables NAT para um ip diferente (diff_ip), o pacote ainda chega ao destino antigo (dest_ip):
iptables -t nat -A PREROUTING -d dest_ip -p tcp -j DNAT --to-destination diff_ip
Existe algo sobre o iptables que eu não entendo muito bem aqui, já que estou esperando que o pacote não alcance mais o dest_ip. Alguém pode por favor explicar por que isso é assim? Obrigado.
Informações adicionais que podem ser relevantes:
/ proc / sys / net / ipv4 / ip_forward já está definido como 1
ifconfig mostra duas interfaces: eth0 e lo; dest_ip está em eth0 e diff_ip é um ip remoto
UPDATE 1: testes adicionais usando o telnet
Um ouvinte usando socat é estabelecido em 12800 para receber a mensagem telnet:
socat -u TCP-LISTEN:12800,reuseaddr,keepalive,reuseaddr OPEN:/tmp/output.txt,creat,append
A conexão Telnet é feita com mensagens aleatórias:
telnet 127.0.0.1 12800
1) teste usando:
iptables -A INPUT -p tcp --dport 12800 -j DROP
resultado: todas as mensagens do telnet são descartadas conforme confirmado pelo contador:
iptables -L INPUT -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2 120 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:12800
2) teste usando:
iptables -t nat -A PREROUTING -p tcp --dport 12800 -j DNAT --to-destination remote_ip
resultado: todas as mensagens chegam na porta 12800 sem serem redirecionadas, o que é confirmado pelo contador:
iptables -L PREROUTING -t nat -v -n
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:12800 to:remote_ip
ATUALIZAÇÃO 2:
teste adicional usando telnet (veja acima) mas com regras iptables na cadeia OUTPUT:
iptables -t nat -A OUTPUT -p tcp --dport 12800 -j DNAT --to-destination remote_ip
resultado: todas as mensagens são redirecionadas com sucesso, conforme confirmado pelo contador:
iptables -L OUTPUT -t nat -v -n
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
3 180 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:12800 to:remote_ip
Isso está começando a fazer sentido, já que o telnet é um processo local e sua saída deve ir diretamente para a cadeia OUTPUT. No entanto, isso levanta outra questão: de acordo com a atualização 1, as mensagens telnet também podem ser descartadas na cadeia INPUT, então, como exatamente os pacotes estão viajando? SAÍDA - > INPUT?