1、端口保护
规范1.1:【强制】修改zookeeper默认监听端口2181为不易猜测的端口。
说明
一般攻击者会根据默认端口来猜测中间件类型,这降低了攻击者对服务器的攻击难度。
实时指导
修改zookeeper的配置文件,将端口号更改为不易猜测的端口,如下所示:
clientPort=3285
2、预防DOS攻击
规范2.1:【建议】建议限制zookeeper客户端的最大连接数。
说明
默认值是10,连接到同一个服务器上的最大连接数,根据IP来区分。为0时,表示没有任何限制。建议设置该值,防止DoS攻击。
实时指导
修改zookeeper的配置文件,设置客户端最大连接数,如下所示:
maxClientCnxns=60
3、禁用管理控制台
规范3.1:【建议】如不需要使用zookeeper的管理控制台,建议禁用。
说明
zookeeper的管理控制台是由jetty启动的,默认为http,存在一定的信息泄露及安全隐患。
实施指导
在bin/zkServer.sh文件中,将如下
start)
echo -n "Starting zookeeper ... "
if [ -f "$ZOOPIDFILE" ]; then
if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
echo $command already running as process `cat "$ZOOPIDFILE"`.
exit 1
fi
fi
nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
修改为
start)
echo -n "Starting zookeeper ... "
if [ -f "$ZOOPIDFILE" ]; then
if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
echo $command already running as process `cat "$ZOOPIDFILE"`.
exit 1
fi
fi
nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.admin.enableServer=false" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
即在nohup这一行,添加了
"-Dzookeeper.admin.enableServer=false"
4、授权访问
规范4.1:【强制】添加对zookeeper的访问控制权限。
说明
zookeeper在默认情况下,是允许任意客户端未经授权访问,存在很大的安全隐患。
实施指导
具体授权访问,可参照安全管理平台知识库中《zookeeper授权方式设置》一文。
5、日志审计
规范5.1:【强制】添加zookeeper日志审计。
说明
开启日志功能,有利于开发人员或安全人员进行朔源取证,安全审计。
6、事务日志与快照日志分离
规范6.1:【建议】在部署时,建议zookeeper的事务日志与快照日志分离。
说明
建议将事务日志(dataLogDir)与快照日志(dataLog)单独配置,因为当zookeeper集群进行频繁的数据读写操作时,会产生大量的事务日志信息,将两类日志分开存储会提高系统性能,而且,可以允许将两类日志存在在不同的存储介质上,减少磁盘压力。
实施指导
在配置文件中,增加日志配置,如下所示:
dataDir=/home/sct/tool/zookeeper-cluster/zookeeper-1/data
dataLogDir=/home/sct/tool/zookeeper-cluster/zookeeper-1/dataLog
7、日志清理
规范7.1:【建议】建议设置对zookeeper日志的定期清理功能。
说明
客户端在与zookeeper交互过程中会产生非常多的日志,而且zookeeper也会将内存中的数据作为snapshot保存下来,这些数据是不会被自动删除的,这样磁盘中这样的数据就会越来越多,造成磁盘容量被大量占用。
实施指导
在配置文件中清理日志策略,如下所示:
autopurge.snapRetainCount=10 //保留多少个快照
autopurge.purgeInterval=24 //多少小时清理一次