DDoS防护
CDN提供了一个基础的DDoS防护功能,目前可以管理TCP并发连接数限制等。由于是在IP层(3层)拦截数据包,所以效率相对于TCP层(4层)要高了不少。
本功能为专业功能,请在专家指导下使用此功能。
前提条件
要想使用此功能,需要有以下前提:
- 边缘节点安装在Linux系统上,比如CentOS、Ubuntu等;
- 边缘节点所在系统上已经安装了nftables(介绍页面),且版本号不低于v0.9。可以在系统控制台上输入以下命令来检查是否已经安装了
nftables
:
如果没有安装,可以参考nftables一节进行安装;如果版本号低于v0.9,又想使用此功能,请升级系统到更高版本。目前已知支持nftables v0.9以上版本的有:nft --version
- 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秒;TCP端口列表
- 只在这些端口上使用当前配置,如果不填的话,则默认为80
和443
;IP白名单
- 在这个白名单中的IP不受当前设置的限制;默认会自动将同集群的节点IP作为白名单。
调试
如果已经设置了DDoS选项,可以在”状态”页面查看各个边缘节点的应用配置的状态,也可以在节点上使用:
nft list ruleset
查看自动生成的nftables规则,CDN自动创建的表为 cloud_dft_v4
和 ip6 cloud_dft_v6
。
对于商业版用户的DNS节点,CDN额外自动创建的表为 cloud_dns_v4
和 ip6 cloud_dns_v6
。
性能提示
在高负载的服务器上,开启DDoS防护会使用更多的CPU,进程列表中会出现类似于以下的进程(使用 top
命令):
20 root 20 0 0 0 0 R 70.3 0.0 7:45.86 ksoftirqd/1
属于正常现象。
如果负载已经超出了系统承受能力,可以停用当前节点的DDoS防护功能。