Press "Enter" to skip to content

SSH Tunneling: ssh端口转发示例

作为服务器端,我先要配置好ssh配置并且重启sshd服务:

root@CT102:~# cat /etc/ssh/sshd_config.d/remotelogin.conf 
GatewayPorts yes
PubkeyAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
PermitRootLogin yes

什么是 SSH 端口转发(又称 SSH 隧道)?

SSH 端口转发是一种在 SSH 中用于将应用程序端口从客户端机器隧道到服务器机器(或反向)的机制。它可以用于为传统应用程序添加加密、通过防火墙,一些系统管理员和 IT 专业人士使用它来从家用机器打开到内部网络的后门。黑客和恶意软件也可能滥用它,从互联网打开到内部网络的访问。查看 SSH 隧道页面以获取更广泛的概述。

本地转发

本地转发用于将端口从客户端机器转发到服务器机器。基本上,SSH 客户端在配置的端口上监听连接,当收到连接时,它将连接隧道到 SSH 服务器。服务器连接到一个配置的目标端口,可能与 SSH 服务器不同的机器上。

本地端口转发的典型用途包括:

  • 通过跳板服务器隧道会话和文件传输
  • 从外部连接到内部网络上的服务
  • 通过互联网连接到远程文件共享

许多组织通过单一跳板服务器进行所有传入的 SSH 访问。服务器可能是一个标准的 Linux/Unix 机器,通常带有一些额外的加固、入侵检测和/或日志记录,或者可能是一个商业跳板服务器解决方案。

许多跳板服务器允许传入端口转发,一旦连接经过身份验证。这样的端口转发很方便,因为它允许技术熟练的用户非常透明地使用内部资源。例如,他们可能将本地机器上的端口转发到公司内联网的 web 服务器、内部邮件服务器的 IMAP 端口、本地文件服务器的 445 和 139 端口、打印机、版本控制存储库,或者几乎任何其他内部网络上的系统。通常,端口被隧道到内部机器上的 SSH 端口。

在 OpenSSH 中,本地端口转发使用 -L 选项配置:

ssh -L 80:intra.example.com:80 gw.example.com

此示例打开到 gw.example.com 跳板服务器的连接,并将本地机器上端口 80 的任何连接转发到 intra.example.com 的端口 80。

默认情况下,任何人(即使在不同的机器上)都可以连接到 SSH 客户端机器上指定的端口。然而,这可以通过提供一个绑定地址来限制为同一主机上的程序:

ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com

OpenSSH 客户端配置文件中的 LocalForward 选项可用于配置转发,而无需在命令行上指定。

远程转发

在 OpenSSH 中,远程 SSH 端口转发使用 -R 选项指定。例如:

ssh -R 8080:localhost:80 public.example.com

这允许远程服务器上的任何人连接到远程服务器上的 TCP 端口 8080。然后连接将被隧道回客户端主机,客户端然后对 localhost 的端口 80 进行 TCP 连接。可以使用任何其他主机名或 IP 地址代替 localhost 来指定要连接的主机。

这个特定示例对于让外部人员访问内部 web 服务器或将内部 web 应用程序暴露给公共互联网很有用。这可以由在家工作的员工完成,也可以由攻击者完成。

默认情况下,OpenSSH 只允许从服务器主机连接到远程转发的端口。然而,服务器配置文件 sshd_config 中的 GatewayPorts 选项可以用于控制这一点。可能的替代方案包括:

  • GatewayPorts no
  • 这阻止从服务器计算机外部连接到转发的端口。
  • GatewayPorts yes
  • 这允许任何人连接到转发的端口。如果服务器在公共互联网,任何人都可以连接到该端口。
  • GatewayPorts clientspecified
  • 这意味着客户端可以指定一个 IP 地址,从该地址允许连接到端口。语法如下:
ssh -R 52.194.1.73:8080:localhost:80 host147.aws.example.com

在此示例中,仅允许从 IP 地址 52.194.1.73 到端口 8080 的连接。

OpenSSH 还允许将转发的远程端口指定为 0。在这种情况下,服务器将动态分配一个端口并报告给客户端。当与 -O forward 选项一起使用时,客户端会将分配的端口号打印到标准输出。

参考资料:

https://www.ssh.com/academy/ssh/tunneling-example

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注