我正在设置位于 NAT 和防火墙后面的服务器。为了访问 ssh,我设置了reverse ssh tunneling
另一台具有公共 IP 的服务器。
我有点担心它不够安全,这个隧道始终处于活动状态。
有没有办法阻止公共服务器上的隧道?我希望有一个选项:
- 连接到公共服务器 SSH
- 启用隧道端口
- 连接到隧道端口(连接到 NAT 后面的服务器)
- 做好我的工作
- 禁用隧道端口
那可能吗?
答案1
如果您的隧道正在监听公共服务器的公共接口,那么您可以根据需要在公共服务器防火墙上阻止/取消阻止该端口。当隧道未被阻止时,SSH 不会提供额外的安全性。
如果您的隧道正在监听公共服务器环回接口,那么您无需关闭并重新打开;只需保护公共路由器即可。如果涉及到安全,我会推荐这个解决方案(差不多,我将在下面解释)。您将访问您的隧道服务
- 通过从公共服务器本身进行连接
或者
- 通过另一个 SSH 隧道。
从第三台主机(例如您的私人笔记本电脑)建立此类隧道的(Linux)命令是:
ssh <user>@<public-server-IP> -L <portA>:127.0.0.1:<portB>
<portB>
原始隧道正在监听的端口在哪里,<portA>
是您选择的端口(至少选择它,1024
因为较低的端口可能会受到限制)。
然后连接到127.0.0.1:<portA>
。此连接是您的计算机本地连接。在您的公共服务器上也会有一个本地连接,因此127.0.0.1:<portB>
整个安全性是 SSH 安全性,如果您正确使用它(好的密码/密钥等),它会非常强大。
我能想到的唯一缺陷是:其他有权访问您的公共服务器(如 SSH 访问)的用户可能会连接到127.0.0.1<portB>
它。如果这也是一个问题,那么您应该修改隧道解决方案,如下所述。
不要创建通向你的(可能不安全的)服务的隧道,首先要建立到NAT服务器SSH的隧道。
在 NAT 服务器上你将执行以下操作:
ssh <user>@<public-server-IP> -R <public-server-IP>:<portB>:127.0.0.1:<portSSH>
<portSSH>
您的 NAT 路由器上的 SSH 服务器监听的端口号是多少(通常为22
)。(公共路由器上的 SSH 服务器配置可能会阻止您绑定到<public-server-IP>
;在 Linux 中,sshd
这是GatewayPorts
一个选项,如果需要,请重新配置。)这样,您就可以在 上使用 NAT 服务器 SSH <public-server-IP>:<portB>
。
接下来从本地计算机到 NAT 服务器建立隧道:
ssh <user1>@<public-server-IP> -p <portB> -L <portA>:127.0.0.1:<portS>
<portS>
NAT 服务器上的服务端口在哪里,您可以再次选择<portA>
(至少再次选择1024
)。请注意,您现在应该使用 NAT 服务器凭据。
然后127.0.0.1:<portA>
从本地计算机连接到该服务。
改进之处在于:您的公共路由器上没有开放端口直接通向 NAT 路由器上的服务。如果您让服务仅在 NAT 路由器的环回接口上侦听,那么从其 LAN 也无法访问它。这使得解决方案非常安全(再次强调:使用良好的 SSH 密码/密钥等),即使使用完全开放且不关心凭据的服务也可以安全使用。