监控系统上线前安全加固指南
Prometheus、Grafana以及各类Exporter组件能够帮助运维人员实时监控服务器状态、分析系统性能,但同时也会暴露部分服务器、应用及容器运行信息。
在测试环境中,为方便调试和截图展示,部分服务可能会临时开放端口;但在正式生产环境上线前,必须对监控系统进行安全加固,限制访问范围,避免因监控接口暴露导致服务器信息泄露或安全风险。
本文整理Prometheus、Grafana及相关Exporter组件上线前的安全检查项,帮助确保监控系统安全稳定运行。
一、加固目标
监控系统涉及多个服务组件,包括:
- Prometheus
- Grafana
- Node Exporter
- Blackbox Exporter
- Nginx Exporter
- cAdvisor
- MySQL Exporter
- Alertmanager
这些组件默认会开放HTTP访问接口,其中部分页面会直接展示服务器资源、服务状态、容器信息等敏感数据。
例如 Prometheus Targets 页面会展示当前监控目标及内部服务信息:
Prometheus Targets
image
因此,生产环境中不建议直接将Prometheus及Exporter服务暴露到公网。
上线前需要重点检查:
- 服务监听地址是否合理;
- 公网访问权限是否限制;
- 登录认证是否完善;
- 敏感信息是否可能泄露;
- 配置文件及Dashboard是否完成备份。
二、当前涉及端口
当前监控系统涉及端口如下:
| 服务 | 端口 |
|---|---|
| Grafana | 3000 |
| Prometheus | 9090 |
| Node Exporter | 9100 |
| Blackbox Exporter | 9115 |
| Nginx Exporter | 9113 |
| cAdvisor | 18081 |
| MySQL Exporter | 9104 |
| Alertmanager | 9093 |
其中:
- Grafana主要用于数据展示;
- Prometheus负责指标采集与存储;
- Exporter负责采集服务器、应用及数据库指标。
生产环境建议根据实际需求开放访问权限,不要默认开放所有端口。
三、Grafana安全加固
Grafana登录页面:
Grafana 登录页
image
上线前需要检查:
- 默认管理员密码是否修改;
- 是否关闭匿名访问;
- 是否限制公网访问来源;
- 是否配置HTTPS;
- Dashboard是否完成备份。
建议配置:
- 使用高强度管理员密码;
- 限制登录来源IP;
- 通过Nginx反向代理访问;
- 配置HTTPS证书;
- 定期备份Dashboard JSON文件。
四、Prometheus安全加固
Prometheus默认情况下没有完善的身份认证机制,因此不建议直接暴露公网。
建议:
- 仅监听本机或内网地址;
- 通过SSH隧道进行临时访问;
- 或通过带认证机制的反向代理访问。
生产环境中建议:
公网用户
↓
Nginx反向代理(认证)
↓
Prometheus
避免直接访问:
公网 → Prometheus:9090
五、Exporter安全加固
Exporter的metrics接口会返回大量系统信息,例如:
- CPU使用率;
- 内存状态;
- 磁盘信息;
- 网络状态;
- 数据库运行状态;
- 容器信息。
以下端口不建议直接暴露公网:
| Exporter | 端口 |
|---|---|
| Node Exporter | 9100 |
| Nginx Exporter | 9113 |
| Blackbox Exporter | 9115 |
| MySQL Exporter | 9104 |
| cAdvisor | 18081 |
建议:
仅允许Prometheus服务器访问Exporter:
Prometheus服务器 → Exporter
禁止:
公网 → Exporter
六、Nginx状态页安全
Nginx stub_status状态页会暴露连接数、请求量等运行信息。
建议仅监听本机:
listen 127.0.0.1:8080;
allow 127.0.0.1;
deny all;
不要直接将Nginx状态页暴露到公网。
七、Docker安全
Docker daemon不要开放未认证TCP API。
避免:
tcp://0.0.0.0:2375
直接暴露Docker管理接口。
同时,cAdvisor拥有较高权限,可以读取:
- 容器运行状态;
- 容器资源使用情况;
- 部分宿主机信息。
建议:
- 限制cAdvisor访问来源;
- 不允许公网直接访问。
Docker Dashboard:
Docker Dashboard
image
八、MySQL安全
MySQL Exporter建议使用最小权限账号,避免使用root账号采集数据。
示例:
GRANT PROCESS, REPLICATION CLIENT, SELECT
ON *.*
TO 'prometheus'@'localhost';
本次配置使用socket认证方式,没有在文章中记录数据库密码。
MySQL Dashboard:
MySQL Dashboard
image
九、Alertmanager安全
Alertmanager后续接入通知渠道时,会涉及敏感信息,例如:
- Webhook地址;
- 机器人Token;
- 邮箱密码;
- 企业微信密钥;
- 钉钉密钥。
注意:
- 不要截图展示密钥;
- 不要将密钥写入公开文档;
- 配置文件设置最小权限;
- 定期更换Token。
十、上线前备份清单
正式上线前建议完成以下备份:
/etc/prometheus/prometheus.yml
/etc/prometheus/rules/
/etc/grafana/provisioning/datasources/
/etc/default/prometheus-*
Grafana Dashboard JSON
安装脚本及配置脚本
确保出现异常时可以快速恢复。