11.10.6 集群隔离与网络安全策略

集群隔离与网络安全策略旨在降低横向移动与攻击面,确保 ZooKeeper 仅暴露必要端口与最小通信路径。推荐采用独立网络域或专用子网部署,生产/测试/开发环境严格隔离;跨环境访问必须通过受控跳板或安全网关,禁止直连。

原理草图(管理面/业务面分离与端口收敛):

文章图片

网络隔离策略要点与示例:
- 访问面收敛:仅开放客户端端口(默认 2181)与集群通信端口(默认 2888/3888),其他端口全部封闭。
- 白名单控制:客户端仅允许业务网段访问;节点间仅允许成员互通;运维仅允许堡垒机网段。
- 细粒度分段:VLAN/子网/安全组实现业务与管理平面分离。
- 入口控制:禁止公网直达,必要时使用内网负载均衡并结合 ACL。

防火墙示例(以 firewalld 为例,适用于 RHEL/CentOS):

# 1) 仅允许业务网段访问 2181
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.10.0.0/16 port port=2181 protocol=tcp accept'

# 2) 仅允许集群节点之间 2888/3888
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.20.0.0/16 port port=2888 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.20.0.0/16 port port=3888 protocol=tcp accept'

# 3) 仅允许堡垒机 SSH
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.30.0.10/32 port port=22 protocol=tcp accept'

# 4) 默认拒绝其他入站
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --reload

命令解释:
- --add-rich-rule:添加细粒度访问规则;source 指定允许来源网段;port 限定端口。
- --set-default-zone=drop:默认丢弃未命中的流量,确保最小暴露。

iptables 等价示例(适用于 Debian/Ubuntu):

iptables -P INPUT DROP
iptables -A INPUT -s 10.10.0.0/16 -p tcp --dport 2181 -j ACCEPT
iptables -A INPUT -s 10.20.0.0/16 -p tcp --dport 2888 -j ACCEPT
iptables -A INPUT -s 10.20.0.0/16 -p tcp --dport 3888 -j ACCEPT
iptables -A INPUT -s 10.30.0.10/32 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

跨域访问与加密通道(示例提示):
- 优先启用 TLS 加密通道,防止中间人攻击与流量嗅探。
- 固定出口 IP 与策略路由,减少不可信路径。
- 跨机房同步仅在必要场景开放,并监控链路质量与限速。

示例:验证端口开放与链路连通性(节点间 2888/3888 与客户端 2181):

# 从业务网段主机测试客户端端口
nc -zv zk-1 2181

# 从 zk-1 测试 zk-2 集群端口
nc -zv zk-2 2888
nc -zv zk-2 3888

预期效果:输出 succeeded;若失败,需检查安全组/防火墙/路由。

运维与网络设备联动最佳实践:
- 防火墙/安全组规则纳入变更审批与审计,使用配置即代码保存版本。
- 对异常扫描、端口探测与暴力连接设置告警与自动封禁策略。
- 避免与高风险服务共宿主机,降低侧信道与共享资源风险。

排错清单(快速定位):

# 1) 查看端口监听
ss -lntp | grep -E '2181|2888|3888'

# 2) 检查防火墙规则命中
firewall-cmd --list-all
iptables -L -n -v | head -n 30

# 3) 查看路由
ip route

# 4) 测试 DNS/主机名解析
getent hosts zk-1 zk-2 zk-3

常见问题与处理:
- 端口不通:检查安全组/防火墙是否放行、默认策略是否为 DROP。
- 节点间无法选举:确认 2888/3888 互通与时钟同步。
- 客户端连接失败:确认 2181 放行与业务网段白名单正确。

练习:
1) 在三台节点上配置仅允许 10.10.0.0/16 访问 2181,并验证非白名单网段访问失败。
2) 模拟误封 2888 端口,观察集群选举异常,再恢复端口并验证集群恢复。
3) 绘制你的实际网络拓扑,标注业务、管理、集群通信端口,并设计最小化规则。