如何巧用SSH突破防火墙

发布时间:2020-06-17 05:26:05 作者:vincenteve
来源:网络 阅读:2030

前言


        众所周知,一个公司内部与外部网络之间是由防火墙存在的,防火墙的的存在保证了,企业内部的安全性。像一些明文传输的协议telnet或者一些安全性不是那么高的协议icmp,走这些协议的数据时 极度不安全的,在防火墙规则中都是明令禁止的,有时我们由于业务的 需求,需要在外网与内网传输一些像telnet这样的流量,而我们又没有权利去要求相关的部门随意修改防火墙策略。此时SSH协议便可助你突破防火墙的障碍,成功完成数据传输。


ssh工作原理


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


ssh本地转发


1、应用场景

        假设公司有人到外地出差,但是有业务急需与公司内网连接,传输一些数据,我们知道这种情况。我们是没有职权要求打开公司的防火墙的,此时,我们就用到了ssh本地转发的功能,通过ssh打通防火墙,实现与公司内网通信。

2、原理图

如何巧用SSH突破防火墙       

    图解:Host A以Host B为跳板机,通过ssh协议先打通自己与局域网的“隧道”,然后以Host B的为telnet client端,建立与Host C的telnet连接,最终实现Host A能够与目标主机Host C之间实现telnet流量创输。而在外围有ssh协议为这些telnet流量“保驾护航”,我们在也不用担心自己的数据被截获。

3、实现ssh本地转发

    1)准备阶段

        准备3台虚拟机,可以使CentOS系列,也可以是RHEL系列。为了实验能够顺利实现,我们手动关闭防火墙(iptables -F)和SELinux(setenforce 0)当然了这仅仅是为了实验的需要,在生产场景中实不允许的。然后确保Host C主机都有telnet server服务,而Host B具有ssh server功能。通过rpm -q 来查看服务是否安装。

如何巧用SSH突破防火墙

   

    2)建立连接

        首先:测试Host A能否使用telnet与Host C建立连接,如果能,那么在Host C上使用防火墙规则禁用Host A在访问(iptables -A INPUT -s HostA_ip -j REJECT)

如何巧用SSH突破防火墙

建立ssh隧道,实现防火墙的突破,进入LAN。

如何巧用SSH突破防火墙

        上图中,使用命令ssh -L实现隧道的建立。4000表示我们随机指定开启的端口,确保该端口是不被任何服务使用。172.18.253.159表示目标主机(Host C)的的地址;23表示要连接目标主机的相应服务端口,如果是telnet服务则是23,smtp则监听在25。-N表示不打开远程shell,处于等待状态,-f表示后台启用。172.18.18.13则表示“跳板机”的地址,在本例中即Host B的IP地址。

        上例中,我们用过ssh -tn查看发现,我们其实不是与目录主机建立了连接,而是与Host B建立了连接,这就说明,该隧道已经建立好了。其次:我们再去查看Host C机器的连接情况,发现,并没有任何主机与自己建立连接。

如何巧用SSH突破防火墙

        最后:实现telnet流量传输。在Host A主机是哪个使用telnet去连接目标主机Host B,出现下图所示的内容,则说明telnet链路已通,然后连接进入目标主机Host C,使用ss -tn 查看,你会发现并不是Host A与自己建立的telnet连接,而是“跳板机”Host B。

如何巧用SSH突破防火墙

建立telnet连接之后我们在来看看Host A上的连接情况。ss -tn

如何巧用SSH突破防火墙

而Host B在收到Host A的telnet流量后,自己充当telnet客户端去连接Host C的telnet服务气端。到此,基于SSH的本地转发就实现了。


ssh远程端口转发


1、应用场景

        ssh基于端口转发的应用场景一般是这样:当我们在企业内部想要访问外部的某些站点,但是有防火墙禁用访问站点的端口,例如httpd服务的80端口,这样我们便不能访问外部网站。此时我们就可以使用ssh端口转发的方法实现,访问外部站点。

2、原理图

如何巧用SSH突破防火墙

        上图中,由于防火墙的原因,Host A 并不能访问Host C站点,此时我们可以在外部找一个主机Host B,以Host B 为代理服务器,这样,Host A 通过ssh协议突破防火墙,访问代理服务器,在由代理服务器将Host A的访问请求发送给Host C服务器,获取相应的信息(例如,网页信息),然后在回传给客户端Host A。

3、实例

    1)准备阶段

        准备3台主机,Host A 、HostB、Host C,用HostA 客户端,Host C作为服务器端,而Host B作为代理服务器agent。实验需求,将Host B的防火墙关闭,关闭所有主机的SELinux功能。

    2)方案实现

模拟防火墙,我们在Host C上设置防火墙规则,拒绝Host A 的任何请求 :

如何巧用SSH突破防火墙

在主机Host A上试着去抓取Host C的网页:

[ root@vinsent ~ ]#curl http://172.18.18.13
curl: (7) Failed connect to 172.18.252.50:80; Connection refused      # 被拒绝
[ root@vinsent ~ ]#

然后在Host A上建立ssh连接

如何巧用SSH突破防火墙

此时在你用Host A去访问依然不行,我们需要在Host B上做代理配置。这样才能转发数据信息。

[ root@vinsent ~ ]#curl --socks5 127.0.0.1 
<h2>I love linux...</h2>         # 成功抓取到网页


ssh远程转发


1、原理图

如何巧用SSH突破防火墙

        原理与ssh本地转发大体相同,这里就不放实验过程了,只是ssh的服务器端与客户端的角色发生了改变,由于,在一个企业内部,我们想要从内向外访问某端口,防火墙是没有限制的,但是想要从外向里访问就很困难。ssh远程转发的就是通过,局域网内部的主机充当ssh客户端与LAN外的主机建立连接,从而打通外部与内部的通道。此时有人可能会有疑问,不还是进步来么?其实不然,防火墙也是有链路记忆功能的,通过出去的通道在回来时,防火墙是不会做限制的。

2、数据过程

        首先,Host B以ssh客户端的身份访问外部的主机Host A (此时Host A充当ssh服务器)建立隧道,然后,Host A充当telnet客户端向Host B发送telnet流量。当收到Host A发来数据之后,Host B解封装,然后充当telnet客户端的身份,建立与Host C的连接,从而将数据安全的传输至目标主机。

3、实现命令

    在Host B上执行:ssh –R 9527:ip_HostC:23 –Nf ip_HostA 建立隧道,端口9527是在Host A上打开的

    在Host A上执行:telnet 127.0.0.1 9527


总结


    本篇详细了介绍了基于SSH“巧妙”的突破防火墙的方法,包括ssh端口转发,本地转发以及远程转发,都有各自的使用场景。但本文也存在很多不足,有许多地方讲述的不够详细,在ssh端口转发与本地转发的实验中,原理说的多些,实验步骤较少,还望见谅。欢迎阅读~~





推荐阅读:
  1. 巧用pt-ioprofile 工具
  2. php if判断条件的巧用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ssh 本地转发 远程转发

上一篇:消息队列应用场景解析

下一篇:机器学习算法:k近邻

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》