如何使用SSH隧道访问受限服务器和安全浏览

SSH客户端连接到安全外壳服务器,该服务器允许您像坐在另一台计算机前面一样运行终端命令。但是SSH客户端还允许您在本地系统和远程SSH服务器之间“隧道”端口。

有三种不同类型的SSH隧道,它们都用于不同的目的。每个端口都涉及使用SSH服务器将流量从一个网络端口重定向到另一个网络端口。流量通过加密的SSH连接发送,因此无法在传输过程中进行监视或修改。

您可以使用Linux、MacOS和其他类UNIX操作系统上包含的ssh命令来执行此操作。在没有内置ssh命令的Windows上,我们推荐使用免费工具PuTTY连接到SSH服务器。它还支持SSH隧道。

本地端口转发:使本地系统上的远程资源可访问

“本地端口转发”允许您访问未暴露于Internet的本地网络资源。例如,假设您想从家里访问办公室的数据库服务器。出于安全原因,该数据库服务器仅配置为接受来自本地办公室网络的连接。但是,如果您可以访问办公室的SSH服务器,并且该SSH服务器允许从办公室网络外部进行连接,则您可以从家里连接到该SSH服务器,并像在办公室一样访问数据库服务器。通常情况就是这样,因为保护单个SSH服务器免受攻击比保护各种不同的网络资源更容易。

要做到这一点,您需要与SSH服务器建立SSH连接,并告诉客户端将流量从本地PC的特定端口(例如端口1234)转发到数据库服务器的地址及其在办公室网络上的端口。因此,当您尝试访问当前PC(“localhost”)端口1234上的数据库服务器时,该流量将自动通过SSH连接“隧道传输”并发送到数据库服务器。SSH服务器位于中间,来回转发流量。您可以使用任何命令行或图形工具来访问数据库服务器,就像它在您的本地PC上运行一样。

要使用本地转发,请正常连接到SSH服务器,但还要提供-L参数。语法为:

ssh -L local_port:remote_address:remote_port username@server.com

例如,假设您办公室的数据库服务器位于办公室网络上的192.168.1.111。您可以访问办公室的SSH服务器ssh.youroffice.com,并且您在SSH服务器上的用户帐户是bob。在这种情况下,您的命令将如下所示:

ssh -L 8888:192.168.1.111:1234 bob@ssh.youroffice.com

在运行该命令之后,您将能够在localhost的端口8888访问数据库服务器。因此,如果数据库服务器提供Web访问,您可以将http://localhost:8888插入Web浏览器进行访问。如果您有一个需要数据库网络地址的命令行工具,您可以将其指向localhost:8888。发送到您PC上的端口8888的所有通信都将通过隧道传输到您办公室网络上的192.168.1.111:1234。

如果要连接到在与SSH服务器本身相同的系统上运行的服务器应用程序,则会更加令人困惑。例如,假设您的办公室计算机上有一台SSH服务器在端口22上运行,但在同一系统上同一地址的端口1234上也有一台数据库服务器在运行。您希望从家里访问数据库服务器,但是系统只接受端口22上的SSH连接,其防火墙不允许任何其他外部连接。

在这种情况下,您可以运行类似以下命令的命令:

ssh -L 8888:localhost:1234 bob@ssh.youroffice.com

当您尝试通过当前PC上的端口8888访问数据库服务器时,流量将通过SSH连接发送。当它到达运行SSH服务器的系统时,SSH服务器会将其发送到“localhost”上的端口1234,该端口与运行SSH服务器本身的PC相同。因此,从远程服务器的角度来看,上面命令中的“localhost”表示“localhost”。

要在Windows上的PuTTY应用程序中执行此操作,请选择连接>SSH>隧道。选择“本地”选项。对于“源端口”,请输入本地端口。对于“Destination”,请以REMOTE_ADDRESS:REMOTE_PORT的形式输入目的地地址和端口。

例如,如果您希望设置与上面相同的SSH隧道,则需要输入8888作为源端口,输入localhost:1234作为目的地。之后单击“添加”,然后单击“打开”打开SSH连接。当然,在连接之前,您还需要在主“会话”屏幕上输入SSH服务器本身的地址和端口。

远程端口转发:使本地资源可以在远程端口系统上访问

“远程端口转发”与本地转发相反,使用频率较低。它允许您使本地PC上的资源在SSH服务器上可用。例如,假设您在坐在前面的本地PC上运行Web服务器。但是您的PC位于防火墙之后,该防火墙不允许传入服务器软件的流量。

假设您可以访问远程SSH服务器,则可以连接到该SSH服务器并使用远程端口转发。您的SSH客户端将告诉服务器将SSH服务器上的特定端口(例如端口1234)转发到当前PC或本地网络上的特定地址和端口。当有人访问SSH服务器上的端口1234时,该流量将自动通过SSH连接进行隧道传输。任何有权访问SSH服务器的人都可以访问您PC上运行的Web服务器。这实际上是穿越防火墙的一种方式。

