Zookeeper安全基线

检查项


端口保护 预防DDOS攻击 禁用管理控制台 授权访问 日志审计 事务日志与快照日志分离 日志清理

详细内容


端口保护

规范

【强制】修改zookeeper默认监听端口2181为不易猜测的端口。

描述

一般攻击者会根据默认端口来猜测中间件类型,这降低了攻击者对服务器的攻击难度。

加固建议

修改zookeeper的配置文件,将端口号更改为不易猜测的端口,如下所示:

clientPort=3285


预防DOS攻击

规范

【建议】建议限制zookeeper客户端的最大连接数。

描述

默认值是10,连接到同一个服务器上的最大连接数,根据IP来区分。为0时,表示没有任何限制。建议设置该值,防止DoS攻击。

加固建议

修改zookeeper的配置文件,设置客户端最大连接数,如下所示:

maxClientCnxns=60


禁用管理控制台

规范

【建议】如不需要使用zookeeper的管理控制台,建议禁用。

描述

zookeeper的管理控制台是由jetty启动的,默认为http,存在一定的信息泄露及安全隐患。

加固建议

在bin/zkServer.sh文件中,将如下

1
2
3
4
5
6
7
8
9
10
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}" \\

修改为

1
2
3
4
5
6
7
8
9
10
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"


授权访问

规范

【强制】添加对zookeeper的访问控制权限。

描述

zookeeper在默认情况下,是允许任意客户端未经授权访问,存在很大的安全隐患。

加固建议

具体授权访问,可参照安全管理平台知识库中《zookeeper授权方式设置》一文。


日志审计

规范

【强制】添加zookeeper日志审计。

描述

开启日志功能,有利于开发人员或安全人员进行朔源取证,安全审计。


事务日志与快照日志分离

规范

【建议】在部署时,建议zookeeper的事务日志与快照日志分离。

描述

建议将事务日志(dataLogDir)与快照日志(dataLog)单独配置,因为当zookeeper集群进行频繁的数据读写操作时,会产生大量的事务日志信息,将两类日志分开存储会提高系统性能,而且,可以允许将两类日志存在在不同的存储介质上,减少磁盘压力。

加固建议

在配置文件中,增加日志配置,如下所示:

1
2
dataDir=/home/sct/tool/zookeeper-cluster/zookeeper-1/data
dataLogDir=/home/sct/tool/zookeeper-cluster/zookeeper-1/dataLog

日志清理

规范

【建议】建议设置对zookeeper日志的定期清理功能。 描述 客户端在与zookeeper交互过程中会产生非常多的日志,而且zookeeper也会将内存中的数据作为snapshot保存下来,这些数据是不会被自动删除的,这样磁盘中这样的数据就会越来越多,造成磁盘容量被大量占用。 加固建议 在配置文件中清理日志策略,如下所示:

1
2
autopurge.snapRetainCount=10  //保留多少个快照
autopurge.purgeInterval=24 //多少小时清理一次