EMQX MQTT 消息服务器测评

EMQX 4.x/5.x 三级等保现场测评取证命令单:按控制点组织 emqx ctl 认证器、授权链、Dashboard 与监听器核查命令、判定要点与取证要求。

定位:EMQX MQTT 三级等保现场测评取证命令单,按 GB/T 22239-2019 安全计算环境控制点分节组织核查命令、判定要点与取证要求。 适用范围:EMQX 4.x/5.x Broker 单节点、集群和企业版场景。 配套文章:22、高风险判定指引与加固对照表、16、安全评估加固记录表3.0、21、Web中间件安全加固。

使用说明:

  • 本文所有命令均为只读取证命令,不修改配置、不重启服务、不执行清除类操作;确需变更由被测单位运维方在授权下实施。
  • 每个控制点小节按「对应控制点 → 判定要点 → 取证要求 → 核查命令 → 备注 → 预期证据」编排;命令回显本身即证据,须连同命令行一起截图。
  • 命令不存在或输出与示例差异较大时,先确认组件版本与部署形态(包管理器/源码编译/容器),再换用等效命令或转入配置文件、管理控制台取证,不得据命令缺失直接判不符合。
  • 示例输出中的地址、账户、路径均为演示值,现场须替换为真实取证结果并对涉及个人信息与内网管理地址的内容脱敏后再入报告。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点。
  • 判定依据采用 GB/T 28448-2019 的对象边界原则;EMQX 既可能只是协议接入层,也可能直接承载用户设备身份和消息内容,需按现场实际角色判定。

基础信息

对应控制点:非独立控制点(测评对象与资产确认);部署形态与冗余情况佐证 8.1.2.1 网络架构 e) 关键设备硬件冗余

判定要点:版本、部署路径、运行账户、监听端口、集群角色五项均可取证且与实际架构一致 → 符合;版本或路径无法确认、依赖口头说明 → 部分符合。

取证要求:版本命令回显截图、配置路径截图、进程与运行账户截图、端口监听截图;集群部署补节点清单与角色截图。

核查命令:

emqx version 2>/dev/null
ps -ef | grep emqx
find . -name emqx.conf -o -name cluster.hocon -o -name emqx_dashboard.conf
  • 备注:先识别版本、部署模式、节点角色、Dashboard 地址、监听端口、配置目录和日志目录。
  • 预期证据:版本截图、进程截图、配置目录截图、端口截图。
示例输出(节选)
emqx version
EMQ X Enterprise 5.4.1
ps -ef | grep emqx(节选)
emqx 12101 beam.smp -emqx etc /opt/emqx/etc
find .
etc/emqx.conf  etc/cluster.hocon  data/configs/cluster.hocon

身份鉴别

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)~d)

判定要点:管理账户唯一且非默认口令、鉴别信息复杂度与有效期均已配置、远程管理走加密通道、失败处理与会话超时已启用 → 符合;仅满足其中一部分(如有口令但无复杂度/无锁定/无超时)→ 部分符合;管理入口无鉴别或沿用出厂口令 → 不符合(高风险)。

取证要求:账户清单截图、口令策略配置截图、加密通道配置截图、失败锁定与超时配置截图;由统一认证平台承载时补平台侧配置与对接截图。

A. Dashboard 登录鉴别

核查命令:

grep -R "dashboard" etc data/config 2>/dev/null
  • 备注:重点核查 Dashboard 是否开启、是否要求密码、是否通过 HTTPS、是否限制来源。
  • 预期证据:Dashboard 登录截图、配置截图。
示例输出(节选)
grep dashboard etc
etc/emqx.conf: dashboard.listeners.http.bind = "192.168.10.101:18083"
(Dashboard 仅内网绑定,经堡垒机映射访问)

B. 客户端认证方式

核查命令:

find etc -type f | grep -E "emqx_auth|acl|authorization"
grep -R "authn\\|authz" etc data/config 2>/dev/null
  • 备注:现场应区分用户名密码、ClientID、HTTP、MySQL、JWT、TLS 证书等认证方式。
  • 预期证据:认证插件配置截图、账号台账、访谈记录。
示例输出(节选)
find etc | grep acl|authorization
etc/acl.conf
grep authn etc/data/configs/cluster.hocon
authentication = [ { mechanism = password_based, backend = mysql, ... } ]
(接入 MySQL 认证器,ACL 文件启用)

C. 口令与失败控制

