Consul 暴露检查是什么
Consul 是服务发现与配置中心,HTTP API(默认 8500)、DNS 接口与 Web UI 往往同时监听。若 ACL 未启用或策略过宽,未授权者可以直接读取服务目录、健康状态甚至注册信息,等于拿到一份内网拓扑。检查方式是只读探测:确认接口可达性与 ACL 生效情况,不修改任何配置。
基本信息
| 核查对象 | HTTP API 可达性、ACL 启用情况、Web UI 暴露面 |
|---|---|
| 常见端口 | 8500 HTTP / 8501 HTTPS / 8600 DNS |
| 风险信号 | 匿名即可读取服务目录或集群信息 |
| 修复方向 | 启用 ACL、收敛监听地址、限制 UI 访问 |
| 处置纪律 | 只读检查,不注册或修改任何服务 |
典型使用场景
- 内网评估:确认配置中心是否对非授权来源开放
- 微服务架构梳理:服务目录泄露时的暴露面评估
- 上线前检查:新环境是否沿用默认监听 0.0.0.0
- 修复验证:ACL 启用后复测匿名请求是否被拒
- 旁路核查:确认 DNS 接口与 UI 的暴露面是否被一并收敛
只读检查示例
只读检查示例
curl -s --max-time 3 http://10.0.30.7:8500/v1/status/leader # 集群主节点
curl -s --max-time 3 http://10.0.30.7:8500/v1/catalog/services | head # 服务目录
curl -s --max-time 3 http://10.0.30.7:8500/v1/agent/self | head # 节点信息
curl -s --max-time 3 http://10.0.30.7:8500/ui/ -o /dev/null -w "%{http_code}\n" # UI
dig @10.0.30.7 -p 8600 consul.service.consul SRV +short # DNS 接口
# 记录可读性结论即可,不修改任何配置、不注册服务接口与暴露含义
| 接口 | 典型路径 | 泄露内容 |
|---|---|---|
| 集群状态 | /v1/status/leader | 主节点地址与集群规模 |
| 服务目录 | /v1/catalog/services | 全部服务名与节点清单 |
| 节点信息 | /v1/agent/self | 配置摘要与版本信息 |
| Web UI | /ui/ | 可视化拓扑,读取更直观 |
| DNS 接口 | 8600 端口查询 | 服务名与地址解析 |
服务目录泄露可辅助攻击面梳理:定级按信息价值与可达范围判断——仅暴露服务名通常为中危,可读取节点地址与配置摘要时整体风险更高。
任何写操作都不要做:注册测试服务、修改 KV 配置都会改变集群状态,可能触发服务上下线;检查以读取接口返回为终点。
若客户启用了 ACL,匿名请求应返回权限不足;此时记录请求被拒的具体响应,作为加固生效的证据,而不必再尝试其他接口路径。