SSH 隧道和端口转发

SSH 隧道和端口转发

我请求您帮助我建立隧道以满足以下需求:

有一台 LocalTest 服务器,我是该服务器上的 root 用户,因此我可以做任何事情(Debian SSH)。该服务器已启用访问(另一方存在 IP 过滤)端口 443 的权限,我们可以将该服务器称为 WebserviceServer。我想让无法打开 SSH 到 localtest 的人能够访问 WebserviceServer:443。因此,我需要在 Localtest 上打开一个服务器端口(例如 10000),并将所有内容转发到 WebserviceServer:443。这是第一项任务。

第二个任务是,LocalTest 正在监听特定端口(8099)上的 Web 服务。出于测试原因,我需要不时将其转发到不同工作站的端口。因此,所有到达 LocalTest:8099 的流量和连接都需要转发到某个工作站(称为 John):某个端口(5000)。

您能帮助我提供在 Localtest 上需要发出的 ssh 命令来满足需求吗?

答案1

在我看来,您提到的两个问题都不是 ssh 隧道技术的最佳解决方案。

但以下是我为实现这些目标提出的一些想法:

问题1:使用LocalTest作为WebserviceServer的反向代理

localtest:~ $ ssh -L *:10000:webserviceserver:443 localhost

确保在 LocalTest 上的 /etc/ssh/sshd_config 中允许“GatewayPorts”和“AllowTcpForwarding”,并且重新启动 sshd。

解释

这将打开从 localtest 到其自身的连接,同时创建一个在 localtest 的所有接口上监听端口 10000 的隧道,将流量重定向到 webserviceserver 端口 443

问题 2:将流量重定向到测试工作站

使用 ssh 实际上与问题 1 相同

localtest:~ $ ssh -L *:8099:somestation1:5000 localhost

如果你想连接到另一个测试工作站,只需退出第一个连接并使用类似

localtest:~ $ ssh -L *:8099:somestation2:5002 localhost

解释

因为它基本上与问题 1 的解决方案相同,所以它也有相同的解释(只是主机和端口不同:-))

一些想法

请记住,之前的两个解决方案都向有权访问 LocalTest 的任何人开放目标系统(webserviceserver、somestationX)

正如我在开头提到的,我不认为 ssh 是执行此操作的正确工具,原因如下:

  • 使用 ssh 你只能轻松地通过隧道传输 tcp 流量
  • ssh 很少是永久隧道的最佳解决方案
  • 问题 1 对我来说更像是反向代理的情况(或者其他人提到的 iptables)
  • 对我来说,问题 2 肯定是 iptables 的问题

我个人为第二个问题设置了一个简单的脚本,它允许你重置你想要使用的每个测试系统的 iptables 规则,例如

localtest:~ # reset_target somestation

这样的脚本必须删除 iptables 中的旧重定向(到另一个测试工作站),然后设置新的重定向。我目前对 iptables 语法还不是很熟悉,所以我不能立即提供这样的脚本,但如果需要的话,我相信这里有人可以帮你解决类似问题。

答案2

听起来您的要求应该可以通过使用 IPTables 和简单的端口转发来实现 - 至少是第一部分。

至于第二部分,您指出在端口 8099 上有一个“Web 服务服务器”,您希望将其流量转发给“John”。我假设您仍希望让“Web 服务服务器”处理信息,在这种情况下,您可能正在寻找“Web 服务服务器”和“John”之间的桥梁。为此,您可以使用 netcat。

了解使用 IPTables 进行端口转发:http://www.socialhacker.com/howtos/port_forwarding.php

了解如何使用 Netcat:http://www.sans.org/security-resources/sec560/netcat_cheat_sheet_v1.pdf(我相信,Netcat Relays 就是您想要的)。

希望这些信息能有所帮助。

答案3

您将需要使用 -L 或 -R 标志并指定适当的 :IP:,以及在 sshd 配置中启用网关端口

相关内容