核查命令:

grep -R "password\\|deny\\|rate_limit" etc data/config 2>/dev/null
  • 备注:客户端锁定能力通常依赖认证后端、限速和安全设备,需按实际实现判断。
  • 【不适用】若 EMQX 未提供面向人工运维的本地登录界面,仅处理设备连接认证,则“人工用户登录失败锁定/会话超时”对 Broker 本体可判定为不适用;应转而核查设备认证、Dashboard 鉴别和访问限制。依据:GB/T 28448-2019 身份鉴别控制点按实际鉴别主体和场景适用。
  • 预期证据:限流配置截图、认证平台截图、制度。
示例输出(节选)
grep password/deny/rate_limit etc
data/configs/cluster.hocon: max_conn_rate = 50
etc/acl.conf: { deny, all, subscribe, ["$SYS/#"] }
(默认拒绝 $SYS 订阅,连接速率限制开启)

D. 会话与远程管理

核查命令:

grep -R "idle_timeout\\|session_expiry_interval" etc data/config 2>/dev/null
  • 备注:管理面与 MQTT 客户端会话需要分别核查。
  • 预期证据:会话参数截图、平台材料。
示例输出(节选)
grep idle_timeout/session_expiry_interval etc
data/configs/cluster.hocon:
mqtt.idle_timeout = 15m
mqtt.session_expiry_interval = 30m
(会话过期 30 分钟,空闲连接 15 分钟回收)

访问控制

对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~f)

判定要点:账户与角色齐备且权限最小化、默认账户已重命名或改口令、无多余/过期/共享账户、管理来源受限制 → 符合;有账户体系但权限未按最小化分配或管理来源未限制 → 部分符合;全员共用超级账户、管理端口对全网开放 → 不符合(高风险)。

取证要求:账户与角色对应表、授权策略截图、管理来源限制(ACL/绑定地址/防火墙策略)截图、多余账户处置记录。

A. ACL 与授权

核查命令:

find etc -type f | grep -E "acl|authorization"
grep -R "publish\\|subscribe\\|allow\\|deny" etc data/config 2>/dev/null
  • 备注:应核查客户端对主题的发布/订阅权限是否最小化。
  • 预期证据:ACL 截图、授权说明。
示例输出(节选)
find etc | grep acl
etc/acl.conf
grep publish/subscribe/allow etc
etc/acl.conf:
{ allow, {user, "demo-device"}, publish, ["demo/#"] }
{ allow, {user, "demo-platform"}, subscribe, ["demo/#"] }
{ deny, all }

B. Dashboard 与 API 限制

核查命令:

grep -R "listeners\\|dashboard.listeners" etc data/config 2>/dev/null
  • 备注:Dashboard、REST API 和管理端口应限制来源网络。
  • 预期证据:监听配置截图、网络 ACL 材料。
示例输出(节选)
grep listeners etc
listeners.tcp.default.bind = "0.0.0.0:1883"
listeners.ssl.default.bind = "0.0.0.0:8883"
dashboard.listeners.http.bind = "192.168.10.101:18083"
(生产流量走 8883 TLS;1883 仅限 VPC 内网白名单使用)

C. 默认账户与未使用插件

核查命令:

emqx ctl plugins list 2>/dev/null
  • 备注:未使用认证插件、测试插件和默认账户应清理或停用。
  • 预期证据:插件清单截图、处置说明。
示例输出(节选)
emqx ctl plugins list
Plugin                    Status
emqx_authn_mnesia         stopped
emqx_management           running
emqx_retainer             running
(无第三方未审核插件运行)

D. 文件与运行权限

核查命令:

ps -o user,pid,cmd -C beam.smp
find etc -maxdepth 1 -type f -exec ls -l {} \\
  • 备注:配置目录、日志目录和数据目录权限应最小化。
  • 预期证据:运行用户截图、权限截图。
示例输出(节选)
USER PID COMMAND
emqx 12101 beam.smp
-rw-r----- emqx emqx etc/emqx.conf
-rw------- emqx emqx data/certs/client.pem
(配置与证书权限合规,以非特权用户运行)

安全审计

对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)~d)

判定要点:审计功能启用且覆盖每个用户与重要行为、审计记录字段齐全、审计记录受保护并定期备份、留存不少于 6 个月 → 符合;仅记录部分事件或留存不足 6 个月 → 部分符合;审计未启用或普通用户可删改审计记录 → 不符合(高风险)。

