DDoS防护

从v0.4.8开始,GoEdge提供了一个基础的DDoS防护功能,目前可以管理TCP并发连接数限制等。由于是在IP层(3层)拦截数据包,所以效率相对于TCP层(4层)要高了不少。

本功能为专业功能,请在专家指导下使用此功能。

前提条件

要想使用此功能,需要有以下前提:

  • 边缘节点安装在Linux系统上,比如CentOS、Ubuntu等;
  • 边缘节点所在系统上已经安装了nftables(介绍页面),且版本号不低于v0.9。可以在系统控制台上输入以下命令来检查是否已经安装了nftables
    nft --version
    如果没有安装,可以参考nftables一节进行安装;如果版本号低于v0.9,又想使用此功能,请升级系统到更高版本。目前已知支持nftables v0.9以上版本的有:
    • CentOS Stream 8 / CentOS Stream 9
    • Ubuntu 23
    • Debian 12
    • 其他各种Linux发行版本的最新版

设置

可以在集群中设置全局选项,也可以在单个节点中单独设置单个节点的选项。

集群设置

可以在某个集群”集群设置”– “DDoS防护”中配置全局选项,这里配置后,当前集群下的所有节点都将自动应用此设置:

DDoS-Protection1

其中的选项说明请参考当前文章的”选项说明“一段。

可以在”状态”页面中查看当前集群下的所有节点的状态:

DDoS-Protection2

其中:

  • 如果节点尚未连接到API节点,则提示为not connected yet
  • 如果DDoS防护设置应用正常,则显示为绿色,并显示版本号;
  • 如果nftables版本号低于v0.9,也会同样显示为绿色和版本号

节点设置

可以在某个节点”节点设置”–“DDoS防护”中设置单个节点单独的选项:

DDoS-Protection3

选中”打开独立配置”之后,所有的配置优先级都会高于集群的全局设置。

配置保存后,当前界面下方会显示节点检查结果。

选项说明

  • 单节点TCP最大连接数 - 单个节点可以接受的TCP最大连接数。如果为0,则默认为100000;超出此连接数的数据包都将被丢弃;处于TIME_WAIT状态的连接也会计算在内;
  • 单IP TCP最大连接数 - 单个IP可以连接到节点的TCP最大连接数。如果为0,则默认为1000;最小值为5;这里需要注意,单个IP并不对应着一台终端计算机,有可能有成千上万个终端计算机共享着同一个公网IP,所以要谨慎设置这个选项,并不是越小越好;
  • 单IP TCP新连接速率 - 单个IP每分钟可以创建TCP新连接的速率。如果为0,则默认为500;最小值为5;通常如果单个IP创建新连接的速率很快,说明要么是服务端无法正常提供服务,导致客户端必须不断重试;要么是恶意攻击,攻击者欲通过不断挤占连接数让正常访客无法访问;
  • 单IP TCP新连接速率黑名单 - 单个IP可以如果在单位时间内创建的TCP连接数超过这个值,就自动加入到nftables黑名单中。如果为0,则默认为1000;最小值为5;默认屏蔽1800秒;这功能在v0.5.2中加入;
  • TCP端口列表 - 只在这些端口上使用当前配置,如果不填的话,则默认为80443
  • IP白名单 - 在这个白名单中的IP不受当前设置的限制;默认会自动将同集群的节点IP作为白名单。

调试

如果已经设置了DDoS选项,可以在”状态”页面查看各个边缘节点的应用配置的状态,也可以在节点上使用:

nft list ruleset
查看自动生成的nftables规则,GoEdge自动创建的表为 edge_dft_v4ip6 edge_dft_v6

对于商业版用户的DNS节点,GoEdge额外自动创建的表为 edge_dns_v4ip6 edge_dns_v6

性能提示

在高负载的服务器上,开启DDoS防护会使用更多的CPU,进程列表中会出现类似于以下的进程(使用 top 命令):

20 root      20   0       0      0      0 R  70.3   0.0   7:45.86 ksoftirqd/1 
属于正常现象。

如果负载已经超出了系统承受能力,可以停用当前节点的DDoS防护功能。

GoEdge文档