El reenvío de puerto remoto funciona en TCP/1194 pero no en TCP/443 aunque no se esté utilizando el puerto 443 en el servidor

El reenvío de puerto remoto funciona en TCP/1194 pero no en TCP/443 aunque no se esté utilizando el puerto 443 en el servidor

Estoy teniendo un problema extraño.

Abrí un nuevo Linode para que actuara como punto final de túnel.

Pude reenviar exitosamente el puerto 1194 de forma remota, por lo que ahora me conecto exitosamente a linode-server@1194 al puerto 1194 de mi máquina y puedo conectarme a mi VPN conectándome al puerto 1194 en mi servidor Linode.

El siguiente comando es el que utilicé (el que funciona):

ssh -N -R 1194:localhost:1194 [email protected]

Ahora también quiero reenviar el puerto 443. Probé esto:

ssh -N -R 443:192.168.1.122:443 [email protected]

Mi servidor local está escuchando en 192.168.1.122 a propósito (no en localhost).

Sin embargo, el comando anterior no logra abrir el puerto 443 en el servidor. Recibo el siguiente error:

Advertencia: el reenvío de puerto remoto falló para el puerto de escucha 443

Así que verifiqué en mi servidor Linode si se está ejecutando algo en el puerto 443. Nada es:

user@linode-server:~$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      7438/sshd: user       
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      411/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2377/sshd: /usr/sbi 
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1513/master         
tcp6       0      0 :::1194                 :::*                    LISTEN      7438/sshd: user       
tcp6       0      0 :::22                   :::*                    LISTEN      2377/sshd: /usr/sbi 
tcp6       0      0 :::25                   :::*                    LISTEN      1513/master         
udp        0      0 127.0.0.53:53           0.0.0.0:*                           411/systemd-resolve 
user@linode-server:~$ 

No hay ningún firewall de software en el servidor. Y el firewall de la nube Linode se ha desactivado, todavía no puedo hacerlo.

No tengo ni idea de por qué el reenvío 443 no funciona.

PD: la autenticación de usuario funciona bien mientras se crea el túnel.

No estoy seguro de si esto ayudará, pero mi sshd_config tiene este aspecto:

user@linode-server:~$ cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"
Include /etc/ssh/sshd_config.d/*.conf
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
GatewayPorts yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem   sftp    /usr/lib/openssh/sftp-server
user@linode-server:~$

Y para aclarar, no hay nada en/etc/ssh/sshd_config.d/

Registro detallado desde sshd en el servidor Linode:

...
Aug 14 09:00:32 connect sshd[9499]: Postponed publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2 [preauth]
Aug 14 09:00:32 connect sshd[9499]: Accepted key RSA *HIDDEN* found at /home/pi/.ssh/authorized_keys:1
Aug 14 09:00:32 connect sshd[9499]: Accepted publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2: RSA *HIDDEN* 
Aug 14 09:00:32 connect sshd[9499]: pam_unix(sshd:session): session opened for user pi by (uid=0)
Aug 14 09:00:32 connect systemd-logind[578]: New session 157 of user pi.
Aug 14 09:00:32 connect sshd[9499]: User child is on pid 9579
Aug 14 09:00:32 connect sshd[9579]: bind [0.0.0.0]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: bind [::]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: channel_setup_fwd_listener_tcpip: cannot listen to port: 443
...

¿Por qué se niega el permiso? El comando de reenvío remoto que utilicé anteriormente utiliza el mismo usuario (tanto para el túnel exitoso como para el fallido).

Se acaba de encontraraquíque podría deberse a que 443 es un puerto privilegiado. Ahora no quiero utilizar el usuario root para habilitar el reenvío remoto en 443. He bloqueado el servidor Linode y no puedo iniciar sesión como root (y no quiero permitir el inicio de sesión como root). Según el enlace anterior, puedo usar setcap, en el servidor Linode, pero ¿cómo lo hago ya que el comando de apertura del túnel en realidad se ejecuta desde mi local? ¿Cuáles son mis alternativas? Sé que tal vez funcione usar un puerto superior en el servidor Linode, pero no quiero hacer eso. Realmente me gustaría que fuera el puerto 443 para no tener que recordar el puerto.

Respuesta1

En el servidor local, se inició el reenvío del puerto remoto desde el puerto 8080 (puerto sin privilegios)

ssh -N -R 8080:192.168.1.122:443 [email protected]

En Linode-server, instalé una herramienta llamada socaty usé el siguiente comando para reenviar localmente de 8080 a 443 en Linode Server y ahora funciona :)

sudo socat TCP-LISTEN:443,fork TCP:0.0.0.0:8080

Respuesta2

El problema es que no hay nada escuchando en el puerto 443. Es necesario que haya un proceso escuchando en el puerto 443 para que pueda realizar conexiones al puerto 443. Si observa su netstat, verá que actualmente tiene un proceso escuchando en el puerto. 1194, razón por la cual las conexiones al puerto 1194 tienen éxito. Debe cambiar ese proceso para escuchar en el puerto 443.

tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      7438/sshd: pi

información relacionada