Skip to content

连接抖动配置

连接抖动检测用于识别短时间内过多的连接尝试。从 EMQX 6.3.0 开始,您可以分别为客户端 ID、用户名和源 IP 地址配置独立的检测策略。

检测维度

flapping_detect 配置包含以下维度。每个维度默认关闭。

配置项检测键行为
by_clientid客户端 ID统计使用同一客户端 ID 的连接尝试。
by_username用户名统计使用同一用户名的客户端连接尝试。未提供用户名的连接不计入此维度。
by_peerhost源 IP 地址统计来自同一源 IP 地址的连接尝试。

为维度配置检测参数即可启用该维度;将其设置为 none 可关闭。您可以启用 3 个维度的任意组合,每个已启用的维度均独立计数。

每个维度支持以下检测参数:

字段说明默认值
window_timeEMQX 统计连接尝试的时间窗口。1m
max_countwindow_time 内触发封禁的连接尝试次数。15
ban_time封禁匹配的客户端 ID、用户名或源 IP 地址的时长。5m

当客户端 ID、用户名或源 IP 地址达到阈值时,EMQX 会为对应的标识或地址创建临时封禁记录。后续匹配的新连接会在认证前被拒绝,已建立的连接不会断开。封禁记录会自动过期,也可以通过 /banned REST API 查看或提前删除。

检测计数器由各节点独立维护,EMQX 不会合并由不同节点处理的连接尝试。某个节点检测到连接抖动后,生成的封禁记录会复制到整个集群。

配置示例

以下 HOCON 示例为客户端 ID 和源 IP 地址配置不同的策略,并关闭按用户名检测:

hocon
flapping_detect {
  by_clientid {
    window_time = 1m
    max_count = 15
    ban_time = 5m
  }

  by_username = none

  by_peerhost {
    window_time = 30s
    max_count = 100
    ban_time = 10m
  }
}

您也可以为各个 Zone 单独配置这些设置。Zone 中的维度策略未指定部分字段时,会继承对应全局维度策略中的字段。

与 EMQX 6.3.0 之前配置的兼容性

从 EMQX 6.3.0 开始,以下扁平字段已弃用:

  • flapping_detect.enable
  • flapping_detect.window_time
  • flapping_detect.max_count
  • flapping_detect.ban_time

EMQX 继续接受这些字段以保持向后兼容。当 enable = true 时,EMQX 将扁平策略字段映射到 by_clientid。当 enable = false,或配置中包含扁平策略字段但未显式设置 enable = true 时,EMQX 将 by_clientid 设置为 none

已弃用的字段仅影响按客户端 ID 检测。by_usernameby_peerhost 仍为 none,需要显式配置才能启用。

如果配置同时包含 by_clientid 和已弃用的扁平字段,by_clientid 优先生效,包括将其设置为 none 的情况。

EMQX 提供了更多配置项以更好地满足定制化需求。详情请参见 EMQX 企业版配置手册

您也可以在 EMQX Dashboard 中点击访问控制 -> 连接抖动配置连接抖动检测。有关 Dashboard 操作步骤,参见连接抖动检测