ssh服务的端口转发模拟

SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。总的来说 SSH 端口转发能够提供两大功能:

  1. 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  2. 突破防火墙的限制完成一些之前无法建立的 TCP 连接。

在实验之前我们需要了解 SSH 连接是有方向的,从 SSH Client 到 SSH Server 。而我们的应用也是有方向的,比如需要连接 应用的 Server 时,应用的Server 自然就是 Server 端,我们应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。如果这两个连接的方向一致,那我们就说它是本地转发。而如果两个方向不一致,我们就说它是远程转发。
命令:ssh
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能

因为是模拟实验,我们需要做以下准备假设A(192.168.159.219),B(192.168.159.100),C(192.168.159.200)三台虚拟机,我们在C上做防火墙策略,禁止A 链接C
在C上执行 iptables -A INPUT -s 192.168.159.219 -j REJECT
我们测试一下 用A ping C,ping不通,模拟C和A有防火墙,禁止A访问
ssh服务的端口转发模拟


本地转发:
由于防火墙设置的原因,只有本地的主机可以访问C 即只有B能访问C 那么如果现在我们有一台主机A想访问C ,该怎么访问呢,这是我们就要借助ssh的端口转发了,A作为客户端随机打开一个端口比如(1314)端口链接B的ssh(22)端口再由B转发给C
ssh服务的端口转发模拟
-L localport:remotehost:remotehostport sshserver
例:
ssh服务的端口转发模拟

ssh服务的端口转发模拟

远程转发:
当防火墙设置不能从客户端访问服务器端,但它的反向是允许的这时我们就需要远程转发,应用的客户端作为ssh 的服务器端。
ssh服务的端口转发模拟

ssh服务的端口转发模拟
-R sshserverport:remotehost:remotehostport sshserver
例:
ssh服务的端口转发模拟

动态端口转发:
当A处于防火墙内,禁止访问外网时,我们可以通过ssh端口转发访问一个已知的ip地址,再由它访问防火墙外的任意机器,比如C等。

ssh服务的端口转发模拟
ssh -D 1080[email protected]
ssh服务的端口转发模拟
ssh服务的端口转发模拟

当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserve上,由sshserver替之访问internet
在本机firefox设置代理socket proxy:127.0.0.1:1314
ssh服务的端口转发模拟
ssh服务的端口转发模拟
ssh服务的端口转发模拟
ssh服务的端口转发模拟

ssh服务的端口转发模拟
字符界面可以通过如下方式访问。
ssh服务的端口转发模拟
ssh服务的端口转发模拟

ssh服务的端口转发模拟
ssh服务的端口转发模拟