El puerto iptables REDIRECT funciona localmente pero no desde fuera.

El puerto iptables REDIRECT funciona localmente pero no desde fuera.

Tengo un servidor que solo puede escuchar el puerto 23006. Quiero acceder a él desde afuera y por el puerto 443.

Tengo la configuración systemctl:

$ sudo sysctl --system
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /usr/lib/sysctl.d/99-protect-links.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
kernel.pid_max = 4194304
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.route_localnet = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.route_localnet = 1

Si ejecuto otro servidor de prueba para escuchar en el puerto 443, funciona y puedo acceder a él desde afuera. Pero es sólo un servidor de prueba y no mi programa de servidor real.

Si ejecuto socat:

sudo nohup socat TCP-LISTEN:443,pktinfo,fork TCP:127.0.0.1:23006

Funciona y puedo acceder a él desde fuera. Pero mi servidor no ve la dirección IP real del cliente.

Si ejecuto curl en el puerto 23006, mi servidor real responde:

$ curl 127.0.0.1:23006
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

Si ejecuto este comando de iptables:

sudo iptables -t nat -A OUTPUT -o lo -p tcp --dport 443 -j REDIRECT --to-port 23006

entonces también puedo acceder a mi servidor a través del puerto 443 pero SÓLO desde local:

$ curl 127.0.0.1:443
<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx/1.24.0</center>
</body>
</html>

El problema es: no puedo acceder a mi servidor desde fuera en el puerto 443. Por favor ayuda. Gracias de antemano.

Respuesta1

sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 23006

Respuesta2

Si quieres redirigirentrantetráfico, utilice la PREROUTINGcadena.

Además, si desea redirección, se sugiere utilizar la tabla mangleo naten su lugar.

información relacionada