如何保护ELK和Filebeat的安全?

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

我有一台服务器 A,我按照说明安装了 ELK :

https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-ubuntu-18-04

可以从我的服务器的 IP 地址访问 ELK,并且我已经创建了 Let's Encrypt 证书来保护我在 Nginx 上的域。

server {
    listen 80;
    listen [::]:80;
    server_name monitoring.example.com;

    location / {
        return 301 https://monitoring.example.com$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name monitoring.example.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /var/www/monitoring-example-com/web/.htpasswd;

    ssl_certificate /etc/letsencrypt/live/monitoring.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/monitoring.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

我有一台要监控的服务器 B,并在其上安装了 Filebeat。

如何保证 ELK 和 Filebeat 之间的交换安全?

我需要创建 OpenSSL 证书还是使用 Let's Encrypt for Nginx 生成的证书?

ssl elasticsearch elastic-stack ubuntu-18.04 lets-encrypt
3个回答
1
投票

您在管道中使用logstash还是filebeat将数据直接输出到elasticsearch中?根据这一点,答案会略有变化。集群设置的其他方面也很重要。

我假设您将数据直接输出到elasticsearch中。

您所描述的将nginx放在elasticsearch前面并进行基本身份验证的方法对于使用一个节点集群设置开发/测试环境来说是可以的。我怀疑这就是您想要的,因为您只监视一台服务器。如果这就是您所需要的,您可以停止阅读。

但是,您永远不应该在生产中使用一个节点设置。 Elasticsearch 是分布式存储,在生产环境中应始终使用至少三个节点。

为什么这对于安全而言很重要?在多节点集群中,您必须保护 REST API(默认端口 9200)和传输层(节点间流量默认端口 9300-9400)上的通信。您可能还想确保只有受信任的节点连接到集群。 Nginx 对此还不够。一种解决方案是将节点间流量放入在集群节点之间设置的全网状 VPN 中。我建议使用 tinc 为此。第二种是使用多个可用安全插件之一设置 TLS。

最好是同时使用两者,因为您可能不仅需要加密,还需要用户管理、角色分离、审核日志记录等。

您可以使用多个插件。最明显的是设置 X-Pack Security。在这种情况下,请参阅X-Pack文档。那里描述了整个过程。

X-Pack 相当昂贵。幸运的是,有几个替代方案,其中最著名的是 searchguard。社区版缺少一些功能,例如 LDAP 或字段级安全性,但对于大多数常见用例来说应该足够了。文档并不总是直接的,所以我建议进行一些测试部署。

其他替代方案包括ReadonlyREST,它有企业版和免费版。或者最新的 Open Distro 此版本仅与 Elasticsearch 的 OSS 版本保持兼容性(它可能会破坏基本许可证功能)。

编辑:2019年11月18日 基本许可证下的 X-Pack 现在提供免费的基本安全功能。与 searchguard 社区几乎相同,此外您还可以从 Kibana GUI 管理角色和用户。我个人的观点是,现在 searchguard 社区已经过时了,因为 X-Pack 提供了更好的功能,并且您在集群中的依赖性减少了,这使得更新和管理变得更加容易。对于商业用例,searchguard 可能仍然是更明智的选择,特别是对于大型集群。


0
投票

查看以下页面,其中描述了如何配置 TLS 以保持 Filebeat -> Logstash -> Elasticsearch -> Kibana -> 您的 Web 浏览器中的所有数据私有:

弹性搜索

基本上在 Elasticsearch 上启用传输 SSL(在

elasticsearch.yml
中),如下所示:

# Enables security.
xpack.security.enabled: True
# Enables transport SSL.
xpack.security.transport.ssl.enabled: True
xpack.security.transport.ssl.keystore.path: "certs/elastic-certificates.p12"
xpack.security.transport.ssl.truststore.path: "certs/elastic-certificates.p12"
xpack.security.transport.ssl.verification_mode: certificate
# Enables SSL via HTTP.
xpack.security.http.ssl.client_authentication: optional
xpack.security.http.ssl.enabled: false
xpack.security.http.ssl.keystore.path: "certs/elastic-certificates.p12"
xpack.security.http.ssl.truststore.path: "certs/elastic-certificates.p12"

有关更多详细信息,请阅读:在 Elasticsearch 中加密通信

文件节拍

并在 Filebeat 主机上启用 TLS。示例

filebeat.yml

filebeat.prospectors:
- type: log
  paths:
    - logstash-tutorial-dataset
output.logstash:
  hosts: ["logstash.local:5044"]
  ssl.certificate_authorities:
    - certs/ca.crt

了解更多:

Logstash

然后您需要在Logstash中启用TLS(如果使用),例如

logstash.yml

node.name: logstash.local
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: 'CHANGEME'
xpack.monitoring.elasticsearch.url: https://node1.local:9200
xpack.monitoring.elasticsearch.ssl.ca: config/certs/ca.crt

了解更多:与 Logstash 进行安全通信


0
投票

这是我在elasticsearch.yml中的配置

xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.key: certs/node-1.key
xpack.security.http.ssl.certificate: certs/node-1.crt
xpack.security.http.ssl.certificate_authorities: certs/ca.crt
xpack.security.transport.ssl.key: certs/node-1.key
xpack.security.transport.ssl.certificate: certs/node-1.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
xpack.security.http.ssl.supported_protocols: TLSv1.2

这是我的 filebeat.yml

setup.kibana:
  host: "https://kibana:5601"
  ssl.certificate_authorities: ["/etc/filebeat/config/certs/ca.crt"]

--------- Elasticsearch Output ------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["elastic:9200"]

  # Protocol - either `http` (default) or `https`.
  protocol: "https"
  ssl.certificate_authorities: ["/etc/filebeat/config/certs/ca.crt"]
  ssl.certificate: "/etc/filebeat/config/certs/filebeat.crt"
  ssl.key: "/etc/filebeat/config/certs/filebeat.key"
  #api_key: "id:api_key"

是的,您需要使用OpenSSL并为filebeat创建证书。这是我用来为 filebeat 创建证书的命令:

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout filebeat.key -out filebeat.crt -CA ca.crt -CAkey ca.key

注意此命令需要OpenSSL 3.您可以在互联网上搜索更新它。

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