基于linux的Ssh端口转发
SSH 端口转发能够提供两大功能:
加密 SSH Client(客户端) 端至 SSH Server(服务端)之间的通讯数据
突破防火墙的限制完成一些之前无法建立的 TCP 连接
工作原理:
外部主机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:跳板机B的ipv4地址
当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到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端口
远程转发:
和本地转发不同的是,防火墙策略不再允许外部网络连接到内部网络了,那么我们就让主机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端口
动态端口转发:
都称google是邪恶的网站,所以中国禁止我们访问google的网站,就是因为中国防火墙策略,但是并不是禁止所有的外国网站,所以我们就可以实现*访问,道理和远程转发相似,
如图,我们先和rhel5建立ssh连接,然后由rhel5转发访问centos7,这里rhel5充当的就是ssh server
实现命令:
ssh -D 1080 root@sshserver
在linux虚拟机上实现的话,还要配置下浏览器,代理为127.0.0.1 端口1080. 然后就可以访问了。
实验步骤及图解:(本地转发)
分别准备centos5,centos6,centos7作为实验机。
Centos5 ip地址:192.168.109.164
Centos6 ip地址:192.168.109.138
Centos7 ip地址:192.168.109.167
Centos7上把centos5的IP地址写入到防火墙策略里,模拟端口转发需要的场景,Centos6作为跳板机。
iptables -A INPUT -s 192.168.109.164 -j REJECT
Centos5与centos6之间建立ssh隧道
ssh -L 9527:192.168.109.167:23 -fN 192.168.109.138
在cento6机器上核对一下连接信息
隧道建立完成,然后我们就可以实现本地端口转发了
telnet 127.0.0.1 9527
实验步骤及图解:(远程转发)
与本地转发实验环境相同,变化就是ssh的客户端与服务端对调了(由于防护墙策略不再允许外部网路进入,但是内部还是可以出去的。)
建立隧道实现命令:(在主机B上)
ssh -R 9527:telnetsrv:23 -fN sshsrv
验证连接关系:
ssh客户端(centos6)