SSH隧道详解:SSH端口转发实战指南

本文深入解析SSH隧道技术,涵盖本地端口转发、远程端口转发和动态端口转发三种类型,提供详细的配置教程和实际应用场景,帮助实现安全的远程访问和数据传输。

SSH隧道详解:SSH端口转发教程

SSH隧道通过私有和不信任网络创建安全加密连接,实现远程访问、绕过限制并保护敏感数据传输。

什么是SSH隧道?

SSH隧道是SSH客户端与SSH服务器之间的安全连接。本地机器将任意端口的网络流量通过SSH连接路由到远程系统的指定端口(通常是TCP端口22)。

SSH隧道通过网络应用程序端口将网络流量从本地主机传输到远程系统,反之亦然。SSH隧道(也称为SSH端口转发)使两个系统能够通过防火墙在内部网和互联网上安全交换数据。它也是云管理的关键组成部分。

隧道技术可用于多种目的,包括:

  • 通过SSH端口隧道HTTP或HTTPS流量,从受限网络外部访问内部Web服务
  • 绕过防火墙和网络控制以访问被这些设备阻止的服务(请谨慎操作,这些限制是有原因的)
  • 通过SSH隧道传输非安全协议,如虚拟网络计算(VNC)或远程桌面协议
  • 在不信任或信任网络中传输时保护未加密的应用程序数据
  • 安全挂载远程网络文件系统和通用互联网文件系统,为数据传输提供加密连接

SSH如何工作?

SSH最简单的用例是登录远程主机进行终端仿真会话。用户利用SSH客户端软件安全连接到运行SSH服务器的另一台主机。可以配置SSH在客户端和服务器之间交换公钥,以验证用户身份并加密通过SSH连接发送的数据。

现代计算机几乎都提供SSH客户端软件。OpenSSH是一个开源命令行SSH实现,最初为OpenBSD操作系统开发,但现在几乎在所有基于Unix的操作系统上可用,包括Linux和macOS。Windows 10及更新版本也在命令行中集成了OpenSSH。PuTTY是另一个适用于Windows的开源GUI版本SSH。

启动SSH会话需要:

  • 要访问的远程机器的域名或IP地址。此远程主机必须运行SSH服务器程序sshd的实例
  • 访问本地机器上的SSH客户端。通过输入ssh命令启动SSH连接
  • 具有访问远程服务器权限的用户登录凭据

例如,使用用户ID example-user在名为server.example.com的远程主机上启动终端会话:

1
ssh example-user@server.example.com

此命令使用默认SSH端口22在远程服务器上打开终端会话。SSH服务器也可以在其他端口上响应会话请求。例如,要连接到自定义SSH端口分配为2222的远程服务器:

1
ssh -p 2222 example-user@server.example.com

-p选项标志指定远程服务器上的端口号2222,使SSH将流量发送到端口2222而不是默认端口22。仅当配置远程服务器侦听该端口上的请求时,此方法才有效。

三种主要SSH隧道类型

SSH隧道连接在两个独立主机上运行的进程之间的数据流。存在三种主要类型的SSH隧道;您将根据具体需求选择一种。

1. 本地端口转发

本地端口转发使您能够从本地SSH客户端连接到远程目标SSH服务器。当目标服务器无法被本地主机访问时(例如由于防火墙过滤),但可以被SSH服务器访问时,选择此方法。本地端口转发可以从私有网络内部绕过防火墙,访问防火墙原本会阻止的远程系统。

2. 远程端口转发

远程端口转发(或反向SSH隧道)使SSH客户端软件能够从不同的SSH服务器连接到目标SSH服务器。远程端口转发是一种较少使用的方法,用于从外部私有网络访问内部服务器,否则这些服务器无法从公共互联网访问。恶意黑客可能使用此方法利用私有网络上的系统。

3. 动态端口转发

动态端口转发通过指定端口上的SSH路由所有入站和出站网络流量。这使任何两个主机之间能够建立SSH连接,所有连接都由SSH客户端通过SSH服务器转发。它也是设置SOCKS代理服务器的一种机制,当配置本地客户端软件将所有流量传递到指定端口时,该服务器将网络流量封装在SSH隧道中。动态端口转发还可以绕过网络防火墙并从私有网络内部访问任何目标服务器。

设置SSH隧道前的准备

本教程重点介绍在命令行界面(CLI)使用OpenSSH实现SSH协议。

在尝试打开SSH隧道之前,请采取以下步骤:

  • 验证SSH是否已安装并在本地机器和远程SSH服务器上运行
  • 获取或验证远程服务器的主机名或IP地址
  • 确定用于SSH端口转发重定向的端口号
  • 在实施前检查计划的隧道

定义隧道端点后,逐步方法可以简化故障排除,因为您可以在打开每个隧道组件时测试它们。

在SSH服务器上初始化SSH守护进程。对于Windows 10及更高版本,必须安装OpenSSH服务器并使用具有管理员权限的PowerShell命令行启动它。使用以下命令从PowerShell命令行初始化OpenSSH服务器守护进程:

1
PS C:\Users\peter> Start-Service sshd

在Linux系统上使用以下命令启动OpenSSH服务器:

1
$ sudo systemctl start sshd

如何创建本地端口转发隧道

本地端口转发在SSH命令中使用-L选项,标志本地端口将通过SSH服务器转发到另一台服务器或主机。

例如,如果您正在使用私有网络上的计算机,并且想要访问组织防火墙阻止的Web服务器,可以使用以下命令将本地端口8080重定向到所需的Web服务器:

1
ssh -L 8080:social.example.org:80 ssh-server.example.com

在此示例中,-L选项指示ssh-server.example.com上的SSH服务器应将本地主机上的端口8080转发到所需但受限制的服务器social.example.org上的端口80。

如何创建远程端口转发隧道

道德黑客、渗透测试人员和恶意攻击者经常使用远程端口转发(也称为反向隧道)。如果攻击者可以利用私有网络内的仅一台主机,他们可以使用该访问权限潜在地访问受保护网络内的任何系统。

要启动反向隧道,在要用于将外部网络请求转发到私有网络上否则受限制的主机的私有网络内的主机上,使用-R选项运行ssh命令。考虑在位于防火墙边界内的主机上运行以下命令:

1
ssh -R 5900:localhost:5900 somehost.example.net

在此命令中,localhost指的是位于私有网络内的主机。被转发的端口(5900)是VNC的默认端口,VNC是允许远程控制桌面的软件。

如何创建动态端口转发隧道

动态端口转发与SSH通常用于设置SOCKS代理服务器。在此示例中,SSH客户端侦听本地主机上的特定端口。当它在该端口上接收流量时,SSH服务器将应用程序层消息封装或隧道到连接到接收主机的安全隧道中。

使用SOCKS代理时,必须使用SSH接受要隧道传输的流量的端口号配置客户端软件。SOCKS代理的默认端口是1080,因此启动SOCKS代理(启用动态端口转发)的SSH命令是:

1
ssh -D 1080 bastion.example.org

-D选项在本地主机上启用动态端口转发,因此端口1080上接收的所有消息都转发到名为bastion.example.org的主机。

总结

SSH是当今现代环境中至关重要的网络安全服务。它连接客户端与服务器、管理工作站与网络设备,以及各种计算机与云服务。使用SSH进行隧道传输提供了许多控制流量、确保私有数据传输的选项。立即开始使用SSH隧道,了解它们如何使您的环境受益。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计