内网渗透解析

本文深入探讨了内网穿透的原理与应用场景,包括传统服务器中转和点对点穿透技术,如UDP和TCP打洞。内网穿透常用于家中或公司设备的远程访问,例如NAS、远程桌面等。文章详细介绍了frp、zerotier等主流工具的配置方法,以及在防火墙规则下的穿透策略。最后,通过案例分析了frp和zerotier的安装配置,以实现远程桌面和Web服务的访问。总结指出,对于流量较小的场景推荐使用frp,大量UDP传输则选择zerotier,而企业级应用可考虑使用商业服务。
摘要由CSDN通过智能技术生成

1|0一、前言

阅读本文前需要先搞懂NAT、PAT、端口映射几个概念,内网宽带中的主机可以访问公网宽带主机,反之不可以访问;公网宽带主机可以和公网宽带主机双向访问;内网宽带中的主机和内网宽带中的主机互相无法访问。那么内网宽带中的客户机和公网宽带中的客户机如何访问另一个内网宽带中的服务器呢?这里就需要用到内网穿透技术。

2|0二、应用场景

家里或公司是运营商内网ipv4宽带或公网IP在防火墙后,且需要在外访问家里或公司的电脑、NAS、树莓派、摄像头等网络设备或远程控制等情况下。

3|0三、详细原理

3|13.1 传统内网穿透(服务器中转数据穿透)原理

对于在NAT之后的服务器来说,其不是不能主动访问公网端口,而是不能反过来有效的被公网访问。所以可以在中间架设一个公网服务器,让在NAT之后的服务器持续主动访问这个拥有公网IP地址的服务器,,这样内网服务器就成功与公网中转服务器建立了一个连接通道。然后当有任何其他NAT后的客户端主动连接公网中转服务器时,公网服务器接收到连接请求之后马上把这连接请求通过先前建立好的隧道转发到内网服务器,内网服务器将响应数据包再原路转发回去,最终到达公网中转服务器,然后返回给其他NAT后的客户端。

3|23.2 点对点穿透原理

在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。只要是数据量很大,而一般利用中转服务器又需要一定规模投入的应用,我们都可以考虑用P2P技术。

1.UDP打洞技术
最为常见的实现P2P的方式是采用UDP打洞技术,UDP打洞技术是通过中间服务器的协助在各自的NAT网关上建立相关的表项,使P2P连接的双方发送的报文能够直接穿透对方的NAT网关,从而实现P2P客户端互连。如果两台位于NAT设备后面的P2P客户端希望在自己的NAT网关上打个洞,那么他们需要一个协助者——集中服务器,并且还需要一种用于打洞的Session建立机制。
Session建立机制:
假定客户端A要发起对客户端B的直接连接,具体的“打洞”过程如下:
(1)A最初不知道如何向客户端B发起连接,于是A向集中服务器(本质上是一台被设置在公网上的服务器,建立P2P的双方都可以直接访问到这台服务器。位于NAT网关后面的客户端A和B都可以与一台已知的集中服务器建立连接,并通过这台集中服务器了解对方的信息并中转各自的信息)发送消息,请求集中服务器帮助建立与客户端B的UDP连接。
(2)集中服务器将含有B的外网和内网的地址二元组发给A,同时,集中服务器将包含有A的外网和内网的地址二元组信息的消息也发给B。这样一来, A与B就都知道对方外网和内网的地址二元组信息了。
(3)当A收到由集中服务器发来的包含B的外网和内网的地址二元组信息后,A开始向B的地址二元组发送UDP数据包,并且A会自动锁定第一个给出响应的B的地址二元组。同理,当B收到由集中服务器发来的A的外网和内网地址二元组信息后,也会开始向A的外网和内网的地址二元组发送UDP数据包,并且自动锁定第一个得到A回应的地址二元组。一旦A与B都向对方的NAT设备在外网上的地址二元组发送了数据包,就打开了A与B之间的“洞”,A与B向对方的外网地址发送数据,等效为向对方的客户端直接发送UDP数据包了。一旦应用程序确认已经可以通过往对方的外网地址发送数据包的方式让数据包到达NAT后面的目的应用程序,程序会自动停止继续发送用于“打洞”的数据包,转而开始真正的P2P数据传输。
当然,UDP转换协议提供的“洞”不是绝对可靠的,多数NAT设备内部都有一个UDP转换的空闲状态计时器,如果在一段时间内没有UDP数据通信,NAT设备会关掉由“打洞”过程打出来的“洞”。如果P2P应用程序希望“洞”的存活时间不受NAT网关的限制,就最好在穿越NAT以后设定一个穿越的有效期。

