Consul 注册与配置中心测评(HashiCorp)

HashiCorp Consul 服务注册发现与 KV 配置中心三级等保现场测评取证命令单:按控制点组织 consul version/info/members、consul catalog services、consul kv get、consul acl token list、consul intention list、consul operator raft list-peers 等只读命令,覆盖 ACL 默认未开启与 default_policy=allow 风险、enable_script_checks 默认 false、HTTP API 8500 与 DNS 8600 暴露面、gossip 加密与 TLS verify_incoming/outgoing 默认 false、KV 明文敏感值与 token 脱敏,配置默认值逐条对照官方文档与 agent/config/default.go 源码核验,附判定要点、示例输出与不收录命令说明。

定位:HashiCorp Consul(服务注册发现 + KV 配置中心)三级等保现场测评取证命令单,按 GB/T 22239-2019 安全计算环境控制点分节组织核查命令、判定要点与取证要求。 适用范围:Consul 1.x 单机(dev)、生产三节点 server + client agent 集群两种主流部署形态;本文 CLI 用法与配置默认值于 2026-09 对照官方 Commands 文档、Agent configuration-file 文档及 agent/config/default.go 源码逐条核验(见参考依据节)。 配套文章:Nacos 注册与配置中心测评(同类注册中心互为对照)、Kafka 测评、Kubernetes 容器编排平台测评(Consul 常作为 K8s 之外的服务底座)、30、注册中心与负载均衡加固、22、高风险判定指引与加固对照表、17、网络设备、安全设备、服务器、数据库和应用系统的加固方案。

使用说明:

  • 本文所有命令均为只读取证命令,不注册/注销服务、不写 KV、不启停 agent、不 reload;确需变更由被测单位运维方在授权下实施。
  • 每个控制点小节按「对应控制点 → 判定要点 → 取证要求 → 核查命令 → 备注 → 预期证据」编排;命令回显本身即证据,须连同命令行一起截图。
  • Consul 的默认值"安全基线"问题突出(ACL 默认未开启、default_policy 默认 allow、TLS 默认不强制),核查时以实测行为为准(是否可匿名查询、是否可匿名写),不要仅凭配置文件判断。
  • 命令不存在或报 ACL 权限错误时,先确认 agent 版本与 ACL 启用状态,再换等效控制台/API 只读路径取证,不得据命令缺失直接判不符合。
  • 示例输出中的地址、token、节点名均为演示值,现场须替换为真实取证结果并对涉及个人信息、SecretID 与内网管理地址的内容脱敏后再入报告。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点。
  • 判定依据采用 GB/T 28448-2019"按测评对象实际功能、是否直接处理数据、是否具备该类安全机制判定"的原则;Consul 为注册发现/配置存储组件,终端业务用户的身份鉴别由后端应用承载。

一、基础信息与部署形态

对应控制点:非独立控制点(测评对象确定);集群冗余佐证 GB/T 22239-2019 8.1.1.1(关键节点冗余)

判定要点:版本与部署形态记录完整、server/client 角色清晰、生产集群 server 数 ≥3 且均为 voter、端口监听与台账一致 → 符合;部分缺失 → 部分符合。

取证要求:版本截图、成员列表、Raft 同伴表、端口监听实测、部署拓扑图。

A. 版本与运行状态

核查命令(只读):

consul version          # 版本(CLI 与 agent 内建版本)
consul info             # agent 调试信息:角色、Raft/serf 状态、HTTP/ACL 概况
  • 备注:consul info 回显中的 server/leader、raft 计数与 acl 段可佐证角色与 ACL 启用状态;consul version 见参考依据节官方 Commands 页。
  • 预期证据:版本回显、consul info 关键段截图。
示例输出(节选,演示值)
$ consul version
Consul v1.18.2
Revision 1234abc
Build Date 2024-05-01T00:00:00Z   # 示例,现场以实测为准

$ consul info(节选)
agent:
	check_monitors = 0
	node_name = demo-node-1
	server = true
	leader = false
build:
	revision = 1234abc
consul:
	acl = disabled          # ← 示例:ACL 未开启,联动"身份鉴别"节判定
	known_servers = 3
raft:
	state = Follower
	term = 12

B. 集群成员与角色

核查命令(只读):

consul members                          # LAN serf 成员列表(alive/failed/left)
consul members -detailed                # 含地址、标签、版本等明细
  • 备注:-detailed 与 -status=<regexp> 为官方 members 页列明的命令选项(-segment 为 Enterprise 专属,开源现场不使用);成员状态长期 failed/left 残留应联动清理建议。
  • 预期证据:成员列表回显、与部署台账比对记录。

