在本地对 filebeat 进行编译
filebeat 本地编译
使用的 filebeat 版本为 7.13.2,安全漏洞扫描,扫描出 filebeat 有 7 分以上安全漏洞 CVE-2023-44487,CVE-2023-4785。
查阅资源,发现这个安全漏洞是 grpc 引入,7.13.2 的 filebeat 使用的 grpc 版本为 1.29.1,为了解决安全漏洞,需要将 grpc 版本升级到 1.58.3 或者更高的版本。
两个办法,一个是升级 filebeat,但是 filebeat 和 elasticsearch 有兼容关系 产品兼容性。如果升级 filebeat,那么 elasticsearch 和 kibana 很有可能需要同步升级,这很有可能导致其他问题。
另一个办法是自行对 filebeat 进行编译,将 filebeat 依赖的 grpc 升级。本编文章就是介绍这个的。
编译步骤
- 从 https://github.com/elastic/beats 下载或者克隆源码,下载选择 7.13.2 版本,克隆则切换到 7.13.2 tag
- 访问源码下的
docs/devguide/contributing.asciidoc
,这篇只能介绍了本地编译 filebeat 所需的环境,filebeat 只需要 golang 环境即可 - golang 环境,这里使用 Docker 镜像构建,设置代理,不然无法访问 filebeat 所需依赖
将源码放置在指定位置
1
2mkdir -p $GOPATH/src/github.com/elastic
mv beats/ $GOPATH/src/github.com/elastic修改源码下的 go.mod 文件,将 grpc 版本从 1.29.1 改为 1.58.3,并将倒数第三行从文件中删除,如下。
1
github.com/kardianos/service => github.com/blakerouse/service v1.1.1-0.20200924160513-057808572ffa
这一行似乎是转换,让 github.com/kardianos/service 这个依赖从 github.com/blakerouse/service 下载。但是直接下载并没有找到 github.com/blakerouse/service 这个依赖。依赖可以通过官方仓库搜索
- 进入 filebeat 目录,执行
go mod tidy
更新依赖,这一步同时会下载依赖 在 filebeat 目录下执行
make
命令编译,这一步可以看见编译命令,类似于1
go build -ldflags "-X github.com/elastic/beats/libbeat/version.buildTime=2023-11-20T10:48:12Z -X github.com/elastic/beats/libbeat/version.commit=686ba416a74193f2e69dcfa2eb142f4364a79307"
交叉编译,编译 windows 下的可执行文件
1
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-X github.com/elastic/beats/libbeat/version.buildTime=2023-11-20T10:48:12Z -X github.com/elastic/beats/libbeat/version.commit=686ba416a74193f2e69dcfa2eb142f4364a79307"
也可以通过这个命令编译 ARM 平台下的二进制
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build