{{i18nTranslate('_layout.t11')}} {{i18nGetLang()==='zh' ? 'EN' : '中文'}}

# 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防护”中配置全局选项，这里配置后，当前集群下的所有节点都将自动应用此设置：

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

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

其中：

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

### 节点设置

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

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

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

### 选项说明

- `单节点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端口列表` - 只在这些端口上使用当前配置，如果不填的话，则默认为`80`和`443`；
- `IP白名单` - 在这个白名单中的IP不受当前设置的限制；默认会自动将同集群的节点IP作为白名单。

## 调试

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

    nft list ruleset

查看自动生成的nftables规则，GoEdge自动创建的表为 `edge_dft_v4` 和 `ip6 edge_dft_v6`。

对于商业版用户的DNS节点，GoEdge额外自动创建的表为 `edge_dns_v4` 和 `ip6 edge_dns_v6`。

## 性能提示

在高负载的服务器上，开启DDoS防护会使用更多的CPU，进程列表中会出现类似于以下的进程（使用 `top` 命令）：

    20 root      20   0       0      0      0 R  70.3   0.0   7:45.86 ksoftirqd/1

属于正常现象。

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

{{i18nTranslate('_layout.t27')}}
{{i18nTranslate('_layout.t12')}}