首页/安全/安全加固速查/ZooKeeper/Kafka 未授权访问整治
服务与端口收敛50 条

ZooKeeper/Kafka 未授权访问整治

ZK/Kafka 默认无认证:可被读取元数据、篡改队列甚至删除 topic;内网暴露同样高危,按需开启 SASL/ACL。

安全加固速查安全更新于 2026-10-13

ZK 与 Kafka 默认无认证

ZooKeeper 与 Kafka 默认都不启用认证:任何能连到 2181 或 9092 的人都可以读取元数据、消费队列消息,甚至删除 topic。内网暴露在很多环境里被当成可以接受,但横向移动场景中消息中间件恰恰是攻击者的首选目标,因此要么开启 SASL 与 ACL,要么至少做严格的来源限制。

基本信息

适用平台Linux(ZooKeeper、Kafka)
相关端口2181 ZooKeeper、9092 Kafka
风险等级高
基线要求无匿名访问并限制来源
加固方向SASL、ACL 与来源白名单

典型使用场景

  • 消息平台暴露面盘点
  • 排查可匿名访问的 ZooKeeper 与 Kafka
  • 新增集群时的认证方案设计
  • 已暴露集群的过渡期加固
  • 排查 topic 被误删或篡改的原因
  • 与大数据组件一起做统一收敛

核查现状

核查现状
ss -tlnp | grep -E ':2181|:9092 '      # 确认两个端口与所属进程
echo ruok | nc 127.0.0.1 2181          # 用四字命令探测 ZooKeeper 是否响应
kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list 2>/dev/null | head   # 尝试匿名列出 topic
kafka-configs.sh --bootstrap-server 127.0.0.1:9092 --describe --entity-type brokers 2>/dev/null | head   # 查看 broker 配置

加固方向

加固方向
# ZooKeeper:用 4lw.commands.whitelist 收紧四字命令,只保留 srvr、mntr 等必需项
#   clientPortAddress 绑定内网地址,并叠加防火墙限源
# Kafka:启用 SASL_PLAINTEXT 或 SASL_SSL,配合 ACL 按主体授权
#   listeners 绑定内网地址,避免 broker 暴露到不可信网段

复核必查项

检查项含义注意点
2181ZooKeeper 客户端端口默认无认证
9092Kafka broker 端口默认无认证
四字命令ZooKeeper 的探测命令ruok、stat 等可无认证读取
认证方式是否启用 SASL未启用时必须限源
来源限制允许连接的网段只放行业务集群
ZooKeeper 的四字命令(ruok、stat 等)无需认证即可读取基本信息:配置白名单可以从源头收敛探测面。
内网互信不是安全边界:横向移动场景中,内网中间件往往是攻击者最先下手的目标。
启用认证会明显增加客户端改造量:建议先在测试集群验证 ACL 策略与客户端兼容性,再推到生产。
如果一时上不了 SASL,至少先把监听地址绑到内网并做防火墙限源,同时开启操作审计;这类临时措施要登记在册,避免以后没人记得还有欠账未还。

易错点

  • 认为内网无需防护,ZooKeeper 与 Kafka 长期匿名可访问
  • 只改端口不启用认证,扫描器换个端口照样能找到服务
  • 直接在生产集群启用 ACL,客户端兼容问题导致业务中断
  • 保留全部四字命令,探测面没有实质收敛
  • 加固了 Kafka 却忘记 ZooKeeper,元数据依旧可以被匿名读取

数据来源与参考

  • Apache ZooKeeper 文档:四字命令
  • Kafka 官方文档:Security

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