简介
prometheus监控系统的时候,是使用pull的方式来获取监控数据,需要被监控端监听对应的端口,prometheus从这些端口服务中拉取对应的数据。

node_exporter安全性讨论
node_exporter是收集操作系统的指标的一个程序。例如CPU,内存,磁盘和网络等信息。
之前版本的node_exporter没有提供验证的功能,直接访问就可以获取到对应的监控指标。
这样子存在一定的安全风险,虽然内网隔离相对安全。
可以通过主机的防火墙来限制端口访问,但是这样子,如果服务端迁移之后,就需要一台台去修改对应的策略,不方便批量自动化部署。
如果node_exporter能加上验证和传输加密,只要监听端口对内网网段开放,我们就可以随意迁移我们的Prometheus服务了。

给node_exporter添加Basic Auth
为node_exporter加上基础的密码验证,提升一定的安全性。
生成密码
可以使用htpasswd这个命令生成对应的密码串
htpasswd  -nBC 12  opcaiNew 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.crtnode_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,减少监控系统的安全风险。
安全无小事,大家需重视。
