Elasticsearch 暴露风险是什么
Elasticsearch 默认提供 HTTP 接口(9200)用于查询与管理,早期版本默认不启用认证,且安装后倾向监听所有网卡。这样的组合在暴露到网络后意味着任何人都能读取索引数据、查看集群与节点信息,甚至通过接口删除索引。由于 ES 常被用于存放日志与业务检索数据,泄露内容可能包含账号、内部拓扑与业务明细。防护的关键是把「网络可达」与「认证与授权」两件事一起处理:绑定内网地址、启用安全功能并为每个业务建最小权限角色。
基本信息
| 默认端口 | 9200 HTTP,9300 节点间通信 |
|---|---|
| 默认认证状态 | 早期版本无认证;6.8/7.1 起安全功能在基础许可中提供 |
| 常见暴露原因 | network.host 设为 0.0.0.0、云安全组放行、容器端口映射 |
| 直接危害 | 索引数据读取与删除、集群信息泄露、资源被滥用 |
| 加固要点 | 绑定内网、启用安全功能、按业务建最小权限角色 |
| 配套控制 | 前置网关加认证与限来源、开启审计日志 |
典型暴露场景
- 多节点集群为节点发现方便,把 network.host 改为全网卡监听
- 云主机把 9200 加入安全组放行以便本地调试
- 容器部署时把端口映射到宿主机全网卡
- Kibana 与 ES 同机部署,前端暴露后直接可达后端接口
- 版本升级时未同步启用安全功能与账号体系
- 默认索引命名规则被外部掌握,攻击者可直接定位敏感索引
暴露核查(对本方资产)
暴露核查(对本方资产)
curl -s http://<目标IP>:9200/
# 返回 cluster_name 等 JSON 信息说明接口可达且未拦截
curl -s http://<目标IP>:9200/_cat/indices?v | head
# 若返回 401/403 说明已启用认证或前置网关拦截
# 核查仅限自有或已获书面授权的资产加固要点
加固要点
1. network.host 绑定内网地址
2. 启用安全功能(X-Pack Security 基础版可用)配置用户与角色
3. 禁止直接暴露公网:前置 Nginx 加认证且仅内网可达
4. 开启审计日志监控异常访问
5. 按业务拆分索引与角色权限,避免共用超级用户
6. 快照与备份存放到不可公开访问的位置风险点与加固动作
| 风险点 | 后果 | 加固动作 |
|---|---|---|
| 网络可达 | 任意客户端读取索引 | 绑定内网并收敛安全组 |
| 无认证 | 无需凭据即可查询与删除 | 启用安全功能与账号体系 |
| 角色过宽 | 一处凭据泄露即可读全量数据 | 按索引与操作拆分角色 |
| 无审计 | 访问行为无法追溯 | 开启审计并集中收集 |
| 备份暴露 | 快照文件泄露全量数据 | 备份位置加固并限制访问 |
ES 的安全功能自 6.8/7.1 起在基础许可中免费提供;启用后为各业务创建最小权限角色。
收敛前先确认业务调用方:应用、Kibana、日志采集与监控都可能依赖该接口,直接关闭监听会导致数据链路中断。