Skip to content

NetGuard 工作原理

一般来说,发起 DDoS 的攻击者会控制大量的傀儡机(俗称肉机或肉机),对目标服务器发起不同类型的攻击。

不论是哪种攻击,它们的目的都是阻碍正常用户与服务器之间的通讯。

我们将讨论两种常见的攻击,以及 NetGuard 的防范措施。

DDoS 攻击的类型

UDP 放大攻击

收发 UDP 数据无需建立连接,且来源地址可以伪造,使得 UDP 成为网络攻击最常用的协议。

攻击者伪造为受害者服务器的地址,向拥有较大带宽、且协议设计有缺陷的网络服务器(例如 DNS 服务器等)发起大量的查询请求,而这些网络服务器将会把查询结果发到受害者的服务器。查询结果的大小往往是查询请求的很多倍,所以攻击者可以使用相对较小的带宽,发起较大规模的攻击。

这些攻击导致的带宽占用常常高达几十 Gbps 到几百 Gbps,即使受害者的服务器没有开启任何端口,它所处的机房依然会收到这些攻击流量。如果机房的带宽不足,那么整个机房的服务器都会被影响。所以,机房往往会限制每台服务器或每个 IP 的最大防御值,攻击达到防御值后,机房会切断受害者服务器的网络连接,直到攻击停止。

TCP 连接攻击

收发 TCP 数据必须先连接,且来源地址不可伪造。即使如此,针对 TCP 的攻击也是很常见的。

每个 TCP 连接都会消耗掉服务器的 CPU/内存/网络资源,所以每台服务器能同时处理的 TCP 连接是有限的。攻击者控制大量傀儡机,向受害者的服务器发起 TCP 连接。有时候,他们会保持这些 TCP 连接不断开,但也不发送任何数据;有时候,他们会快速建立连接并断开连接。

不论是哪种方式,都会消耗掉有限的服务器资源。当服务器资源被耗尽,正常用户也将无法与服务器建立连接。

NetGuard 怎么做

更改数据路径

接入 NetGuard 的 SDK 后,App 与服务器之间的数据流动如下:

  1. NetGuard SDK 启动后,会绑定到 127 开头的回环 IP 地址
  2. 客户端直接连接上述的回环 IP 地址,而不是真实业务服务器
  3. NetGuard SDK 会把收到的数据发送到数据转发服务器
  4. 数据转发服务器把收到的数据转发到用户保活服务器
  5. 用户保活服务器把收到的数据转发到业务服务器
  6. 用户保活服务器接收业务服务器的数据并转发给数据转发服务器
  7. 数据转发服务器把收到的业务数据转发给 NetGuard SDK
  8. NetGuard SDK 把接收到的业务数据转发给客户端 App

数据流动路径如下

客户端 App <--> NetGuard SDK <--> 数据转发服务器(网关) <--> 用户保活服务器(盾机) <--> 业务服务器

巧用数学技巧

攻击者在攻击目标服务器之前,必须要找到目标服务器的 IP 地址,才能发起攻击。所以,NetGuard 做的第一件事,就是隐藏真实服务器的 IP 地址。

在 NetGuard 的用户后台,可以添加最多 30 个数据转发服务器 IP 地址,开发者需要把数据转发服务端部署到这些 IP 地址。当最终用户启动带有 NetGuard SDK 的 App 后,SDK 会从 NetGuard 的服务器获取到 4 个 IP 地址。通过这样的数学办法,开发者可以创建高达 27405 个不同的 IP 地址组合。

C304=30!4!(304)!=27405

攻击者分析 App 的时候,也会得到其中一组 IP 地址。当他设法使这这一组里的 IP 地址全部掉线之后,其他用户根本不会受到任何影响,因为其他用户被分配的 4 个 IP 地址跟他是不一样的。所以受影响的用户数只占全部用户数的1/27405

请注意

  1. 只有自建服务器的开发者才有 30 个 IP 地址的限制
  2. 加入共享防御计划私有化部署的开发者不受此限制

保持用户连接

NetGuard 基于 TCP 实现了一套自己的数据收发协议。当用户因为各种原因与服务器断开连接,NetGuard 会立刻从上述的 4 个 IP 地址里选择另一个进行连接,并把数据进行断点续传。这一切对于开发者和用户都是透明的,只要接入 NetGuard SDK 和服务器,他们不需要做任何额外的事情,只用按以前那样正常收发数据就可以了。

限制 TCP 连接

NetGuard 的服务端可按需限制每个 IP(甚至每台设备)的 TCP 并发连接数及连接频率,确保不会瞬间有大量的无效 TCP 连接到达 App 服务器。

请注意

自建服务器只能限制 IP 和设备的并发连接数,无法限制连接频率

下一步做什么

  1. 如果你想节省成本,或不想了解太多技术细节,请加入共同防御计划
  2. 如果你想自己搭建 NetGuard 服务端,请阅读自建服务器章节
  3. 如果你已加入共同防御计划或已自建服务器,即可接入 NetGuard SDK

Copyright © 2006-2025 NetGuard