目前我们的大数据基础平台类似于CDH,集成了各个开源软件,Log4j2漏洞出现的时候,我们采用了两个方案,一个是开启防火墙,二是对应每个大数据组件进行更新。
一、防火墙
方案思路是,在初始化主机的时候加上防火墙策略,集群间开启白名单,对外开放我们需要用到的端口,firewall
可能要用到的语句如下:
//开放端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
//批量开放端口
firewall-cmd --zone=public --add-port=9200-9202/tcp --permanent
//开放ip
firewall-cmd --zone=trusted --add-source=对应IP/32 --permanent
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="对应IP/32" accept" --permanent
//开放端口给特定ip
firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" source address="对应IP/16" port protocol="tcp" port="9200" accept" --permanent
//以上命令增加使用命令刷新才生效
firewall-cmd --reload
//查看default zone规则
firewall-cmd --list-all
//查看指定zone规则
firewall-cmd --zone=trusted --list-all
二、大数据组件
其实一些像Zookeeper和Kafka这些用的Log4j是没有啥影响的,但是合作商需要你升级,因为一个漏洞就要把对应组件版本升级不太实际,组件的版本升级我们还需要做版本调研和适配,所以采用的方案是更换jar包
重新打包,目前基于Java的组件如下:Zookeeper
、Kafka
、Flink
、Elastiserch
、Neo4j
还有自身的基于SpringBoot基础平台服务。
1、SpringBoot(V2.1.3)
SpringBoot升级对应log4j2版本即可。
<properties>
<log4j2.version>2.17.0</log4j2.version>
</properties>
2、Zookeeper(V3.4.14)
2.1 更换jar包
删除jar包
log4j-1.2.17.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar
添加jar包
log4j-1.2-api-2.17.0.jar
log4j-api-2.17.0.jar
log4j-core-2.17.0.jar
log4j-slf4j-impl-2.17.0.jar
slf4j-api-1.7.30.jar
2.2 替换log4j.properties文件
log4j.properties
文件
property.filename = /var/log/zookeeper/zookeeper.log
filter.threshold.type = ThresholdFilter
filter.threshold.level = info
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = error
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = /var/log/zookeeper/zookeeper.log.%d{yyyy-MM-dd}
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 30
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=10MB
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 30
rootLogger.level = info
rootLogger.appenderRef.rolling.ref=RollingFile
2.3 修改java.env
添加JVM配置,其中log4j.configurationFile
用于指定log4j2的日志配置文件,zookeeper.jmx.log4j.disable
用于关闭jmx。
-Dlog4j.configurationFile=/usr/local/zookeeper-3.4.14/conf/log4j.properties -Dzookeeper.jmx.log4j.disable=true
3、Kafka(V2.11_2.1.1)
删除jar包
log4j-1.2.17.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar
添加jar包
log4j-1.2-api-2.17.0.jar
log4j-api-2.17.0.jar
log4j-core-2.17.0.jar
log4j-slf4j-impl-2.17.0.jar
slf4j-api-1.7.30.jar
4、Flink(V1.9.0)
删除jar包
log4j-1.2.17.jar
slf4j-log4j12-1.7.15.jar
添加jar包
log4j-1.2-api-2.17.0.jar
log4j-api-2.17.0.jar
log4j-core-2.17.0.jar
log4j-slf4j-impl-2.17.0.jar
slf4j-api-1.7.30.jar
5、Elastiserch(V7.2.0)
删除jar包
log4j-1.2-api-2.11.1.jar
log4j-api-2.11.1.jar
log4j-core-2.11.1.jar
添加jar包
log4j-1.2-api-2.17.0.jar
log4j-api-2.17.0.jar
log4j-core-2.17.0.jar
6、Neo4j(V3.5.26)
Neo4j
我们的版本没有影响,可以参考官方《Apache Log4j Security Vulnerability》
像Hadoop
、Hbase
、Hive
、Spark
这些组件我们目前不做调整,有做过适配的欢迎推荐参考资料,因为不排除后期也要做升级处理。