0x01 前言

如果服务器位于世界各地,但又需要通过filebeat传输日志到logstash分析,这时候为了保证数据的安全,在传输的时候使用加密是基本的要求。

但是我没有以上的这种需求,我只是想给filebeat使用SSL而已。在使用家里的服务器配置测试后,一切都很正常。

0x02 数字证书

首先需要使用openssl生成自签发的数字证书,在这里你需要准备一个域名而不能使用IP地址。签发的过程与以下文章中“数字证书”的部分类似:

我们需要先生成ca证书,然后通过ca证书签发服务器证书与客户端证书。先建立一个文件夹以便存放所有证书文件:

#新建文件夹
[root@web ~]# mkdir filebeat_crt
 
#进入文件夹
[root@web ~]# cd filebeat_crt

然后使用以下命令建立所需要的证书文件。其中CN部分可以修改为服务器的域名或IP,在实际应用中推荐修改为服务器的域名:

#生成ca私钥
openssl genrsa 2048 > ca.key
 
#使用ca私钥建立ca证书
openssl req -new -x509 -nodes -days 1000 -key ca.key -subj /CN=elkCA\ CA/OU=Development\ group/O=HomeIT\ SIA/DC=elk/DC=com > ca.crt
 
#生成服务器csr证书请求文件
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server.key -subj /CN=server.t.com/OU=Development\ group/O=Home\ SIA/DC=elk/DC=com > server.csr
 
#使用ca证书与私钥签发服务器证书
openssl x509 -req -in server.csr -days 1000 -CA ca.crt -CAkey ca.key -set_serial 01 > server.crt
 
#生成客户端csr证书请求文件
openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client.key -subj /CN=client.t.com/OU=Development\ group/O=Home\ SIA/DC=elk/DC=com > client.csr
 
#使用ca证书与私钥签发客户端证书
openssl x509 -req -in client.csr -days 1000 -CA ca.crt -CAkey ca.key -set_serial 01 > client.crt

请将命令中的两个域名按实际情况进行修改:

  1. server.t.com 服务器域名,配置在logstash的input字段中;
  2. client.t.com 客户端域名,配置在filebeat.yml文件中。

完成后,该目录下一共有8个文件:

[root@web filebeat_crt]# ll
总用量 32
-rw-r--r-- 1 root root 1350 1月   8 21:20 ca.crt
-rw-r--r-- 1 root root 1679 1月   8 21:20 ca.key
-rw-r--r-- 1 root root 1216 1月   8 21:20 client.crt
-rw-r--r-- 1 root root 1013 1月   8 21:20 client.csr
-rw-r--r-- 1 root root 1704 1月   8 21:20 client.key
-rw-r--r-- 1 root root 1216 1月   8 21:20 server.crt
-rw-r--r-- 1 root root 1013 1月   8 21:20 server.csr
-rw-r--r-- 1 root root 1704 1月   8 21:20 server.key

将文件分别复制到logstash目录与filebeat目录中:

#复制到logstash目录中
[root@web filebeat_ssl]# cp -r /root/filebeat_ssl/ /etc/logstash/

#复制到filebeat目录中
[root@web filebeat_ssl]# cp -r /root/filebeat_ssl/ /etc/filebeat/

0x03 logstash

然后配置logstash的input配置:

#打开文件
[root@web ~]# vim /etc/logstash/conf.d/01-logstash-listen-5045.conf

#input配置文件如下
input {
  beats {
    port => 5045
    ssl => true
    ssl_certificate_authorities => ["/etc/logstash/conf.d/filebeat_ssl/ca.crt"]
    ssl_certificate => "/etc/logstash/conf.d/filebeat_ssl/server.crt"
    ssl_key => "/etc/logstash/conf.d/filebeat_ssl/server.key"
    ssl_verify_mode => "force_peer"
  }
}

然后重启logstash:

[root@web ~]# systemctl restart logstash

0x04 filebeat

然后修改filebeat的配置文件:

#打开文件
[root@web ~]# vim /etc/filebeat/filebeat.yml

#修改 Logstash output 区段
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["server.t.com:5045"]

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  ssl.certificate_authorities: ["/etc/filebeat/filebeat_ssl/ca.crt"]

  # Certificate for SSL client authentication
  ssl.certificate: "/etc/filebeat/filebeat_ssl/client.crt"

  # Client Certificate Key
  ssl.key: "/etc/filebeat/filebeat_ssl/client.key"

保存后重启filebeat:

[root@web ~]# systemctl restart filebeat

0x05 结语

在网络不好的情况下,在logstash的日志中可能会存在很多握手失败的日志。