Elastic:为 Elasticsearch 启动 HTTPS 访问

在今天的文章中,我们来介绍如何使我们的 Elasticsearch 启动 https 服务。这个在很多的场合是非常有用的。特别是在 Elastic SIEM 的安全领域,我们需要把 Elasticsearch 的访问变为 https 的访问,这样使得我们的数据更加安全可靠。

为 Elasticsearch 启动 https访问

 

安装 Elastic Stack

首先,我们可以按照之前的文章 “Elastic:菜鸟上手指南” 安装 Elasticsearch 及 Kibana。等我们安装好 Elasticsearch 和 Kibana 后,我们可以分别在 localhost:9200 及 localhost:5601 看到我们想要的输出:

 

为 Elasticsearch 启动安全

我们可以按照我之前的文章 “Elasticsearch:设置Elastic账户安全” 为我们的 Elasticsearch 设置安全。我们可以不创建新的用户,只使用默认的 super 用户 elastic。

等我们设置好上面的设置后,在我们启动 Kibana 时它要求我们输入用户名及密码来进行登录。如果你已经看到上面的画面,则表明我们的安全账户设置已经成功了。

 

生成 p12 证书

我们可以参照链接 “Generate certificates”,在 Elasticsearch 的安装目录下,使用如下的命令:

./bin/elasticsearch-certutil ca
$ pwd
/Users/liuxg/elastic9/elasticsearch-7.6.0
liuxg:elasticsearch-7.6.0 liuxg$ ./bin/elasticsearch-certutil ca
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.bouncycastle.jcajce.provider.drbg.DRBG (file:/Users/liuxg/elastic9/elasticsearch-7.6.0/lib/tools/security-cli/bcprov-jdk15on-1.61.jar) to constructor sun.security.provider.Sun()
WARNING: Please consider reporting this to the maintainers of org.bouncycastle.jcajce.provider.drbg.DRBG
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.

The 'ca' mode generates a new 'certificate authority'
This will create a new X.509 certificate and private key that can be used
to sign certificate when running in 'cert' mode.

Use the 'ca-dn' option if you wish to configure the 'distinguished name'
of the certificate authority

By default the 'ca' mode produces a single PKCS#12 output file which holds:
    * The CA certificate
    * The CA's private key

If you elect to generate PEM format certificates (the -pem option), then the output will
be a zip file containing individual files for the CA certificate and private key

Please enter the desired output file [elastic-stack-ca.p12]: 
Enter password for elastic-stack-ca.p12 : 

在上面我们接受缺省的文件名,并输入一个自己熟悉的密码(针对我的情况,我接受空)。我们在 Elasticsearch 的安装目录下,我们可以看见一个生产的证书文件:

$ ls
LICENSE.txt          config               lib
NOTICE.txt           data                 logs
README.asciidoc      elastic-stack-ca.p12 modules
bin                  jdk.app              plugins

我们接着运行如下的命令来生成一个证书:

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

上面的命令将使用我们的 CA 来生成一个证书 elastic-certificates.p12:

$ pwd
/Users/liuxg/elastic9/elasticsearch-7.6.0
liuxg:elasticsearch-7.6.0 liuxg$ ls
LICENSE.txt              data                     logs
NOTICE.txt               elastic-certificates.p12 modules
README.asciidoc          elastic-stack-ca.p12     plugins
bin                      jdk.app
config                   lib

我们把上面的 elastic-certificates.p12 证书拷入到 Elasticsearch 安装目录下的 config 子目录。

$ pwd
/Users/liuxg/elastic9/elasticsearch-7.6.0
liuxg:elasticsearch-7.6.0 liuxg$ ls config/
elastic-certificates.p12 jvm.options              roles.yml
elasticsearch.keystore   log4j2.properties        users
elasticsearch.yml        role_mapping.yml         users_roles

 

我们使用如下的命令:

openssl pkcs12 -in elastic-stack-ca.p12 -out newfile.crt.pem -clcerts -nokeys

它将生成一个叫做 newfile.crt.pem 的文件。我们把这个文件拷入到 Kibana 安装目录下的 config 子目录中:

$ pwd
/Users/liuxg/elastic9/kibana-7.6.0-darwin-x86_64
liuxg:kibana-7.6.0-darwin-x86_64 liuxg$ ls config/
apm.js                   kibana.yml
elastic-certificates.p12 newfile.crt.pem

 

配置 Elasticsearch

我们接下来配置在 Elasticsearch 中的 config/elasticsearch.yml。我们参照 Elastic 官方文档 “Encrypting communication in Elasticsearch”,我们添加如下的配置:

xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.authc.api_key.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

我们重新启动 Elasticsearch:

./bin/elasticsearch

这样我们的 Elasticsearch 已经成功地运行于 https 模式。我们在 chrome 中打入地址 https://localhost:9200,我们可以看到:

显然我们不可以再像以前那样访问本地9200口的地址了。当上面的页面出现后,我们打入如下的字符串(在chrome为当前窗口的情况下):