要使用远程转发,请使用带有-R参数的ssh命令。语法与本地转发基本相同:

ssh -R remote_port:local_address:local_port username@server.com

假设您希望使在本地PC上的端口1234侦听的服务器应用程序在远程SSH服务器上的端口8888上可用。SSH服务器的地址是ssh.youroffice.com,您在SSH服务器上的用户名是bob。您将运行以下命令:

ssh -R 8888:localhost:1234 bob@ssh.youroffice.com

然后,某人可以连接到端口8888上的SSH服务器,该连接将被隧道传输到在您建立连接的本地PC上的端口1234上运行的服务器应用程序。

要在Windows上的PuTTY中执行此操作,请选择连接>SSH>隧道。选择“远程”选项。对于“Source Port”,输入远程端口。对于“Destination”,请以LOCAL_ADDRESS:LOCAL_PORT的形式输入目的地址和端口。

例如,如果您想要设置上面的示例,您需要输入8888作为源端口,输入localhost:1234作为目的地。之后单击“添加”,然后单击“打开”打开SSH连接。当然,在连接之前,您还需要在主“会话”屏幕上输入SSH服务器本身的地址和端口。

然后,人们可以连接到SSH服务器上的端口8888,他们的流量将通过隧道传输到您的本地系统上的端口1234。

默认情况下,远程SSH服务器将只侦听来自同一主机的连接。换句话说,只有与SSH服务器本身在同一系统上的人才能连接。这是出于安全原因。如果希望覆盖此行为,则需要在远程SSH服务器上的sshd_config中启用“GatewayPorts”选项。

动态端口转发:使用SSH服务器作为代理

相关:VPN和代理有什么不同?

相关:为什么使用公共Wi-Fi网络会很危险,即使是在访问加密网站时也是如此

例如,假设您正在使用公共Wi-Fi网络。您希望在不被窥探的情况下安全地浏览。如果您可以在家里访问SSH服务器,则可以连接到该服务器并使用动态端口转发。SSH客户端将在您的PC上创建SOCKS代理。发送到该代理的所有流量都将通过SSH服务器连接发送。任何监控公共Wi-Fi网络的人都无法监控您的浏览或审查您可以访问的网站。从你访问的任何网站的角度来看,这就像你坐在家里的电脑前一样。这也意味着您可以使用此技巧在美国以外的地方访问仅限美国的网站-当然,前提是您可以访问美国的SSH服务器。

再举一个例子,您可能想要访问家庭网络上的媒体服务器应用程序。出于安全原因,您可能只向Internet公开了一台SSH服务器。您不允许从Internet到您的媒体服务器应用程序的传入连接。您可以设置动态端口转发,将Web浏览器配置为使用SOCKS代理,然后通过Web浏览器访问家庭网络上运行的服务器,就像您坐在家里的SSH系统前面一样。例如,如果您的媒体服务器位于家庭网络上的端口192.168.1.123,则可以使用SOCKS代理将地址192.168.1.123插入任何应用程序,就像在家庭网络上一样访问媒体服务器。

要使用动态转发,可以运行带有-D参数的ssh命令,如下所示:

ssh -D local_port username@server.com

例如,假设您可以访问ssh.youhome.com上的SSH服务器,并且您在SSH服务器上的用户名是bob。您希望使用动态转发在当前PC的端口8888处打开SOCKS代理。您将运行以下命令:

ssh -D 8888 bob@ssh.yourhome.com

然后,您可以将Web浏览器或其他应用程序配置为使用您的本地IP地址(127.0.01)和端口8888。来自该应用的所有流量都将通过隧道重定向。

要在Windows上的PuTTY中执行此操作,请选择连接>SSH>隧道。选择“动态”选项。对于“源端口”,请输入本地端口。

例如,如果要在端口8888上创建SOCKS代理,则需要输入8888作为源端口。然后单击“添加”,然后单击“打开”打开SSH连接。当然,在连接之前,您还需要在主“会话”屏幕上输入SSH服务器本身的地址和端口。

然后,您可以配置一个应用程序来访问本地PC上的SOCKS代理(即指向本地PC的IP地址127.0.0.1)并指定正确的端口。

相关:如何在Firefox中配置代理服务器

例如,您可以将Firefox配置为使用SOCKS代理。这特别有用,因为Firefox可以有自己的代理设置,而不必使用系统范围的代理设置。Firefox将通过SSH隧道发送流量,而其他应用程序将正常使用您的Internet连接。

在Firefox中这样做时,选择“手动代理配置”,在SOCKS主机框中输入“127.0.0.1”,在“Port”框中输入动态端口。将HTTP代理、SSL代理和FTP代理框留空。

只要您打开SSH会话连接,隧道就会保持活动和打开状态。当您结束SSH会话并断开与服务器的连接时,隧道也将关闭。只需使用适当的命令(或PuTTY中的适当选项)重新连接,即可重新打开隧道。

相关文章