
Ich habe ein seltsames Problem.
Ich habe einen neuen Linode als Tunnel-Endpunkt eingerichtet.
Ich konnte Port 1194 erfolgreich per Remote-Weiterleitung weiterleiten, sodass jetzt Verbindungen zu linode-server@1194 erfolgreich an Port 1194 meines Computers hergestellt werden und ich eine Verbindung zu meinem VPN herstellen kann, indem ich eine Verbindung zu Port 1194 auf meinem Linode-Server herstelle.
Ich habe den folgenden Befehl verwendet (der funktioniert):
ssh -N -R 1194:localhost:1194 [email protected]
Jetzt möchte ich auch Port 443 weiterleiten. Ich habe Folgendes versucht:
ssh -N -R 443:192.168.1.122:443 [email protected]
Mein lokaler Server lauscht absichtlich auf 192.168.1.122 (nicht auf localhost).
Der obige Befehl kann jedoch Port 443 auf dem Server nicht öffnen. Ich erhalte die folgende Fehlermeldung:
Warnung: Remote-Port-Weiterleitung für Abhörport 443 fehlgeschlagen
Also habe ich auf meinem Linode-Server überprüft, ob auf Port 443 etwas läuft. Nichts läuft:
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:~$
Auf dem Server gibt es keine Soft-Firewall. Und die Linode-Cloud-Firewall wurde ausgeschaltet, ich kann es immer noch nicht tun.
Ich habe absolut keine Ahnung, warum die Weiterleitung 443 nicht funktioniert.
PS: Die Benutzerauthentifizierung funktioniert beim Erstellen des Tunnels einwandfrei.
Ich bin nicht sicher, ob das hilft, aber meine sshd_config sieht folgendermaßen aus:
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:~$
Und um das klarzustellen: Es gibt nichts in/etc/ssh/sshd_config.d/
Ausführliches Protokollierungsformular von SSHD auf dem Linode-Server:
...
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
...
Warum wird die Berechtigung verweigert? Der Remote-Weiterleitungsbefehl, den ich oben verwendet habe, verwendet denselben Benutzer (sowohl für den erfolgreichen als auch für den fehlgeschlagenen Tunnel).
Gerade gefundenHierdass es daran liegen könnte, dass 443 ein privilegierter Port ist. Jetzt möchte ich nicht den Root-Benutzer verwenden, um die Remote-Weiterleitung auf 443 zu aktivieren. Ich habe den Linode-Server gesperrt und kann mich nicht als Root anmelden (und ich möchte keine Root-Anmeldung zulassen). Gemäß dem obigen Link kann ich setcap
auf dem Linode-Server verwenden, aber wie mache ich das, da der Befehl zum Öffnen des Tunnels tatsächlich von meinem lokalen Server aus ausgeführt wird? Welche Alternativen habe ich? Ich weiß, dass es vielleicht funktioniert, wenn ich einen höheren Port auf dem Linode-Server verwende, aber das möchte ich nicht. Ich hätte wirklich gerne Port 443, damit ich mir den Port nicht merken muss.
Antwort1
Auf dem lokalen Server wurde stattdessen die Remote-Portweiterleitung von Port 8080 (nicht privilegierter Port) initiiert.
ssh -N -R 8080:192.168.1.122:443 [email protected]
Habe auf dem Linode-Server ein Tool namens „installiert“ socat
und den folgenden Befehl verwendet, um lokal von 8080 auf 443 auf dem Linode-Server weiterzuleiten, und jetzt funktioniert es :)
sudo socat TCP-LISTEN:443,fork TCP:0.0.0.0:8080
Antwort2
Das Problem ist, dass auf Port 443 nichts lauscht. Es muss ein Prozess auf Port 443 lauschen, damit Sie Verbindungen zu Port 443 herstellen können. Wenn Sie sich Ihre Netstat-Daten ansehen, werden Sie feststellen, dass Sie derzeit einen Prozess haben, der auf Port 1194 lauscht, weshalb Verbindungen zu Port 1194 erfolgreich sind. Sie müssen diesen Prozess ändern, damit er auf Port 443 lauscht.
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 7438/sshd: pi