Redis 集群 bus 端口默认没有认证:8.4.7 的告警开关与 8.4.8 的 4GB PUBLISH 溢出
Redis Open Source 8.4.7(2026-09-17,urgency SECURITY)修了一组安全问题,其中一条值得所有跑 Cluster 的人停下来看一眼:集群 bus 协议本身没有认证,除非开启 tls-cluster。任何能连上节点 bus 端口的机器,都可以加入集群并对集群造成影响。
问题本身
Cluster 节点之间靠 bus 端口通信,默认端口是客户端端口 +10000(6379 对应 16379),通过 CLUSTER NODES 里 ip:port@cport 的 @cport 暴露出来。这个通道默认既没有 TLS,也没有别的认证手段——能不能进来,取决于网络边界。把 bus 端口放在公网、或者同机房其他租户可达的网段,就等于把集群交给对方。
8.4.7 的改动是把这件事从"默认沉默"变成"可选严格":
- 节点在 bus 端口未被认证时,启动阶段打告警;
- 新增配置项
cluster-bus-port-protected-mode,默认no; - 设为
yes后,只有tls-cluster真正认证了 bus 通道,节点才允许启动。
也就是说,严格模式不是一个自动生效的修复,而是一次显式表态:你确认 bus 已被保护,或者你接受当前风险。默认 no 意味着升级本身不会改变集群行为,但也不会替你关掉这个口子。
同批修的还有 #15673:放在事务里排队的命令,仍能访问在事务执行前已经被吊销 ACL 权限的 key。
自查
先在每个节点上确认两个配置项的现状:
redis-cli -h -p 6379 CONFIG GET cluster-bus-port-protected-mode
redis-cli -h -p 6379 CONFIG GET tls-cluster
看 bus 端口实际监听在哪:
ss -ltnp | grep 16379
再看拓扑里各节点的 bus 地址,确认没有指向不该暴露的网段:
redis-cli -h -p 6379 CLUSTER NODES | awk '{print $2}'
输出形如 10.0.0.11:6379@16379,10.0.0.11:6379,@ 后紧跟的就是 bus 端口。
配置片段
打算启用严格模式、并且已经具备 TLS 集群通信条件的:
tls-cluster yes
cluster-bus-port-protected-mode yes
只启用严格模式而没有 tls-cluster,节点会拒绝启动。所以这两行必须作为一个整体评估,不能先改后补。
暂时不开 TLS 的,至少把 bus 端口限制在集群节点网段内,禁止从其他来源访问;cluster-bus-port-protected-mode 保持 no,但要清楚这是主动选择的暴露面,不是修复。
8.4.8:>4GB PUBLISH 的堆溢出
8.4.8(2026-10-26,urgency SECURITY)修的是集群模式下通过 cluster bus 传播大于 4GB 的 PUBLISH/SPUBLISH 消息时的堆缓冲区溢出。同一修复也进了 8.6.8、8.8.4、8.10.3。
触发条件是消息体积,不是权限,所以和上面那条是两件事:一个是被未授权节点接入,一个是正常节点之间传播超大消息把内存写坏。实际部署里 >4GB 的单条消息本身就不该出现,但从"不该出现"到"不会造成溢出"之间需要这个补丁。
8.4.6 里的同类 ACL 问题
8.4.6(2026-08-17)也有一条 ACL 绕过:#15478,SORT、GEORADIUS/GEORADIUSBYMEMBER、XREAD/XREADGROUP 的 key 权限校验存在偏差——被校验的 key 可能与命令实际访问的 key 不同。如果这几个命令在带 ACL 的多租户环境里用,8.4.6 是下限。
滚动升级注意点
- 严格模式与版本升级分两步做。先把所有节点升到 8.4.7+,观察告警日志,再统一改
cluster-bus-port-protected-mode。反过来做的话,配置先行、节点重启时若tls-cluster未就绪,会直接起不来。 - 先副本、后主节点,逐节点重启,等该节点重新加入并完成槽同步再动下一个。
tls-cluster需要集群内所有节点一致开启并配好证书。混跑期间不要一部分节点开 TLS、一部分不开。- 8.4.8 的溢出修复在跨版本混跑阶段不完整:旧节点仍然脆弱。升级窗口内避免任何超大 PUBLISH/SPUBLISH 消息。
- 升级前把 bus 端口的访问控制做在防火墙或安全组上,别只指望配置项。
8.4 GA 的其他变化与已知限制
相对 8.2,8.4 GA 的主要变化:CLUSTER MIGRATION 原子槽迁移;DIGEST/DELEX 与 SET 扩展(原子 compare-and-set、compare-and-delete);MSETEX 一次设置多个 key 及其过期时间;XREADGROUP 的 CLAIM 选项(同时读取 idle pending 与 incoming 条目);CLUSTER SLOT-STATS 每槽用量指标;FT.HYBRID 混合检索;I/O threading(缓存场景 >30% 吞吐提升);JSON 同构数组内存最高降低 91%。
已知限制:原子槽迁移进行中执行 FT.SEARCH/FT.AGGREGATE/FT.CURSOR/FT.HYBRID 与 TS.* 可能返回部分结果或重复;FT.PROFILE/FT.EXPLAIN 不含 FT.HYBRID 选项;FT.HYBRID 指标不在 FT.INFO 与 INFO 中显示;EXPLAINSCORE、SHARD_K_RATIO、YIELD_DISTANCE_AS、WITHCURSOR 尚不可用;COMBINE 之后用 FILTER 做 post-filtering 不支持。
8.12 RC1 于 2026-10-29 发布,属预发布,不适合生产。