C. Raft 一致性与多节点冗余

核查命令(只读):

consul operator raft list-peers         # Raft 同伴表:Node/ID/Address/State/Voter/CommitIndex
  • 备注:生产集群应 ≥3 个 voter 节点且 leader 正常(leader = true 仅一个);单 server 部署应在网络架构条款记录冗余风险。-stale 选项为官方 operator raft 页列明(容忍陈旧读),现场一般不带参数执行。
  • 预期证据:list-peers 回显、最近一次故障切换演练记录(向运维索取)。

D. 端口与协议面

核查方法:按官方默认值核对监听(最终以 ss -lnt/ss -lnu 实测为准):

端口用途(官方默认)
8300server RPC(TCP)
8301serf LAN gossip(TCP+UDP)
8302serf WAN gossip(TCP+UDP)
8500HTTP API(TCP;ports.https 官方默认 -1 即禁用,8501 为 HTTPS 约定端口)
8600DNS 接口(TCP+UDP)
  • 备注:官方默认配置源码 default.go 中 ports.grpc = -1(默认禁用,dev 模式 8502);HTTP/DNS 端口默认绑定 client_addr(官方默认 127.0.0.1,bind_addr 默认 0.0.0.0)——若运维将 client_addr 改为 0.0.0.0,则 API/DNS 暴露面扩大,须重点核查访问来源限制。
  • 预期证据:端口监听实测(ss -lnt | grep -E "8300|8301|8302|8500|8600")、ports 配置节截图。

二、身份鉴别(8.1.4.1)

对应控制点:GB/T 22239-2019 8.1.4.1 a)~c)(管理面与 API 面的唯一标识、鉴别、失败处理)

判定要点:ACL 已启用(acl.enabled = true)、默认策略已收敛为 deny 或策略表完整、管理 token 分人保管、UI 访问有来源限制与认证 → 符合;ACL 未开启或默认 allow 且 API 可匿名写 → 不符合(高风险)。

取证要求:agent 配置中 acl 节截图、token 清单(脱敏)、匿名访问实测记录、UI 认证方式说明。

核查方法:

  • 确认配置:acl { enabled = true, default_policy = "deny", policy/token 段 }(1.4.0 起支持 acl 节写法);
  • 实测:从测试机匿名请求 http://<server-ip>:8500/v1/catalog/services(只读查询)与 consul members(匿名 CLI)——可匿名枚举即记录;是否可匿名写(写操作不执行,以策略与访谈佐证);
  • 启用 ACL 后,管理 token(initial_management)是否分人保管、是否仍为 1.11 前的固定 master 旧键;
  • acl.enable_key_list_policy 官方默认 false(未开启时 key_list 权限语义受官方告警约束),若涉 KV 通配列举权限须在策略表中核对。

核查命令(只读,ACL 已启用时执行):

consul acl token list                   # 全部 token 清单(AccessorID/策略/有效期)
consul acl token list -format=json      # JSON 输出便于导出取证
  • 备注:-meta、-format={pretty|json} 为官方 acl token list 页列明选项;回显中的 SecretID 默认不展示,AccessorID 也建议脱敏后入报告。
  • 预期证据:acl 配置节截图、token 清单导出(脱敏)、匿名访问实测记录。

三、访问控制(8.1.4.2)

对应控制点:GB/T 22239-2019 8.1.4.2 a)~e)(账户与权限、服务/目录访问策略、来源限制)

判定要点:服务间访问意图(intentions)与配置条目(config entries)有清单且与业务需要一致、KV 敏感前缀访问受策略限制、API/DNS 端口来源受网络层限制 → 符合;无 intentions、KV 全员可读 → 部分符合/不符合(结合 ACL 状态)。

取证要求:intention 清单、config entry 清单、KV 目录树(脱敏)、来源限制策略截图。

核查命令(只读):

consul intention list                   # Connect 服务间访问意图(对应 GET /v1/connect/intentions)
consul config list                      # 全部 config entry;-kind=<kind> 可按类型过滤
consul catalog services                 # 服务目录清单
consul catalog nodes                    # 节点目录清单
consul catalog datacenters              # 数据中心清单
consul kv get <prefix> -keys            # 仅列出前缀下的键名(不取值,避免导出敏感值)
  • 备注:consul kv get 支持 -recurse(递归取值)与 -base64(输出编码)——取证时优先 -keys 仅列键名;确需取值核对的(如某敏感配置),值中口令/密钥字段须脱敏。consul config list 的 -kind/-filter 选项见官方 config list 页。
  • 预期证据:intention/config 清单导出、KV 键名树、服务目录清单。