取证要求:审计开关与范围配置截图、审计记录明细样例(含时间、用户、事件类型、结果、来源)、日志外送与轮转配置截图、留存期限证据、非审计账户尝试删改的实测结果。

A. 日志配置

核查命令:

grep -R "log\\." etc data/config 2>/dev/null
find log -type f 2>/dev/null
  • 备注:应关注 Broker 日志、认证日志、Dashboard 日志和规则引擎日志。
  • 预期证据:日志配置截图、日志目录截图。
示例输出(节选)
grep log etc/data/configs/cluster.hocon
log.file.level = info
log.console.level = warning
find log -type f
log/emqx.log  log/emqx.log.1  log/erlang.log.1

B. 客户端接入与管理操作日志

核查命令:

grep -R "audit\\|trace" etc data/config 2>/dev/null
  • 备注:现场需证明客户端认证、拒绝连接、管理操作和异常事件可追溯。
  • 预期证据:日志样例、平台截图。
示例输出(节选)
grep audit/trace etc
data/configs/cluster.hocon: trace 按需临时开启
log/emqx.log 中记录 dashboard 登录成功/失败事件
(管理操作审计依赖 Dashboard 日志+平台侧审计)

C. 留存与轮转

核查命令:

grep -R "rotation\\|size" etc data/config 2>/dev/null
  • 备注:需核实日志轮转、保留周期和集中化策略。
  • 预期证据:轮转截图、制度、访谈记录。
示例输出(节选)
grep rotation/size etc
data/configs/cluster.hocon:
log.rotation.count = 10
log.rotation.max_size = 50MB
(按大小轮转保留 10 个文件)

D. 平台联动

核查命令:

journalctl | grep emqx | tail -n 50
  • 备注:EMQX 现场通常还需结合日志平台和监控平台判断。
  • 预期证据:平台截图、告警截图。
示例输出(节选)
journalctl | grep emqx(节选)
Aug 24 08:59:20 host systemd[1]: Started emqx.service.
Aug 24 09:00:01 host emqx[12101]: EMQ X 5.4.1 is running now!
Aug 24 10:12:44 host emqx[12101]: authentication failure for client_id 'test-01'

数据完整性

对应控制点:GB/T 22239-2019 8.1.4.7 数据完整性 a)b)

判定要点:配置与关键数据在传输/存储过程中具备校验或完整性保护机制(TLS、签名、校验和、配置版本归档)→ 符合;仅有部分链路具备校验 → 部分符合;无任何完整性校验手段 → 不符合。

取证要求:传输加密配置截图、校验/签名机制说明、配置变更与归档记录、完整性检测工具输出。

A. 集群与消息完整性

核查命令:

emqx ctl cluster status 2>/dev/null
  • 备注:关注节点状态、消息路由、桥接和规则引擎的正确性。
  • 预期证据:集群状态截图、架构说明。
示例输出(节选)
emqx ctl cluster status
running_nodes: ['emqx@192.168.10.101','emqx@192.168.10.102']
stopped_nodes: []
(两节点集群正常,节点故障可自动接管会话)

B. 传输完整性

核查命令:

grep -R "listeners.ssl\\|mqtt.ssl\\|wss" etc data/config 2>/dev/null
  • 备注:MQTT/TCP、MQTT over SSL、WebSocket over TLS 应按实际协议取证。
  • 预期证据:TLS 配置截图、证书材料。
示例输出(节选)
grep listeners.ssl etc
listeners.ssl.default.bind = "0.0.0.0:8883"
listeners.wss.default.bind = "0.0.0.0:8084"
(MQTT 与 WebSocket Secure 均启用 TLS)

数据保密性

对应控制点:GB/T 22239-2019 8.1.4.8 数据保密性 a)b)

判定要点:鉴别信息与敏感业务数据在传输和存储时均加密(TLS 1.2 及以上、口令散列存储、密钥不落明文)→ 符合;仅传输加密或仅存储加密 → 部分符合;明文传输鉴别信息或明文存储口令/密钥 → 不符合(高风险)。

取证要求:TLS 配置与证书信息截图、协议与加密套件清单、口令/密钥存储形态截图、抓包验证结果;使用国密算法时注明算法与模块。

A. TLS 与证书保护

核查命令:

grep -R "certfile\\|keyfile\\|cacertfile" etc data/config 2>/dev/null
  • 备注:管理面和敏感消息链路应优先启用 TLS。
  • 预期证据:证书截图、HTTPS/WSS 截图。
