配置防火墙规则解决zookeeper漏洞
问题背景
公司扫描到漏洞了:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
在通常情况下,zookeeper允许未经授权的访问, 但是特定的命令下,用户的环境会存在敏感信息泄露问题,攻击者执行特定命令可获取用户环境的等敏感信息。
解决方法
方法一:
1)增加一个认证用户
addauth digest 用户名:密码明文
eg. addauth digest user1:password1
2)设置权限
setAcl /path auth:用户名:密码明文:权限
eg. setAcl /test auth:user1:password1:cdrwa
3)查看Acl设置
getAcl /path
方法二:
setAcl /path digest:用户名:密码密文:权限
方法三:
设置防火墙策略,给公司其他服务器添加白名单
解决步骤
因为方法1、2均影响业务,要改配置文件或者改业务代码,按代码能跑就不要动的原则,采用方式方法三。
1.备份
iptables-save>/root/iptables_20260810.rules2.配置规则
# 自定义链管理规则iptables-NZK21812>/dev/null||true# 清空该链内已存在的所有规则(只删规则,不删链本身)iptables-FZK2181# 给本机配置IP白名单iptables-AZK2181-s127.0.0.1/32-jACCEPT iptables-AZK2181-sx.x.x.x/32-jACCEPT# 配置其他IP白名单iptables-AZK2181-miprange --src-range x.x.x.x-x.x.x.x-jACCEPT# 其他全部禁止iptables-AZK2181-jDROP# 避免重复入口iptables-DINPUT-ptcp--dport2181-jZK21812>/dev/null||true# 最关键:将该链插入INPUT主链第一条iptables-IINPUT1-ptcp--dport2181-jZK21813.查看配置是否成功
# 查看INPUT主链第一个是否为ZK2181iptables-LINPUT-n-v--line-numbers# 查看ZK2181链信息,正常都是上步配置的规则iptables-LZK2181-n-v--line-numbers4.测试
4.1白名单服务器测试
nc-vz-w3<已配置规则的服务器IP>2181应输出connect to <已配置规则的服务器IP>字样
4.2非白名单服务器测试
nc-vz-w3<已配置规则的服务器IP>2181应输出connection time out字样
4.3本地服务器测试
# 127.0.0.1nc-vz-w3<本地服务器IP>2181# 公网ipnc-vz-w3<本地服务器IP>2181均应输出connect to <已配置规则的服务器IP>字样
4.4更严谨的测试
使用上述命令,对比同一台服务器在配置白名单前后的输出即可。
但如果之前没有规则,一般输出都是成功,没有对比效果。
故此时可以在ZK2181链前加一个临时策略,使用上述命令测试后删除该策略再次测试:
# 添加临时策略iptables-IZK21811-s10.226.21.178-jDROP# 删除该策略iptables-DZK21811这实际上就等价于验证了“非白名单会被 DROP”,不需要专门再找一台非白名单服务器。
178 白名单状态
↓
2181 成功
临时把178拦掉
↓
2181 超时
删除临时DROP
↓
2181 再次成功
5.设置开机自启
领导担心系统宕机,要求配置开机自启
# 保存当前规则serviceiptables save# 设置开机启动systemctlenableiptables# 确认是否开启开机自启systemctl is-enabled iptables输出enable即为开机自启设置成功。
5.回滚
万一万一领导又抽风了要回滚或者出了其他什么问题,执行以下命令就行了。
5.1回滚命令
如果做了备份
# 如果做了备份iptables-restore</root/iptables_20260810.rules如果没做备份
# 1. 删除 INPUT 中跳转到 ZK2181 的规则iptables-DINPUT-ptcp--dport2181-jZK2181# 2. 清空 ZK2181 链iptables-FZK2181# 3. 删除 ZK2181 链iptables-XZK21815.2回滚确认
# 查看input链是否删除成功# 确认已经没有:ZK2181 tcp ... tcp dpt:2181iptables-LINPUT-n-v--line-numbers# 检查ZK2181链是否删除# 正常提示:iptables: No chain/target/match by that name.iptables-LZK2181-n