示例输出(节选,演示值)
$ consul intention list
ID                                    Source  Destination  Action
2f2a-demo-1111                        web     db           allow
3c3b-demo-2222                        *       *            deny

$ consul kv get secrets/ -keys
secrets/demo-db-user
secrets/demo-db-pass          # ← 仅列键名;取证不导出值

四、安全审计(8.1.4.3)

对应控制点:GB/T 22239-2019 8.1.4.3 a)~d)(审计覆盖、日志保护、留存 ≥6 个月、集中外送)

判定要点:agent 日志集中外送(syslog/文件采集)、操作审计有据可查(谁何时写了 KV/注册了服务)、留存 ≥6 个月、时钟同步 → 符合;仅本地日志无外送 → 部分符合。

取证要求:日志外送配置截图、日志平台留存查询记录、consul monitor 抽样回显。

核查命令(只读):

consul monitor                          # 实时跟踪 agent 日志流(Ctrl+C 退出,仅观察)
  • 备注:consul monitor 为官方 Commands 页列明的日志跟踪命令(-log-level/-log-json 等选项可选),抽样片刻即止,不要长时间挂占会话。Consul 开源版的操作级审计(API 请求留痕)能力有限:以主机侧 auditd/journald 对 8500 端口访问的记录、反向代理访问日志与变更申请单补偿取证;audit 配置节为 Enterprise 功能,开源现场如文档标注 Enterprise 不判不适用。
  • 预期证据:日志外送链路截图、日志平台 6 个月留存查询、变更申请与操作记录比对。

五、入侵防范(8.1.4.4 与 8.1.4.5)

对应控制点:GB/T 22239-2019 8.1.4.4(最小安装、关闭多余服务、漏洞修补)+ 8.1.4.5(恶意代码防范边界)

判定要点:版本为官方在维护的版本线且无高危漏洞未修、enable_script_checks 未开启(或开启且有正当理由与管控)、多余端口已禁用、宿主机防恶意代码措施到位 → 符合。

取证要求:版本截图与官方版本对照、配置最小化截图、脚本检查使用情况说明。

A. 版本与漏洞管理

核查方法:consul version 记录版本,对照官方发布渠道确认该版本线是否仍在维护;索取该集群的漏洞修补记录(如 CVE 公告对应补丁升级)。

B. 脚本检查(远程命令执行面)

  • 官方默认 enable_script_checks = false(文档原文:控制脚本类健康检查是否启用,默认 false,需运维显式开启)。
  • 若现场开启:核查脚本来源是否受控、是否存在以健康检查为名的远程执行面;开启本身记录为风险项并联动 8.1.4.5 恶意代码防范说明(脚本内容静态审查,不执行)。

C. 端口与服务最小化

  • ports.https/ports.grpc 官方默认 -1(禁用)——若现场启用 HTTPS API 属合理配置,但应确认证书与来源限制;多余端口启用且无台账的记录为部分符合。
  • 8.1.4.5 恶意代码防范:Consul 自身无恶意代码防护机制,按宿主机统一防护口径判定(联动 服务器侧测评 命令单),本组件层标注说明即可。

六、数据完整性(8.1.4.7 与 8.1.1.2 a))

对应控制点:GB/T 22239-2019 8.1.4.7(校验技术与保密性覆盖传输)+ 8.1.1.2 a)(通信传输完整性)

判定要点:gossip 已加密(encrypt 32 字节 Base64 密钥)、内部 RPC TLS 已强制(verify_outgoing = true 等)→ 符合;默认未强制 TLS → 不符合(结合网络隔离说明,可判部分符合)。

取证要求:encrypt/tls 配置节截图(密钥脱敏)、节点间协议说明。

核查方法(配置取证为主,无读出命令):

  • gossip 加密:官方文档要求集群内所有节点共享同一 encrypt 密钥(32 字节 Base64,官方推荐 consul keygen 生成)——配置节截图即可,密钥值脱敏;
  • RPC TLS:官方 TLS 文档默认 verify_incoming/verify_outgoing 均为 false(不强制 TLS、不验证对方证书)——现场未显式置 true 即记录为默认不安全配置;核查 tls { defaults/internal_rpc { verify_incoming/verify_outgoing/verify_hostname } } 与 auto_encrypt 节。