示例输出(节选)
grep certfile/keyfile etc/data/configs/cluster.hocon
ssl_options.keyfile = /opt/emqx/etc/certs/server.key
ssl_options.certfile = /opt/emqx/etc/certs/server.pem
ssl_options.cacertfile = /opt/emqx/etc/certs/ca.pem
verify = verify_peer

B. 敏感配置保护

核查命令:

grep -R "password\\|secret\\|token" etc data/config 2>/dev/null
  • 备注:认证后端口令、规则引擎凭据、桥接凭据应重点核查。
  • 预期证据:脱敏截图、权限截图、密钥管理说明。
示例输出(节选)
grep password etc/data/configs/cluster.hocon(节选)
authentication.mysql.password = ***
dashboard.default_password = ***(首次登录已修改)
(口令掩码展示,未见明文)

备份恢复

对应控制点:GB/T 22239-2019 8.1.4.9 数据备份恢复 a)c)

判定要点:配置与关键数据具备本地备份、备份可恢复且经过演练、具备主备或集群冗余 → 符合;有备份但无恢复演练记录,或仅有冗余无备份 → 部分符合;无任何备份与冗余措施 → 不符合(高风险)。

取证要求:备份策略与备份文件清单截图、恢复演练记录、集群/主备状态截图、备份介质与异地存放说明。

A. 配置备份

核查命令:

find etc data/config -type f 2>/dev/null
  • 备注:应覆盖 emqx.conf、Dashboard、认证插件、规则引擎和集群配置。
  • 预期证据:备份目录截图、备份策略。
示例输出(节选)
find etc data/configs -type f
etc/emqx.conf  etc/acl.conf  etc/base.hocon
data/configs/cluster.hocon
etc/certs/server.pem  etc/certs/server.key

B. 日志与数据备份

核查命令:

find log data -type f 2>/dev/null | head
  • 备注:如使用持久化会话、规则引擎或外部存储,应同步说明备份范围。
  • 预期证据:目录截图、平台材料、访谈记录。
示例输出(节选)
find log data | head
log/emqx.log  log/emqx.log.1
data/mnesia/emqx@192.168.10.101/
data/certs/
(数据目录纳入每日备份)

C. 恢复能力

核查命令:

emqx ctl status 2>/dev/null
  • 备注:可通过节点重建、配置恢复、集群重连或编排重启证明恢复能力。
  • 预期证据:恢复手册、演练记录、工单。
示例输出(节选)
emqx ctl status
Node 'emqx@192.168.10.101' 5.4.1 is started
(服务运行正常,配置可由备份恢复)

剩余信息保护

对应控制点:GB/T 22239-2019 8.1.4.10 剩余信息保护 a)b)

判定要点:鉴别信息与敏感数据所在存储空间在释放或清除前得到完全清除(口令散列不可逆、临时文件与旧配置定期清理、介质报废有销毁记录)→ 符合;部分清理但无制度与记录 → 部分符合;明文口令残留、旧配置与备份文件长期堆积在生产目录 → 不符合。

取证要求:清理策略与计划任务截图、残留排查命令输出、介质销毁与设备报废记录、制度文件。

A. 历史配置与停用插件

核查命令:

find . -type f | grep -E "bak|old|backup"
  • 备注:旧配置、停用插件、历史证书和测试配置应及时清理。
  • 预期证据:目录截图、清理说明。
示例输出(节选)
find . | grep bak|old|backup
backup-emqx-20260823.tar.gz
etc/emqx.conf.bak
(旧配置移出生产目录计划中)

B. 凭据残留

核查命令:

grep -R "password\\|secret\\|token" . 2>/dev/null
  • 备注:日志、配置和脚本中残留敏感信息应重点处理。
  • 预期证据:脱敏截图、整改记录。
示例输出(节选)
grep password/token .(节选)
data/configs/cluster.hocon: authentication.mysql.password = ***
log/emqx.log: authentication failure(无敏感明文)

个人信息保护

对应控制点:GB/T 22239-2019 8.1.4.11 个人信息保护 a)b)

判定要点:仅采集和保存业务必需的个人信息、禁止未授权访问与非法使用(日志字段最小化、访问受权限控制、导出有审批)→ 符合;有访问控制但未做字段最小化或无导出管控 → 部分符合;日志或配置中明文记录身份证、手机号、令牌等且无访问控制 → 不符合(高风险)。

