基于linuxSsh端口转发

 

SSH 端口转发能够提供两大功能:

加密 SSH Client(客户端) 端至 SSH Server(服务端)之间的通讯数据

突破防火墙的限制完成一些之前无法建立的 TCP 连接

 wKioL1nO8_SRkVYLAAAoC-ZMK8A046.png

工作原理:

外部主机A想要连接到内部主机C上,由于内部防火墙策略,主机A和主机C不能直接连接,这时可以利用主机B作为跳板机,先实现主机A和主机B的连接,再去连接主机C,这时主机C以为是主机B要和他建立连接,实际是主机A与主机C的连接。

 

应用场景:

当主机A是通过telnet对主机C进行访问的话,实际上是不安全的,telnet协议没有加密,通过网络是可以被截获的,这时我们可以用ssh协议在主机A和主机B建立一个ssh隧道,这样telnet被包含在ssh协议中,比较安全

实现命令:

在主机A:(本地转发)
ssh  -L  9527:telnetsrv:23  -fN  sshsrv

telnet 127.0.0.1 9527

-f 后台启用

-N 不打开远程shell,处于等待状态

-g 启用网关功

 

Telnetsrv:目标主机C上的iPv4地址

9527:指定主机A上的端口(没被占用的情况下)

23:目标主机C对应的telnet端口

-fN:在主机A上实现后台执行,不占用当前终端,并且不登录主机B处于等待状态。

sshsrv:跳板机Bipv4地址

当访问本机的9527的端口时,被加密后转发到sshsrvssh服务,再解密被转发到telnetsrv:23

data à localhost:9527 à localhost:XXXXX àsshsrv:22 à sshsrv:YYYYY à telnetsrv:

数据的流动:

先在本机A指定的9527端口,生成一个随机端口作为ssh client客户端去连接ssh server服务端B机器的22端口,然后B机器随机生成一个端口作为telnet client客户端去连接telnet server服务端C机器23端口

 

远程转发:

wKioL1nO_X7h0hOqAAAwo3EGabI959.png 

和本地转发不同的是,防火墙策略不再允许外部网络连接到内部网络了,那么我们就让主机B作为ssh client去连接主机A 那么主机A就成了ssh 服务器,这样把通道建立起来,后面步骤就和本地转发一致了。

实现命令:(在主机B上)

ssh -R 9527:telnetsrv:23 -fN sshsrv

 

sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23

Data    sshsrv:9527         sshsrv:22         localhost:XXXXX         localhost:YYYYY             telnetsrv:23

数据的流动:先到主机A上的9527端口,由主机A上的ssh对应的22端口发出,到达ssh客户端本机B上的随意端口,本机B再随意生成一个端口作为telnet客户端去连接telnet服务端的23端口

 

动态端口转发:

 wKiom1nO91mgOgxEAAApx0x3A2o629.png

都称google是邪恶的网站,所以中国禁止我们访问google的网站,就是因为中国防火墙策略,但是并不是禁止所有的外国网站,所以我们就可以实现×××访问,道理和远程转发相似,

如图,我们先和rhel5建立ssh连接,然后由rhel5转发访问centos7,这里rhel5充当的就是ssh server

实现命令:

ssh  -D 1080  root@sshserver

linux虚拟机上实现的话,还要配置下浏览器,代理为127.0.0.1 端口1080. 然后就可以访问了。

wKioL1nPAoLhsfQuAAGXB7hZLPE485.pngwKiom1nPAtniQraCAAC1fJLz9-U889.pngwKiom1nPAuniLYP-AABA8xxCpTU941.png

实验步骤及图解:(本地转发)

分别准备centos5centos6centos7作为实验机。

Centos5 ip地址:192.168.109.164

Centos6 ip地址:192.168.109.138

Centos7 ip地址:192.168.109.167

Centos7上把centos5IP地址写入到防火墙策略里,模拟端口转发需要的场景,Centos6作为跳板机。

iptables -A INPUT -s 192.168.109.164 -j REJECT

wKioL1nO99aQwTeqAAAkRKuaEh4877.png 

Centos5centos6之间建立ssh隧道

ssh  -L  9527:192.168.109.167:23  -fN  192.168.109.138

wKioL1nO9-zyMgN3AABiWQBJ9Vg674.png 

cento6机器上核对一下连接信息

 wKiom1nO-GmD6MU5AAAmHqK7znM718.png

隧道建立完成,然后我们就可以实现本地端口转发了

telnet 127.0.0.1 9527

 wKioL1nO-BzRjQH7AABQXo1q9A8715.png


实验步骤及图解:(远程转发)

与本地转发实验环境相同,变化就是ssh的客户端与服务端对调了(由于防护墙策略不再允许外部网路进入,但是内部还是可以出去的。)

建立隧道实现命令:(在主机B上)

ssh -R 9527:telnetsrv:23 -fN sshsrv

验证连接关系:

ssh客户端(centos6)

wKioL1nO_2_QbJ7_AAAoO0TMXvA691.pngssh服务端(centos5)

wKiom1nO_-LCjFOEAABlSt_QbsI592.png实现通讯:

wKiom1nPAB_AClCnAABQXo1q9A8436.png