普罗米修斯 - 如何保护“node_exporter”

问题描述 投票:0回答:2

我刚刚使用 Ansible 通过 Prometheus、Grafana 和 Node Exporter 来监控我的服务器。我有一台监控服务器(Prometheus)和一台网络服务器(Node Exporter)。

我按照教程进行了设置。问题是它不提供任何有关安全的信息。目前任何人都可以监听我的网络服务器的

node_exporter
端口。

我考虑过

iptable
来保护我的网络服务器免受
node_exporter
端口上的外部调用。然后我将只授予对我的 Promotheus 服务器的访问权限。

有办法吗?

ansible prometheus prometheus-node-exporter
2个回答
0
投票

可能主要有三种选择

  1. 本地或外部防火墙,如您的问题中已经提到的
  2. 在 Prometheus 服务器上设置加密代理 (
    sshified
    ),该代理将通过 SSH 加密到
    node_exporter
    节点的传出会话
  3. 在 Prometheus 节点上设置加密代理 (
    stunnel
    ),这样您只能进行加密会话,请参阅Prometheus 及其导出器的身份验证和加密

选项 3 可以轻松添加到 Running

node_exporter
with Ansible 的解决方案中。

选项 2 也非常简单,可以通过 Ansible 轻松完成。

选项 1 可以通过可用于(本地)防火墙配置的 Ansible 模块来完成,例如

firewalld

可能还有更多可能的解决方案,例如ghostunnel,...


0
投票

在学习了多个教程 [1] 后,这对我有用。

在prometheus节点中

创建将在所有node_exporter节点中分发的自签名证书:

sudo openssl req -x509 -newkey rsa:1024 -keyout node.key -out node.crt -days 29220 -nodes -subj /commonName=node_exporter/ -addext "subjectAltName=DNS:node_exporter"
mv node.* /etc/prometheus/ssl/
sudo chown -R prometheus.prometheus /etc/prometheus/ssl
sudo chmod -R o-rwx /etc/prometheus/ssl

我不确定

commonName
DNS
值是否重要。当时我没有使用它们。

将证书文件发送到您的node_exporter节点:

scp /etc/prometheus/ssl/node.* [email protected]:/tmp

在node_exporter节点中

mv /tmp/node.* /etc/node_expoter/ssl # create the folder if it doesn't exist
sudo chown -R prometheus.prometheus /etc/node_expoter/ssl
sudo chmod -R o-rwx /etc/node_expoter/ssl
# /etc/node_exporter/config.yml
basic_auth_users:
    admin: $2a$10$...
tls_server_config:
  cert_file: /etc/node_exporter/ssl/node.crt
  key_file: /etc/node_exporter/ssl/node.key

其中

$2a$10$...
是您的用户密码的哈希版本

配置node_exporter服务来加载

config.yml

# /etc/systemd/system/node_exporter.service 
[Unit]
Description=Prometheus Node Exporter
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/node_exporter --web.config.file="/etc/node_exporter/config.yml"

SyslogIdentifier=prometheus_node_exporter
Restart=always

[Install]
WantedBy=multi-user.target

重启服务:

systemctl daemon-reload
systemctl restart node_exporter
systemctl status node_exporter

回到你的普罗米修斯节点

# /etc/prometheus/prometheus.yml
#[...rest of the config]

  - job_name: "node.domain.com"
    static_configs:
      - targets: ["node.domain.com:9100"]
    scheme: https
    tls_config:
      ca_file: /etc/prometheus/ssl/node.crt # the same that in your node_exporter node
      insecure_skip_verify: true
    basic_auth:
      username: "admin"
      password: "PASSWORD" # the password in clear, you can export this to a file

重启prometheus服务:

systemctl daemon-reload
systemctl restart prometheus
systemctl status prometheus

[1] https://nsrc.org/workshops/2021/sanog37/nmm/netmgmt/en/prometheus/ex-security.htm

[1] https://itsmegaffoor.medium.com/authentication-cryption-in-prometheus-d13e6e6299ad

[1] https://www.dbi-services.com/blog/how-to-keep-your-prometheus-ecosystem-secure/

© www.soinside.com 2019 - 2024. All rights reserved.