七、数据保密性(8.1.4.8 与 8.1.1.2 b))

对应控制点:GB/T 22239-2019 8.1.4.8(传输/存储保密性)+ 8.1.1.2 b)(通信传输保密性)

判定要点:API/集群通信已加密、KV 中口令/密钥不以明文存放(或已迁专用密钥管理且访问受控)→ 符合;KV 明文存密 + API 明文 → 不符合。

取证要求:KV 抽样值核对记录(脱敏)、加密配置截图。

核查方法:

  • KV 敏感项:抽样核对口令/密钥类配置是否明文(consul kv get 取值时现场即时脱敏,不截图明文值);-base64 只是编码不是加密,不作为防护手段判定;
  • HTTPS API 是否启用(ports.https 默认 -1,默认态下 API 流量为 HTTP 明文);
  • 节点间 TLS 与 gossip 加密状态承接第六节取证结论。

八、备份与恢复(8.1.4.9)

对应控制点:GB/T 22239-2019 8.1.4.9 a)~c)(本地备份恢复、异地/云备份、重要数据冗余)

判定要点:KV 与目录数据有定期快照(consul snapshot 由运维在变更窗口导出,属写操作不在本文收录)、配置文件有备份、集群 ≥3 server 冗余、有恢复演练记录 → 符合。

取证要求:快照文件与周期说明、配置备份、恢复演练记录、Raft 冗余截图(复用第一节 C)。

  • 备注:快照导出、恢复导入均为写/变更操作,现场不执行;以运维提供的快照文件、备份系统记录与演练报告佐证。

九、剩余信息保护(8.1.4.10)

对应控制点:GB/T 22239-2019 8.1.4.10 a)~b)(鉴别信息与敏感数据释放/清除)

判定要点:注销/过期的 token 与下线节点的注册信息有清理流程、KV 中废弃敏感键已删除、日志导出件敏感字段已脱敏 → 符合。

取证要求:token 撤销记录(consul acl token list 对照过期项)、废弃 KV 键清理记录、日志脱敏样例。

  • 备注:注销与删除均为写操作,以记录佐证不现场执行;consul members 中长期 left/failed 残留节点联动清理建议。

十、个人信息保护(8.1.4.11)

对应控制点:GB/T 22239-2019 8.1.4.11 a)~b)(仅采集必要、禁止未授权访问与披露);《网络安全法》第 21 条

判定要点:服务/节点注册元数据(node-meta/meta=)不含个人信息或内部人员标识,token 与日志导出件不含未脱敏个人信息 → 符合。

取证要求:服务注册脚本抽查、catalog 清单脱敏样例。

  • 备注:consul catalog services/nodes 抽样核对元数据字段;日志导出件中的 IP、操作人标识须脱敏后入报告。

参考依据

类别来源
等级保护基本要求GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
等级保护测评要求GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
法律依据《网络安全法》第 21 条(网络日志留存不少于六个月):https://www.cac.gov.cn/2016-11/07/c_1119867116_2.htm
CLI 文档Consul Commands(members/info/version/validate/monitor、catalog services·nodes·datacenters、kv get、acl token list、intention list、config list、operator raft list-peers):https://developer.hashicorp.com/consul/commands/members 等(2026-09 逐页核验)
Agent 配置文档Consul Agent configuration-file(acl/general/tls/ui/encryption 各节,含 default_policy 默认 allow、enable_script_checks 默认 false、ports.https 默认 -1、verify_incoming/outgoing 默认 false、ui_config.enabled 默认 false):https://developer.hashicorp.com/consul/docs/reference/agent/configuration-file/acl 等(2026-09 逐页核验)
默认配置源码hashicorp/consul agent/config/default.go(ports 表:8300/8301/8302/8500/8600、https=-1、grpc=-1;acl 节未启用 ACL;client_addr="127.0.0.1"、bind_addr="0.0.0.0"):https://github.com/hashicorp/consul/blob/main/agent/config/default.go

未收录与说明:

  • consul services list:官方 Commands 索引下该子命令文档页未能访问核验(404),本文以已核验的 consul catalog services 承担服务清单取证,不收录未核验命令;
  • consul watch(变更时触发执行脚本)、consul exec/consul event(远程执行/事件广播)、consul join/leave/force-leave/reload/maint(变更类)、consul connect proxy(启动代理进程)、consul snapshot save(写文件)——均为变更或执行类,测评现场不使用;
  • consul debug(采集诊断包,可能携带敏感信息且影响面大)不收录;-segment 为 Enterprise 选项不收录。

关联文章