学习SSH隧道的相关知识

317 阅读7分钟

SSH隧道

安全壳(SSH)隧道,也被称为SSH端口转发,是一种通过编码的SSH连接发送任意数据的技术。SSH隧道使本地端口(即你桌面上的一个端口)的连接可以通过安全通道传输到远程计算机。

SSH隧道使我们能够访问我们无法访问的远程资源,因为它们是该网络内部的。SSH隧道也被用来允许我们网络外的其他人访问它。它是通过TCP隧道进行的。

为了执行SSH隧道,我们将需要执行端口转发,允许端口22。端口22是我们路由器上的SSH端口,将被路由到我们的公共SSH服务器。

为了确保我们网络服务的安全,并非所有的端口都可以从企业网络计算系统(ENCS)网络之外直接访问。如果你在异地,需要访问一个受保护的资源,你可以使用SSH隧道通过一个可访问的资源来到达受保护的资源。

在这篇文章中,我们将研究SSH隧道的两个主要分题,它们是。

  • 远程端口转发
  • 本地端口转发

前提条件

要执行SSH隧道,你需要以下条件。

  • 一个可公开访问的SSH服务器。
  • 对网络的基本了解。
  • 要访问的资源。
  • 一台本地设备。
  • 一个用于远程端口转发的远程设备。

本地端口转发

本地端口转发允许我们访问我们无法访问的远程内容或资源。例如,假设我们有一个远程远程桌面协议(RDP)服务器,或者一个远程数据库有一个防火墙,阻止了一些端口,但允许访问一些端口。

为了访问内部网络,以隧道方式通过访问端口,偷渡我们想要的内容。本地端口转发创建了一个本地服务器,在我们的本地机器上监听一个本地端口,并访问该端口,作为一个代理。

下面的图片是一个本地端口转发的演示。

Local port forwarding

使用上面的图片,让我们通过对SSH隧道的解释,从它。假设我们有以下设备,其IP地址分别如图所示。

  • 一个我们需要访问的内部资源,端口为8080,IP地址为192.168.1.3
  • 一个IP地址为192.168.1.2 ,IP地址为44.11.22.33 ,端口为22的公共SSH服务器。
  • 一个IP地址为10.0.0.4 的本地设备。
  • 本地端口为8888。

我们的SSH服务器和内部资源是在同一个网络上。这意味着我们的公共SSH服务器可以访问我们的内部资源。

我们在IP地址10.0.0.4 的本地机器是在一个完全不同的网络上,不能访问IP地址192.168.1.3 的资源。我们需要做的是在我们的本地机器和我们的公共SSH服务器之间创建一个SSH隧道。这是因为IP地址44.11.22.33 是一个公共IP地址,而22号端口是一个公共开放的SSH端口。

本地端口转发的语法。

ssh -L <local port>:<remote ip address>:<remote port> <public ssh server ip address>

让我们来解释一下上面的语法。

  • -L - 这表明我们正在执行本地端口转发。
  • local port - 这是我们本地设备的端口。
  • remote ip address - 这是我们需要访问的远程资源的IP地址。
  • remote port - 这是我们远程设备的端口。
  • public ssh server ip address - 这是我们的公共SSH服务器的IP地址。

下面的命令将被用来执行本地端口转发。

ssh -L 8888:192.168.1.3:8080 44.11.22.33

我们将使用SSH访问我们的公共SSH服务器。要做到这一点,由于我们的本地机器不能访问远程资源,我们将创建一个本地端口,即8888端口。

发生的情况是,SSH服务器将从我们的本地机器上监听端口8888。任何从我们本地机器进入8888端口的流量都会通过公共SSH服务器转发到8080端口的IP地址192.168.1.3 。因此,我们的SSH服务器与我们的机器建立了一个TCP连接,因为它是开放的

如果我们在8888端口上访问我们的本地机器的IP地址10.0.0.4 ,我们的本地机器将在8888端口上发出请求,作为一个小型服务器。这个端口将通过公开创建的隧道44.11.22.33:22 ,将数据偷渡到一个TCP数据包中。

当我们的公共SSH服务器收到这个,它承认我们的本地机器想要访问它可以访问的IP地址192.168.1.3 的资源。所以它将在内部转发该请求,因为它们在同一个网络上。服务器将收到请求,获得响应,然后将其转发回我们的本地机器。就这样,我们已经访问了我们的远程资源。

在某些情况下,比方说我们的远程IP地址被禁止进入我们的本地网络。这可能是我们的ISP阻止了对特定域的访问,我们可以通过我们的安全SSH隧道,然后代表我们的公共SSH服务器提出请求。

远程端口转发

当我们希望其他人访问我们的本地资源时,远程端口转发意义重大。例如,当我们的机器上有一个Web服务器,并且有必要发送一个URL来测试我们的应用程序给其他合作者。

远程端口转发允许我们使用我们的公共SSH服务器作为一个集中的位置,并请求公共服务器监听其端口。通过这个,任何通过其端口的流量都会被转发到我们的服务器。

让我们看一下下面的图片。

Remote port forwarding

从上面的图片,我们有我们的。

  • IP地址为10.0.0.3 ,端口为8080的内部资源,我们希望人们能够访问。
  • IP地址为10.0.0.4 的机器与我们的内部资源在同一网络上,作为一个SSH客户端。
  • 公共SSH服务器和同一网络上的一台远程机器。

让我们看一下下面的命令。

远程端口转发的语法。

ssh -R <remote port>:<local ip address>:<local port> <remote ip address>

让我们对上面的语法进行一下解释。

  • -R - 这表明我们正在执行远程端口转发。
  • remote port - 这是我们设备的远程端口的输入端口。
  • local ip address - 这里输入的是我们本地设备的IP地址。
  • local port - 本地设备的本地端口就放在这里。
  • remote ip address - 这是我们的公共SSH服务器的IP地址。

下面的命令将被用来执行远程端口转发。

ssh -R 8888:10.0.0.3:8080 44.11.22.33

上面的命令是在我们的本地机器上执行的,也就是10.0.0.4 。8888是我们的远程端口,所以我们正在访问的公共服务器将监听这个端口。需要在我们的本地机器上启用网关配置来实现远程端口转发。

这里的主要想法是,我们需要通过8888端口的任何东西被转发到我们在10.0.0.3 ,端口为8080的本地机器。我们要做的是与公共SSH服务器和我们的本地机器建立一个TCP连接。

SSH服务器将监听端口8888,以接收同一端口44.11.22.33 上的TCP请求。SSH服务器将接收该数据包并将其封装为一个合法的SSH请求。然后,它将通过22号端口发送,因为它是加密的,在网络上是无法访问的。

我们将在我们的本地设备上收到该请求,因为10.0.0.4 的SSH客户端将有能力知道这是一个隧道。它将代表我们的公共SSH服务器请求10.0.0.3 上的内部资源,并访问该内部资源。之后,它将把它送回我们的公共SSH服务器。

这样,我们就可以远程访问我们的本地资源了。

总结

在这篇文章中,我们看到了本地端口和远程端口转发是如何工作的。这意味着我们可以远程或本地访问我们设备上的任何资源,只要我们操作正确。