Permissions

遠端埠轉發適用於 TCP/1194,但不適用於 TCP/443,即使未使用伺服器上的埠 443

  • August 14, 2021

我有一個奇怪的問題。

我提出了一個新的 Linode 作為隧道端點。

我能夠成功地遠端轉發埠 1194,所以現在連接到 linode-server@1194 到我機器的埠 1194 並且我能夠通過連接到我的 linode-server 上的埠 1194 來連接到我的 VPN。

以下命令是我使用的(有效的):

ssh -N -R 1194:localhost:1194 user@linode-server.something.com

現在我也想移植 443。我試過這個:

ssh -N -R 443:192.168.1.122:443 user@linode-server.something.com

我的本地伺服器故意監聽 192.168.1.122(不是本地主機)。

但是,上述命令無法打開伺服器上的 443 埠。我收到以下錯誤:

警告:監聽埠 443 的遠端埠轉發失敗

所以我檢查了我的 linode-server 埠 443 上是否有任何東西在執行。沒有什麼是:

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:~$ 

伺服器上沒有軟防火牆。而且Linode雲防火牆已經關掉了,我還是不行。

我完全不知道為什麼轉發 443 不起作用。

PS - 創建隧道時使用者身份驗證工作正常。

我不確定這是否有幫助,但我的 sshd_config 看起來像這樣:

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:~$

澄清一下,裡面什麼都沒有/etc/ssh/sshd_config.d/

linode-server 上的詳細日誌記錄表單 sshd:

...
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
...

為什麼權限被拒絕?我上面使用的遠端轉發命令使用相同的使用者(對於成功和失敗的隧道)。

剛剛在這裡發現可能是因為443是特權埠。現在我不想使用 root 使用者在 443 上啟用遠端轉發。我已鎖定 linode-server 並且無法以 root 身份登錄(並且我不想允許 root 登錄)。根據上面的連結,我可以setcap在 linode-server 上使用 , 但我該怎麼做,因為隧道打開命令實際上是從我的本地執行的。我的替代方案是什麼?我知道也許在 linode-server 上使用更高的埠會起作用,但我不想這樣做。我真的很希望它是埠 443,所以我不需要記住埠。

在本地伺服器上,從埠 8080 發起遠端埠轉發(非特權埠)

ssh -N -R 8080:192.168.1.122:443 user@linode-server.something.com

在 linode-server 上,安裝了一個名為socat並使用以下命令在 linode 伺服器上從 8080 本地轉發到 443 的工具,它現在可以工作了:)

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

問題是沒有監聽埠 443。需要有一個程序監聽埠 443 才能連接到埠 443。如果您查看 netstat,您會發現目前有一個程序正在監聽埠1194,這就是連接到埠 1194 成功的原因。您需要更改該程序以偵聽埠 443。

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

引用自:https://serverfault.com/questions/1074518