thissisunsafe

我们打入 elastic 及我们之前设定的 Elasticsearch 的密码,再点击 “Sign In”:

 

从上面我们可以看出来,我们的 Elasticsearch 的安装时正确的。

我们也可以使用 Safari 浏览器来打开:

我们点击 Show Details 按钮:

我们点击 visit this website 链接:

和上面一样,我们输入之前在创建安全账号时的用户名 elastic 及密码,那么我们就可以访问 Elasticsearch:

如果我们使用 Postman,我们可以通过在 “Settings” 里做如下的配置来避免证书的检查:

 

 

我们关掉上面的 SSL certificate verification 开关:

经过上面的设置后,我们可以在 Postman 中访问具有 https 的 Elasticsearch。关于如何使用 Postman 来访问 Elasticsearch,请参考我之前的文章 “Elastic:使用Postman来访问Elastic Stack”。

 

配置 Kibana

为了能够使我们的 Kibana 能够顺利地访问带有 https 的 Elasticsearch。我们也需要做相应的配置。我们打开 config/kibana.yml。添加如下的设置:

elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.ssl.certificateAuthorities: ["config/newfile.crt.pem"]
elasticsearch.ssl.verificationMode: none

在上面我们把之前生成的 newfile.crt.pem 的证书填入到上面的路径中,同时为了我们能够方便地访问,我们针对 kibana 不启用 verificationMode。

等我们配置完后,我们重新启动 Kibana:

我们输入 elastic 用户的密码,我们就可以进入到 Kibana 的界面中:

在上面我们可以看到我们已经成功地进入到 Kibana 的界面中了。

 

把 Beats 数据传入到 https 的 Elasticsearch中

由于引入了 https,那么我们该如何把我们的数据传入到 Elasticsearch 中呢?在导入数据时,我们必须把证书配置到 beats 的配置文件中。我们就以 filebeat 为例。我们在 Elasticsearch 的安装目录中,打入如下的命令:

bin/elasticsearch-certutil cert --pem elastic-stack-ca.p12

上面的命令将会生成一个叫做 “certificate-bundle.zip” 的文件。

$ pwd
/Users/liuxg/elastic9/elasticsearch-7.6.0
liuxg:elasticsearch-7.6.0 liuxg$ ls
LICENSE.txt            certificate-bundle.zip lib
NOTICE.txt             config                 logs
README.asciidoc        data                   modules
bin                    jdk.app                plugins

我们可以把这个文件的一个进行解压,并把里面的 ca.crt 解压到 filebeat 的安装子目录中。

方法一

打开 filebeat 的配置文件 filebeat.yml,并添加证书信息:

filebeat.yml

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]

  # Protocol - either `http` (default) or `https`.
  protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"
  password: "123456"
  ssl.certificate_authorities: ["/Users/liuxg/elastic9/filebeat-7.6.0-darwin-x86_64/ca.crt"]
  ssl.verification_mode: none

在上面,你需要填入自己的 username 及 password,同时也需要把上面的路径换成自己的证书路径。

方法二

我们也可以用如下的命令来生产自己的证书。我们在Elasticsearch的安装目录下,在已经生成上面的 elastic-stack-ca.p12 前提下,运行如下的命令:

openssl pkcs12 -in elastic-stack-ca.p12 -out newfile.crt.pem -clcerts -nokeys

上面的命令将生成一个叫做 newfile.crt.pem 的文件。我们把这个文件拷贝到 filebeat 的安装目录下,并修改我们的 filebeat.yml 如下:

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]

  # Protocol - either `http` (default) or `https`.
  protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"
  password: "123456"
  ssl.certificate_authorities: ["/Users/liuxg/elastic9/filebeat-7.6.0-darwin-x86_64/newfile.crt.pem"]
  ssl.verification_mode: none

运行 Filebeat

修改完上面的配置后,我们启动 system 模块:

./filebeat modules enable system
./filebeat setup
$ ./filebeat setup
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.

Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html
Loaded machine learning job configurations
Loaded Ingest pipelines

我们可以通过如下的命令来运行 filebeat:

./filebeat -e

我们打开 Kibana:

点击上面的 [Filebeat System] Syslog dashboard ECS:

我们可以看到 filebeat 的数据成功地传入到 Elasticsearch 中了。

参考:

【1】https://www.elastic.co/guide/en/elasticsearch/reference/master/configuring-tls.html

【2】https://www.elastic.co/guide/en/elasticsearch/reference/current/encrypting-communications-certificates.html

【3】https://www.elastic.co/blog/how-to-setup-tls-for-elasticsearch-kibana-logstash-filebeat-with-offline-install-in-linux

【4】https://blog.pythian.com/how-to-secure-your-elastic-stack-plus-kibana-logstash-and-beats/

【5】https://www.elastic.co/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash

已标记关键词 清除标记
相关推荐