0x01 前言
如果服务器位于世界各地,但又需要通过filebeat传输日志到logstash分析,这时候为了保证数据的安全,在传输的时候使用加密是基本的要求。
但是我没有以上的这种需求,我只是想给filebeat使用SSL而已。在使用家里的服务器配置测试后,一切都很正常。
0x02 数字证书
首先需要使用openssl生成自签发的数字证书,在这里你需要准备一个域名而不能使用IP地址。签发的过程与以下文章中“数字证书”的部分类似:
�为zabbix服务配置数字证书加密通道
我们需要先生成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
请将命令中的两个域名按实际情况进行修改,这里需要使用域名,不然会报错 it doesn't contain any IP SANs,如果没有域名,可以在/etc/hosts中配置一下:
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:
1
[root@web ~]# systemctl restart logstash
0x04 filebeat
然后修改filebeat的配置文件:
打开文件
[root@web ~]# vim /etc/filebeat/filebeat.yml
output.logstash:
hosts: ["server.t.com:5045"]
ssl.certificate_authorities: ["/etc/filebeat/filebeat_ssl/ca.crt"]
ssl.certificate: "/etc/filebeat/filebeat_ssl/client.crt"
ssl.key: "/etc/filebeat/filebeat_ssl/client.key"
保存后重启filebeat:
[root@web ~]# systemctl restart filebeat
0x05 结语
在网络不好的情况下,在logstash的日志中可能会存在很多握手失败的日志。