通过远程端口转发通过Jumphost进行SSH会话

强尼泽

我们通过远程端口转发进行SSH连接时遇到问题。

该方案是企业网络,内部网络上的服务器(我们称其为“源”)必须通过SSH登录到DMZ中的服务器(“目标”)。由于DMZ中的目标服务器因来自内部网络的连接而被锁定(甚至无法从内部网络中看到),因此我们要经过的DMZ中有一个跳转主机(“ jumphost”)。为此,我们在Jumphost上设置了远程端口转发。

我们从内部网络上的原始服务器运行此命令,到Jumphost:

origin> ssh -R *:1234:target:22 myusername@jumphost

这是为了在Jumphost上建立SSH会话,使其开始侦听端口1234(只是示例任意端口号),并将该端口上的连接转发到目标服务器端口22(SSH)。

然后,我们在端口1234上建立第二个SSH会话,仍然从源服务器到Jumphost,然后实际上将其连接到端口22上的目标服务器-这是我们的“真实” SSH会话,我们可以在目标服务器:

origin> ssh jumphost -P 1234

配置

跳转主机已配置为允许远程端口转发,并且在sshd_config中具有以下设置:

AllowTcpForwarding yes
GatewayPorts yes

另外,在源服务器和跳转主机之间的防火墙开口也位于端口22(用于建立远程端口转发的初始SSH连接)和端口1234(用于转发的端口上的后续SSH连接)的防火墙开口处。在跳转主机和目标之间还有一个防火墙,该防火墙已在端口22上打开。

结果

当我们建立第二个连接(通过转发端口建立的连接)时,该连接将立即关闭(“连接被远程主机关闭”)。

在目标服务器上运行tcpdump不会显示任何活动,即连接似乎已阻塞。

但是,我们能够成功建立从跳转主机到目标服务器的常规SSH会话。仅当通过转发端口进入时,连接才会关闭,尽管两者都通过端口22连接到目标。

此外,如果我们将端口转发点指向内部网络上的服务器(即,从内部网络上的源到DMZ中的Jumphost的连接,再回到内部网络上的第三台服务器的连接),则使用SSH会话建立成功。

投机和问题

所有这些使我相信某些网络安全设置正在起作用,这阻止了通过跳转服务器上转发的端口连接到DMZ中的目标服务器。不幸的是,我没有足够的知识来知道:

(1)从网络安全策略的角度来看,SSH连接是否从源服务器通过跳转服务器上的转发端口“不同”而来,从技术上讲它可以被阻止,如果是,则如何?解除限制需要做些什么?

(2)不允许通过此连接的任何其他原因-防火墙配置,路由器配置,源或Jumphost上的SSH设置,还有其他原因吗?

(3)是否会因为原始服务器不知道目标服务器而失败,因此第一个ssh命令无法按预期运行?换句话说,在第一个ssh命令(“目标”)中指定的主机名是在客户端(源)还是我们要连接以创建隧道的服务器(jumphost)上解释的?

最让我感到困扰的是,可以从跳转主机到目标建立一个常规的SSH会话,我认为通过转发端口进入的SSH连接是相同的,但是不知道是什么。

任何输入非常感谢。

每一个

看来您应该使用本地端口转发而不是远程端口转发。您可能需要参考Dirk Loss撰写的以下有用的博客文章:

它包括以下说明图:

ssh端口转发:本地与远程

为了阅读该图,您需要知道它描述了创建和利用SSH隧道所涉及的4个不同角色之间的关系:

  • ssh用于建立隧道的ssh客户端(即,OpenSSH命令行客户端);
  • sshd用于维护隧道另一端的ssh服务器(即OpenSSH服务器守护程序);
  • 应用程序服务器(例如另一个ssh服务器或http服务器);
  • 想要通过隧道访问应用程序服务器的应用程序客户端(例如,另一个ssh客户端或Web浏览器)。

It's also important to understand that the two different types of forwarding correspond to two different use cases:

  • Local Forwarding: where the application client connects via the ssh client

  • Remote Forwarding: where the application client connects via the ssh server

Remote forwarding is so called because the forwarding is performed remotely (at the ssh server) rather than locally (at the ssh client). I also find "remote forwarding = reverse forwarding" to be a useful mnemonic.

如您所见,为了启动从主机上ssh客户端origin通过sshd代理上的服务器jumphost到第三台target主机的连接,您将必须使用本地端口转发。远程端口转发适用于您希望隧道的入口点位于运行sshd服务器的主机上而不是运行ssh客户端的主机上的情况

在手册页中,本地端口转发语法编写如下:

ssh -L [bind_address:]port:host:hostport user@remote

可以更直观地编写为以下内容:

ssh -L [local_bind_address:]local_port:remote_host:remote_host_port user@proxy_host

或者,使用您的命名约定:

ssh -L [origin_bind_address:]origin_port:target_host:target_host_port user@jump_host

如果我们将您的命令修改为使用本地端口转发,则结果如下:

user@origin:~$ ssh -L *:1234:target:22 myusername@jumphost

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章