Logstash7.15.1开源组件升级步骤
Tips:生产上logstash扫描出开源组件漏洞,因一些jar包官方没有升级,只能手动升级版本,记录如下
一、升级涉及组件
组件名 | 当前版本 | 扫描/jar包路径 | 推荐版本 | 升级版本 |
---|---|---|---|---|
Kramdown | 1.14.0 | logstash/Gemfile.lock | 2.3.1 | 2.3.1 |
Snakeyaml | 1.23 | logstash/logstash-core/lib/jars/snakeyaml-1.23.jar | 1.26 | 1.26 |
Jackson-dataformat-cbor | 2.9.10 | logstash/logstash-core/lib/jars/jackson-dataformat-cbor-2.9.10.jar | 2.11.4 | 2.11.4 |
Ruby-i18n | 1.8.10 | logstash/Gemfile.lock | null | 1.8.11 |
Bouncy Castle | 1.65 | logstash/logstash-core/lib/jars/jackson-dataformat-cbor-2.9.10.jar/META-INF/jruby.home/lib/ruby/stdlib/org/bouncycastle | 1.67 | 1.68 |
Guava | 24.1.1-jre | logstash/logstash-core/lib/jars/guava-24.1.1-jre.jar | 30.1.1-android | 30.1.1-android |
Json for ruby | 1.8.6 | logstash/Gemfile.lock | 2.3.0 | 2.3.0 |
二、环境准备
1.安装gem
因为logstash的插件时基于ruby语言编写的,故需要安装gem进行插件安装
步骤如下:
wget https://rubygems.org/rubygems/rubygems-2.6.12.zip
unzip rubygems-2.6.12.zip
cd rubygems-2.6.12
sudo ruby setup.rb --通过执行setup.rb安装
gem -v --查看版本
三、升级步骤
1、下载需要升级的gem文件
下载i18n-1.8.11.gems、kramdown-2.3.1.gem、json-2.3.0-java.gem
下载地址:https://rubygems.org/downloads/i18n-1.8.11.gem、https://rubygems.org/downloads/kramdown-2.3.1.gem、https://rubygems.org/downloads/json-2.3.0-java.gem
对应安装命令:gem install i18n、gem install kramdown、gem install json -v 2.3.0
2、升级替换
1、安装完成后在当前目录会生成对应的文件夹,然后替换掉/elk/logstash/vendor/bundle/jruby/2.5.0/gems下对应的i18n-1.8.10、kramdown-1.14.0、json-1.8.6-java 这三个文件夹
2.查找所有1.8.6-java相关包
find . -name "*2.3.0-java*"
3.修改./vendor/bundle/jruby/2.5.0/specifications/json-1.8.6-java.gemspec目录下的文件名json-1.8.6-java.gemspec 为 json-2.3.0-java.gemspec
vi json-2.3.0-java.gemspec 将内容1.8.6改为2.3.0
修改./vendor/bundle/jruby/2.5.0/specifications/i18n-1.8.10.gemspec目录下的文件名i18n-1.8.10.gemspec 为 i18n-1.8.11.gemspec
vi i18n-1.8.11.gemspec 将内容1.8.10改为1.8.11
修改./vendor/bundle/jruby/2.5.0/specifications/kramdown-1.14.0.gemspec目录下的文件名kramdown-1.14.0.gemspec 为 kramdown-2.3.1.gemspec
vi kramdown-2.3.1.gemspec 将内容1.14.0改为2.3.1
4.替换 /elk/logstash/logstash-core/lib/jars 中的 snakeyaml-1.23.jar、jackson-dataformat-cbor-2.9.10.jar、guava-24.1.1-jre.jar
为:snakeyaml-1.26.jar jackson-dataformat-cbor-2.11.4.jar guava-30.1.1-android.jar
5.将 jruby-complete-9.2.19.0.jar 中的:
jruby-complete-9.2.19.0\META-INF\jruby.home\lib\ruby\stdlib\org\bouncycastle\bcpkix-jdk15on\1.65\bcpkix-jdk15on-1.65.jar
jruby-complete-9.2.19.0\META-INF\jruby.home\lib\ruby\stdlib\org\bouncycastle\bcprov-jdk15on\1.65\bcprov-jdk15on-1.65.jar
jruby-complete-9.2.19.0\META-INF\jruby.home\lib\ruby\stdlib\org\bouncycastle\bctls-jdk15on\1.65\bctls-jdk15on-1.65.jar
三个jar全部替换为对应的1.68版本,并修改上级1.65目录名为1.68,修改对应的.jrubydir文件中的目录名
修改jar包中\META-INF\jruby.home\lib\ruby\stdlib的oppenssl -->verion.rb的 BOUNCY_CASTLE_VERSION = '1.68'
BOUNCY_CASTLE_VERSION = '1.68'
将修改好的jruby-complete-9.2.19.0.jar 上传到 /elk/logstash/logstash-core/lib/jars/ 目录下。
6.将/elk/logstash/vendor/jruby/lib/ruby/stdlib/org/bouncycastle 中的三个jar,按上面的步骤替换
/elk/logstash/vendor/jruby/lib/ruby/stdlib/org/bouncycastle/bcpkix-jdk15on/1.65/bcpkix-jdk15on-1.65.jar
/elk/logstash/vendor/jruby/lib/ruby/stdlib/org/bouncycastle/bcprov-jdk15on/1.65/bcprov-jdk15on-1.65.jar
/elk/logstash/vendor/jruby/lib/ruby/stdlib/org/bouncycastle/bctls-jdk15on/1.65/bctls-jdk15on-1.65.jar
为1.68版本,并修改上级1.65目录名为1.68,修改对应的.jrubydir文件中的目录名
7.修改/elk/logstash/vendor/jruby/lib/ruby/gems/shared/specifications/default/jruby-openssl-0.10.5-java.gemspec 的1.65为1.68
s.requirements = ["jar org.bouncycastle:bcprov-jdk15on, 1.68".freeze, "jar org.bouncycastle:bcpkix-jdk15on, 1.68".freeze, "jar org.bouncycastle:bctls-jdk15on, 1.68".freeze]
8.修改logstash根目录下的Gemfile.lock
将i18n、kramdown、json的版本声明修改为下列版本:
i18n (1.8.11)
kramdown (2.3.1)
json (2.3.0-java)