Reenvío de un puerto específico

Reenvío de un puerto específico

Intenté reenviar una ip:puerto específica a una ip:puerto específica en una máquina Linux. Usé iptables con el siguiente comando:

iptables -t nat -A OUTPUT -p tcp -d 10.0.2.5 --dport 80 -j DNAT --to-destination 69.31.21.42:80

10.0.2.5 es una dirección arbitraria que elegí para ver si el comando funciona y 69.31.21.42 es una dirección de un sitio web público. Luego verifiqué que el reenvío funcionaba: corrí nmap -p 80 10.0.2.5y obtuve un resultado positivo. Muy bien hasta ahora. Sin embargo, luego intenté correr nmap -p 81 10.0.2.5y también obtuve un resultado positivo. Eso no es lo que esperaba, ya que quería que solo se reenviara el puerto 80. Corrí iptables -t nat -Ly noté que, efectivamente, todo el host 10.0.2.5 está asignado a 69.31.21.42:80:

Chain OUTPUT (policy ACCEPT)
target     prot opt source     destination
DNAT       tcp  --  anywhere   ip-10-0-2-5.ec2.internal  tcp dpt:http to:69.31.21.42:80

¿Qué falta en mi comando iptables? ¿Por qué no --dportfunciona?

Respuesta1

Necesitas usar POSTROUTINGla cadena para hacer lo que quieres hacer.

iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.5 --dport 80 -j SNAT --to 69.31.21.42:80

hombre iptables

and POSTROUTING (for altering packets as they  are  about  to  go
                  out)

Respuesta2

En primer lugar, sepa que no es posible reenviar TCP IP:Puerto a otro IP:Puerto. Esto sólo es posible con UDP y hay un script Perl separado para eso.

Sí, puedes reenviar una IP directamente a otra máquina, no a un puerto específico.

información relacionada