前言
为了保证应用日志数据的传输安全,我们可以使用SSL相互身份验证来保护Filebeat和Logstash之间的连接。这可以确保Filebeat仅将加密数据发送到受信任的Logstash服务器,并确保Logstash服务器仅从受信任的Filebeat客户端接收数据。
下面就讲述一下配置Filebeat与Logstash之间进行加密通信的方法。需要一个自签的CA证书,以及使用该CA证书签署的两份数据证书。一份是给Logstash作为server端验证自己身份时使用,一份是提供给Filebeat客户端验证自己身份时使用。
步骤
1.使用 Elasticsearch 提供的数字证书工具 elasticsearch-certutil 来制作需要的证书:
- a.制作自签名 CA 证书, 指定输出位置,并为证书设置访问口令,默认输出文件名为elastic-stack-ca.p12:
sudo /usr/share/elasticsearch/bin/elasticsearch-certutil ca --out /opt/elastic-stack-ca.p12
- b.根据证书文件导出一份 CA 公钥文件,用于后续各配置文件中引用 CA 公钥时使用:
openssl pkcs12 -clcerts -nokeys -in elastic-stack-ca.p12 -out ca.pem
- c.使用自签名的CA签署生成一份logstash使用的数字证书,名字 logstash
sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --name logstash --dns logstash --ip 192.168.15.20 --pem --out logstash.zip
参数含义解释:
--name为制作的证书名称
--dns为hosts文件解析后的地址
--ip为logstash程序所在主机ip
- d.解压,解压后会各有一个.key和.crt后缀的文件,logstash 与 beats 启动 ssl 加密通信时,仅支持使用 PKCS8 的密钥格式 ,所以针对beats输入插件,将logstash.key转换为pkcs#8格式
unzip logstash.zip
cd logstash
openssl pkcs8 -in logstash.key -topk8 -nocrypt -out logstash.p8 #使用openssl转换生成PKCS8格式的密钥文件
对于制作的logstash.crt的证书,可以通过以下命令查看证书中的信息:
openssl x509 -in logstash.crt -text
- e.将证书文件部署到logstash配置目录下,创建目录certs用于存放证书,并把包括logstash证书和ca证书在内的文件部署于此。
mkdir -p /etc/logstash/certs
# 把ca.pem logstash.crt logstash.key logstash.p8这四个文件拷贝到该目录下
ll /etc/logstash/certs
ca.pem logstash.crt logstash.key logstash.p8
chmod 600 * # 安全起见,将以上文件权限调整为600
2.以上述同样的步骤为Filebeat服务生成数字证书,名字为filebeat:
sudo /etc/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --name filebeat --dns filebeat --ip 192.168.15.20 --pem --out filebeat.zip
unzip filebeat.zip
# 将得到的数字证书和密钥文件,以及ca证书文件,复制到filebeat存储证书的路径下:
mkdir -p /etc/filebeat/certs
ll /etc/filebeat/certs
filebeat.crt filebeat.key ca.pem
chmod 600 * # 安全起见,将以上文件权限调整为600
3.配置 logstash和filebeat 使用 SSL
- a.配置logstash在通过beats接收日志数据时使用ssl
# 在ssl_key参数中,引用的是我们制作的pcks#8格式的密钥文件
input {
beats {
port => 5044
codec => plain {
charset => "UTF-8"
}
ssl => true
ssl_certificate_authorities => ["/etc/logstash/certs/ca.pem"]
ssl_certificate => "/etc/logstash/certs/logstash.crt"
ssl_key => "/etc/logstash/certs/logstash.p8"
ssl_verify_mode => "force_peer"
}
}
测试 logstash 配置有无语法错误:
/usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf --path.settings /etc/logstash/
- b.配置filebeat使用ssl
编辑filebeat.yml文件,参照以下内容进行配置:
output.logstash:
hosts: ["192.168.15.21:5044"]
ssl.certificate_authorities: ["/etc/filebeat/certs/ca.pem"]
ssl.certificate: "/etc/filebeat/certs/filebeat.crt"
ssl.key: "/etc/filebeat/certs/filebeat.key"
4.重启filebeat并观察日志
systemctl restart filebeat
参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/ssl-tls.html
https://www.elastic.co/guide/en/beats/filebeat/7.10/configuring-ssl-logstash.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/certutil.html
https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash#run-filebeat
https://discuss.elastic.co/t/elasticsearch-certificate-requirements/188143/2
https://opendistro.github.io/for-elasticsearch-docs/old/0.9.0/docs/security/tls-configuration/
https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析