2.TCP打洞技术
从现在的主流应用的角度上来看,基于TCP的P2P应用显然不如基于UDP的应用那么广泛,但是也存在打洞的需求。TCP相对于UDP而言要复杂的多,TCP连接的建立要依赖于三次握手的交互,所以NAT网关在处理TCP连接的时候,需要更多的开销。但是,由于TCP协议完备的状态机机制,TCP反而比UDP更能精确的获取某个Session的生命期。
一种新的代理类型 XTCP 能解决这个问题,实现方式可以是采用搭建FRP服务器的方式,在传输数据的两端都部署上FRP客户端用于建立直接的连接。

3|33.3 延伸一个内网渗透知识

为了安全起见,通常会在网络中加入防火墙,防火墙有入站规则和出站规则。如果不是非常严格的安全管控,通常是不会设置出站规则的,但是入站规则一般都会设置的,比如说外部可以通过80端口传入内网的WEB服务器访问网页,但是不能通过3389端口登陆内网的远程桌面。而在内网渗透的过程中碰到这种情况,我们也可以借助上面内网传统的方式实现穿透防火墙的入站规则。因为防火墙通常只拦截了入站,没有拦截出站,那么我们可以让内网服务器主动出站(主动连接到黑客的服务器),与黑客自己的服务器打通隧道,最终绕过防火墙连上3389远程桌面。
还有一种情况就是我们已经拿下了内网其中一台并没有做任何防火墙规则的白名单服务器,但是我们想连上内网另一台做了入站规则的目标服务器,那么我们可以让这台白名单服务器作为一个跳板,让他先监听自身任意一个端口,然后在有任何用户连上这个端口之后,白名单服务器就主动连上内网的目标服务器,然后借助这台白名单服务器打通黑客和目标服务器的连接隧道。而在黑客工具中大名鼎鼎的lcx原理也就是如此,前者的实现是lcx的listen和slave命令,后者的实现是lcx的tran命令。

3|43.4 穿透原理总结

内网穿透传统方式会出现服务器和客户机之间的数据传输全部经过中转服务器,传输速度将受制于中转服务器的上下行带宽,不过稳定性很好,对于自己要购置的云主机要求就是大带宽,一般这种云主机按流量计费,传输的数据量越大价格自然越贵。所以点对点穿透便能解决流量带来的困扰,点对点可以实现服务器和客户机之间打洞直接进行数据通信,这种方式一般用于udp协议的传输,比如应用于远程NAS看视频听歌,但这种方式需要服务器和客户机都安装穿透工具,对用户访问端来说不够方便,而且这种方式受复杂网络环境影响较大,不能100%实现,稳定性欠缺。

4|0四、方法实现

4|14.1 几款主流工具实现

1.frp(开源):

FRP使用 Go 语言开发,可以支持 Windows、Linux、macOS、ARM 等多平台部署。frp内网穿透无需多复杂的配置就可以达到比较好的穿透效果,具有较强的扩展性,支持tcp, udp, http, https 协议,并且 web 服务支持根据域名进行路由转发。此外,FRP 提供了一种新的代理类型 XTCP ,可以在传输大量数据时让流量不经过服务器中转,用于实现点对点穿透,当然,此功能并不能保证在你的网络环境 100% 可用,成功率较低,而且还要求访问端也得运行 FRP 客户端 (目前手机端ios没有frp客户端软件)。由于实现条件较多,所以有文件传输需求的朋友但必须用frp的朋友还是建议买带宽稍大一点的 VPS 会比较省心。frp适合有linux基础的个人,且需要自购一个云主机做中转,企业追求稳定可以考虑其他方式。

2.ngrok(开源):

ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。主要用途是给网站或者安装开发提供部署环境,但是也同样可以用来进行端口转发。ngrok适合有linux基础的个人,和frp类似,但比frp配置稍复杂,且需要自购一个云主机做中转,企业追求稳定可以考虑其他方式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值