简介
prometheus监控系统的时候,是使用pull的方式来获取监控数据,需要被监控端监听对应的端口,prometheus从这些端口服务中拉取对应的数据。
node_exporter安全性讨论
node_exporter是收集操作系统的指标的一个程序。例如CPU,内存,磁盘和网络等信息。
之前版本的node_exporter没有提供验证的功能,直接访问就可以获取到对应的监控指标。
这样子存在一定的安全风险,虽然内网隔离相对安全。
可以通过主机的防火墙来限制端口访问,但是这样子,如果服务端迁移之后,就需要一台台去修改对应的策略,不方便批量自动化部署。
如果node_exporter能加上验证和传输加密,只要监听端口对内网网段开放,我们就可以随意迁移我们的Prometheus服务了。
给node_exporter添加Basic Auth
为node_exporter加上基础的密码验证,提升一定的安全性。
生成密码
可以使用htpasswd这个命令生成对应的密码串
htpasswd -nBC 12 opcai
New password: Re-type new password: opcai:$2y$12$B2gIBNeB1XL1Q614RQkQS.N6yAeIZkqJk80QdmODrWNb7WuLUF/vG
配置node_exporter
node_exporter启动的时候需要指定配置文件可以使用--web.config这个参数指定配置文件
vim web_config.yml
添加上基础验证
basic_auth_users: opcai: $2y$12$B2gIBNeB1XL1Q614RQkQS.N6yAeIZkqJk80QdmODrWNb7WuLUF/vG
这里的opcai就是用户名,后面的值就是加密后的密码,用户名: 加密密码,注意冒号中间需要有一个空格。
启动服务
启动的时候指定配置文件的路径
./node_exporter --web.config=web_config.yml
然后访问默认端口9100的时候,浏览器就会提示验证,输入对应的用户名和密码就可以获取到指标数据。
配置prometheus自动验证node_exporter
在prometheus.yml加入job
- job_name: 'auth_node_exporter' basic_auth: username: opcai password: admin # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['192.168.10.9:9100']
重载prometheus服务会自动去获取数据了。
基础的验证只能是防君子不能防小人,只要抓包就可以获取对应的密码串了。
加强安全性,就需要加上tls
生成证书
直接使用openssl生成证书就可以使用了。
openssl req -x509 -newkey rsa:4096 -nodes -keyout prometheus.key -out prometheus.crt
node_exporter配置证书
同样的配置到web_config.yml文件里面即可
tls_server_config: cert_file: prometheus.crt key_file: prometheus.keybasic_auth_users: opcai: $2y$12$B2gIBNeB1XL1Q614RQkQS.N6yAeIZkqJk80QdmODrWNb7WuLUF/vG
重启node_exporter,然后需要使用https访问了
配置prometheus配置https
- job_name: 'auth_node_exporter' scheme: https tls_config: insecure_skip_verify: true basic_auth: username: opcai password: admin # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['192.168.100.2:9100']
由于证书不是合法的,要跳过证书的要验证insecure_skip_verify。
总结
简单的配置就可以让prometheus加上验证和tls,减少监控系统的安全风险。
安全无小事,大家需重视。