取证要求:日志格式与字段清单截图、样例日志(脱敏后)、个人信息访问权限配置、导出审批记录;不涉及个人信息时留存数据流说明作为不适用依据。

A. MQTT 主题与日志中的个人信息

核查命令:

grep -R "topic" etc data/config 2>/dev/null
  • 备注:现场不建议直接抽取敏感消息内容,可通过主题命名、规则引擎、业务说明判断是否承载个人信息。
  • 【不适用】若 EMQX 承载的仅为设备状态、遥测、非个人信息消息,且经业务确认不涉及个人身份数据,则该点可判定为不适用。依据:GB/T 28448-2019 个人信息保护控制点应以实际处理个人信息为适用前提。
  • 预期证据:主题配置截图、业务访谈记录。
示例输出(节选)
grep topic etc(节选)
etc/acl.conf: ["demo/#"] "$SYS/#"
(主题命名不含个人信息字段)

B. 导出与共享控制

核查命令:

find . -type f | grep -i "export\\|rule"
  • 备注:规则引擎、桥接和外部存储转发可能造成个人信息扩散,应核查授权和脱敏控制。
  • 【不适用】若未启用规则引擎导出、桥接外发、Dashboard 数据导出等能力,且消息不含个人信息,则“个人信息导出与共享控制”对 EMQX 可判定为不适用。依据:GB/T 28448-2019 按对象实际输出与共享能力判定。
  • 预期证据:规则配置截图、制度、访谈记录。
示例输出(节选)
find . | grep export|rule
scripts/export-acl.sh
data/rules/demo-rule.json(规则引擎规则导出)
(规则导出文件权限 600 并纳入变更管理)

入侵防范

对应控制点:GB/T 22239-2019 8.1.4.4 入侵防范 a)~h)、8.1.4.5 恶意代码防范

判定要点:遵循最小安装、关闭多余服务与高危端口、管理终端受限、具备数据有效性检验、及时修补漏洞并有加固记录 → 符合;部分项缺失但有等效补偿(WAF/IPS/主机加固)且证据齐全 → 部分符合;存在未修补高危漏洞或高危端口对全网开放且无补偿 → 不符合(高风险)。

取证要求:组件与服务清单、端口扫描结果、管理终端限制配置、漏洞扫描与修补记录、基线加固对照表、攻击告警或阻断记录。

A. Dashboard 与 MQTT 端口暴露

核查命令:

grep -R "listeners\\|dashboard" etc data/config 2>/dev/null
  • 备注:重点核查 Dashboard、API、MQTT/TCP、WS/WSS 等端口是否对无关网络暴露。
  • 预期证据:监听配置截图、端口截图、网络 ACL 材料。
示例输出(节选)
grep listeners/dashboard etc(见上)
listeners.tcp/ssl/dashboard 配置齐备
(管理端口仅内网,业务端口经 LB 接入)

B. 默认账户与危险插件

核查命令:

emqx ctl plugins list 2>/dev/null
grep -R "allow_anonymous\\|dashboard.default" etc data/config 2>/dev/null
  • 备注:关注匿名接入、默认账号、测试插件和高危桥接配置。
  • 预期证据:插件截图、配置截图、处置说明。
示例输出(节选)
emqx ctl plugins list
emqx_management running
grep allow_anonymous etc
data/configs/cluster.hocon: 未出现 allow_anonymous=true
(匿名接入禁用,认证强制生效)

C. 版本与漏洞风险

核查命令:

emqx version 2>/dev/null
  • 备注:需确认版本、插件版本和高危漏洞整改情况。
  • 预期证据:版本截图、补丁或整改记录。
示例输出(节选)
emqx version
EMQ X Enterprise 5.4.1
(版本较新,CVE 修复情况见补丁台账)

D. 防护与告警联动

核查命令:

journalctl | grep emqx | tail -n 50
  • 备注:EMQX 入侵防范通常依赖安全网关、日志平台、主机防护和规则告警联动。
  • 预期证据:平台截图、告警记录、安全设备材料。
示例输出(节选)
tail log/emqx.log(节选)
2026-08-24T10:12:44+08:00 [warning] clientid: test-01, msg: authentication_failure, peer: 192.168.8.66
2026-08-24T10:12:45+08:00 [info] connection closed by peer
(认证失败记录完整并联动安全平台封禁告警)

参考依据

关联文章