NetGuard 工作原理
一般来说,发起 DDoS 的攻击者会控制大量的傀儡机(俗称肉机或肉机),对目标服务器发起不同类型的攻击。
不论是哪种攻击,它们的目的都是阻碍正常用户与服务器之间的通讯。
我们将讨论两种常见的攻击,以及 NetGuard 的防范措施。
DDoS 攻击的类型
UDP 放大攻击
收发 UDP 数据无需建立连接,且来源地址可以伪造,使得 UDP 成为网络攻击最常用的协议。
攻击者伪造为受害者服务器的地址,向拥有较大带宽、且协议设计有缺陷的网络服务器(例如 DNS 服务器等)发起大量的查询请求,而这些网络服务器将会把查询结果发到受害者的服务器。查询结果的大小往往是查询请求的很多倍,所以攻击者可以使用相对较小的带宽,发起较大规模的攻击。
这些攻击导致的带宽占用常常高达几十 Gbps 到几百 Gbps,即使受害者的服务器没有开启任何端口,它所处的机房依然会收到这些攻击流量。如果机房的带宽不足,那么整个机房的服务器都会被影响。所以,机房往往会限制每台服务器或每个 IP 的最大防御值,攻击达到防御值后,机房会切断受害者服务器的网络连接,直到攻击停止。
TCP 连接攻击
收发 TCP 数据必须先连接,且来源地址不可伪造。即使如此,针对 TCP 的攻击也是很常见的。
每个 TCP 连接都会消耗掉服务器的 CPU/内存/网络资源,所以每台服务器能同时处理的 TCP 连接是有限的。攻击者控制大量傀儡机,向受害者的服务器发起 TCP 连接。有时候,他们会保持这些 TCP 连接不断开,但也不发送任何数据;有时候,他们会快速建立连接并断开连接。
不论是哪种方式,都会消耗掉有限的服务器资源。当服务器资源被耗尽,正常用户也将无法与服务器建立连接。
NetGuard 怎么做
更改数据路径
接入 NetGuard 的 SDK 后,App 与服务器之间的数据流动如下:
- NetGuard SDK 启动后,会绑定到 127 开头的回环 IP 地址
- 客户端直接连接上述的回环 IP 地址,而不是真实业务服务器
- NetGuard SDK 会把收到的数据发送到数据转发服务器
- 数据转发服务器把收到的数据转发到用户保活服务器
- 用户保活服务器把收到的数据转发到业务服务器
- 用户保活服务器接收业务服务器的数据并转发给数据转发服务器
- 数据转发服务器把收到的业务数据转发给 NetGuard SDK
- NetGuard SDK 把接收到的业务数据转发给客户端 App
数据流动路径如下
客户端 App <--> NetGuard SDK <--> 数据转发服务器(网关) <--> 用户保活服务器(盾机) <--> 业务服务器
巧用数学技巧
攻击者在攻击目标服务器之前,必须要找到目标服务器的 IP 地址,才能发起攻击。所以,NetGuard 做的第一件事,就是隐藏真实服务器的 IP 地址。
在 NetGuard 的用户后台,可以添加最多 30 个数据转发服务器 IP 地址,开发者需要把数据转发服务端部署到这些 IP 地址。当最终用户启动带有 NetGuard SDK 的 App 后,SDK 会从 NetGuard 的服务器获取到 4 个 IP 地址。通过这样的数学办法,开发者可以创建高达 27405 个不同的 IP 地址组合。
攻击者分析 App 的时候,也会得到其中一组 IP 地址。当他设法使这这一组里的 IP 地址全部掉线之后,其他用户根本不会受到任何影响,因为其他用户被分配的 4 个 IP 地址跟他是不一样的。所以受影响的用户数只占全部用户数的1/27405
保持用户连接
NetGuard 基于 TCP 实现了一套自己的数据收发协议。当用户因为各种原因与服务器断开连接,NetGuard 会立刻从上述的 4 个 IP 地址里选择另一个进行连接,并把数据进行断点续传。这一切对于开发者和用户都是透明的,只要接入 NetGuard SDK 和服务器,他们不需要做任何额外的事情,只用按以前那样正常收发数据就可以了。
限制 TCP 连接
NetGuard 的服务端可按需限制每个 IP(甚至每台设备)的 TCP 并发连接数及连接频率,确保不会瞬间有大量的无效 TCP 连接到达 App 服务器。
请注意
自建服务器只能限制 IP 和设备的并发连接数,无法限制连接频率
下一步做什么
- 如果你想节省成本,或不想了解太多技术细节,请加入共同防御计划
- 如果你想自己搭建 NetGuard 服务端,请阅读自建服务器章节
- 如果你已加入共同防御计划或已自建服务器,即可接入 NetGuard SDK