当前位置: 首页 > 科技观察

精彩的!巧妙利用SSH突破限制,穿透内网

时间:2023-03-22 14:55:29 科技观察

笔者在工作中遇到了这个场景。在以下两种网络限制下,总部如何访问分公司内部的web服务器?dmz服务器可以访问总部外网服务器的22端口,但是不能访问web服务器;web服务器不能访问公网,但是dmz网络没有限制。乍一看需求,我们首先想到的肯定是内网端口映射到公网,或者vpn,但是不修改网络策略是很难实现的。还有别的办法吗?我们继续从纯网络的角度来分析现有的情况。网络通信是双向的,有请求和响应,也就是我们俗称的“通信”。DMZ可以访问外部22端口,代表请求,返回包的两个通信通道畅通无阻。能否利用回包通道发起从外到内的反向访问?答案当然是可以的,试试吧,我们需要ssh工具。我们在dmz中执行以下命令。[root@dmz]#ssh-f-N-g-R6606:10.1.1.1:80root@115.100.100.100-f#代表后台运行程序-N#代表使用远程端口转发创建ssh隧道-g#监听本机的所有IP地址-R#表示使用远程端口转发创建ssh隧道组合命令。我们使用root用户远程连接115.100.100.100,远程主机监听6606端口,访问这个端口时会跳转到dmz的80端口。此过程使用ssh隧道。dmz运行后,总部服务器已经有了端口监听。[根@中心]#netstat-tunlp|grep6606tcp00127.0.0.1:66060.0.0.0:*LISTEN8616/sshd:root我们在总部服务器上试过端口提示拒绝,说明网络已经连上了,但是dmz服务器没有80端口没有监听,所以端口被拒绝。[root@center]#telnet127.0.0.16606Trying127.0.0.1...telnet:connecttoaddress127.0.0.1:Connectionrefused做同样的事情,然后将web服务器反向连接到dmz网络,当dmz服务器访问本地80端口会跳转到web服务器的80端口。[root@web]#ssh-f-N-g-R80:10.1.1.1:80root@10.1.1.2再次去总部服务器测试访问,可以通信[root@center]#telnet127.0.0.16606尝试127.0.0.1...连接到127.0.0.1。转义符是'^]'。最后,我们从网络的角度来回顾一下数据包的转发过程。从总部服务器可以看到以下信息。#dmz服务器以115.100.100.101:29493为源,访问本地22端口,建立tcp连接。[root@center]#ss|grep115.tcpESTAB00172.16.1.1:22115.100.100.101:29493[根@中心]#netstat-tpna|grep115.tcp00172.16.1.127:22101.230.91.53:29493ESTABLISHED8555/sshd:root#本地端口也对应进程号8616[root@center]#netstat-tunlp|grep6606tcp00127.0.0.1:66060.0.0.0:*监听8616/sshd:root[root@center]#ps-ef|grep8616root861685550Dec03?00:01:04sshd:root。总部服务器访问127.0.0.1:6606时,网络连接信息如下。#双向通道已经建立[root@center]#ss|grep6606tcpESTAB00127.0.0.1:6606127.0.0.1:51158tcpESTAB00127.0.0.1:51158127.0.0.1:6606我们最后用图片展示最终的网络转发过程。DMZ向总部服务器发起ssh连接,转发远程端口。当远程服务器访问转发端口时,数据将被封装到返回数据包通道中。由于ssh本身是加密的,外部网络无法知道网络交互逻辑,从而实现反向访问。