Consul 注册与配置中心测评(HashiCorp)
Categories:
4 分钟阅读
定位: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 实测为准):
| 端口 | 用途(官方默认) |
|---|---|
| 8300 | server RPC(TCP) |
| 8301 | serf LAN gossip(TCP+UDP) |
| 8302 | serf WAN gossip(TCP+UDP) |
| 8500 | HTTP API(TCP;ports.https 官方默认 -1 即禁用,8501 为 HTTPS 约定端口) |
| 8600 | DNS 接口(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(默认配置源码 default.go 的 acl 节未设置 enabled,即默认关闭),且启用后 acl.default_policy 官方默认仍为 allow(无匹配规则时放行)。ACL 未开启时 HTTP API(8500)可匿名读写全部目录、配置与服务注册。若现场实测 API 可匿名注册服务/写 KV,按《高风险判定指引》(2025版)判高风险或高风险倾向。
判定口径详见 联盟团标-网络安全等级保护测评高风险判定指引(2025版)(对应 2025 版判例 6.4.1.1、6.4.2.2)。
核查方法:
- 确认配置:
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 已加密(
encrypt32 字节 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 选项不收录。
关联文章
- 同类对照:Nacos 注册与配置中心测评、ZooKeeper 测评、Kafka 测评;
- 底座联动:Kubernetes 容器编排平台测评;
- 加固侧:30、注册中心与负载均衡加固、17、加固方案总指南;
- 高风险口径:22、高风险判定指引与加固对照表。