千家信息网

如何巧用SSH突破防火墙

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,前言众所周知,一个公司内部与外部网络之间是由防火墙存在的,防火墙的的存在保证了,企业内部的安全性。像一些明文传输的协议telnet或者一些安全性不是那么高的协议icmp,走这些协议的数据时 极度不安全
千家信息网最后更新 2026年10月31日如何巧用SSH突破防火墙

前言


众所周知,一个公司内部与外部网络之间是由防火墙存在的,防火墙的的存在保证了,企业内部的安全性。像一些明文传输的协议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、原理图


图解: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 来查看服务是否安装。


2)建立连接

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


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


上图中,使用命令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机器的连接情况,发现,并没有任何主机与自己建立连接。

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


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


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


ssh远程端口转发


1、应用场景

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

2、原理图

上图中,由于防火墙的原因,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 的任何请求 :

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

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

然后在Host A上建立ssh连接

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

[ root@vinsent ~ ]#curl --socks5 127.0.0.1 

I love linux...

# 成功抓取到网页


ssh远程转发


1、原理图

原理与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端口转发与本地转发的实验中,原理说的多些,实验步骤较少,还望见谅。欢迎阅读~~





防火墙 防火 主机 服务 端口 数据 客户 服务器 传输 隧道 原理 客户端 流量 目标 实验 安全 公司 场景 代理 突破 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 广州大一互联网络科技有限公司 科技创新与互联网经济 互联网科技会 金诺互联网科技 关于新基建和互联网科技 互联网的科技创新 互联网 新科技 甘肃拓世互联网科技有限公司 银川新华互联网科技学校地址 黑科技 体验场景 互联网大会 互联网公司高科技产品 互联网企业科技类企业如何做账 互联网安防科技感 工业互联网科技创业 广州梦谷互联网科技有限公司领导 广西科技产业互联网是什么 互联网金融运营模式中的金融科技 互联网科技手抄报图片 北京品多多互联网科技有限公司 湖南永感互联网科技有限公司 互联网科技排名 鑫亿盛互联网科技 互联网科技logo 狮子座互联网科技培训 盛创互联网科技有限公司 剑昆互联网络科技有限公司临桂 广州新华互联网科技学校电竞方面 长沙茂晟互联网科技有限公司 互联网科技大会大佬
0