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
请将命令中的两个域名按实际情况进行修改:
- server.t.com 服务器域名,配置在logstash的input字段中;
- 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的日志中可能会存在很多握手失败的日志。