全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-24 12 分钟 ✍️ juanwangdev

ZooKeeper IP白名单与ACL最佳实践

IP限制、ACL设计和审计日志。

IP白名单控制

防火墙方式

Bash
# iptables规则
iptables -A INPUT -p tcp --dport 2181 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 2181 -j DROP

# 只允许192.168.1.*网段访问

IP认证方案

Java
// 创建节点时设置IP ACL
List<ACL> acls = new ArrayList<>();
acls.add(new ACL(Perms.ALL, new Id("ip", "192.168.1.0/24")));
zk.create("/internal", data, acls, CreateMode.PERSISTENT);

四字命令白名单

properties
# zoo.cfg
4lw.commands.whitelist=stat,ruok,mntr,srvr
# 只允许这些四字命令

限制方式对比

方式限制范围说明
防火墙网络层整体访问控制
IP ACL应用层单节点访问控制
四字命令功能层命令访问控制

多层防护建议

Java
防火墙 + IP ACL + 四字命令白名单
三层防护最安全

注意:防火墙+应用层双重限制最安全。

ACL最佳实践

企业级ACL设计

Java
/admin         <- 系统管理员(super权限)
/services      <- 服务注册目录(开放读取)
/config        <- 配置目录(管理员写、应用读)
/locks         <- 分布式锁(应用临时权限)

权限分层

角色权限节点范围
admincdrwa/admin, /config
service_providercrwa/services/{service}
service_consumerr/services
apprw/config/{app}

ACL配置示例

properties
// 系统管理员节点
List<ACL> adminACL = new ArrayList<>();
adminACL.add(new ACL(Perms.ALL, new Id("digest", "admin:password")));
zk.create("/admin", null, adminACL, CreateMode.PERSISTENT);

// 服务注册节点
List<ACL> serviceACL = new ArrayList<>();
serviceACL.add(new ACL(Perms.ALL, new Id("digest", "provider:pwd")));
serviceACL.add(new ACL(Perms.READ, ZooDefs.Ids.ANYONE_ID_OPEN));
zk.create("/services/order", null, serviceACL, CreateMode.PERSISTENT);

// 配置节点
List<ACL> configACL = new ArrayList<>();
configACL.add(new ACL(Perms.ALL, new Id("digest", "admin:pwd")));
configACL.add(new ACL(Perms.READ | Perms.WRITE, new Id("digest", "app:pwd")));
zk.create("/config/app", data, configACL, CreateMode.PERSISTENT);

ACL最佳实践

实践说明
敏感节点digest配置、管理节点需认证
公开节点限制r服务列表只允许读取
分层权限不同角色不同权限范围
记录修改者数据中包含修改者信息

审计追踪

Bash
// 数据中记录修改信息
{
    "value": "config_value",
    "modified_by": "user1",
    "modified_at": "2026-05-24T10:00:00Z",
    "version": 3
}

提示:敏感节点必须设置ACL,避免world权限开放。

安全审计日志

审计日志配置

text
# zoo.cfg(3.6+版本)
audit.enable=true
audit.log.file=audit.log
audit.log.level=INFO

审计内容

操作记录项
create节点路径、数据、ACL、用户
setData节点路径、新旧数据、用户
delete节点路径、用户
getChildren节点路径、用户
setAcl节点路径、ACL、用户

日志格式示例

text
2026-05-24 10:00:00 INFO  create(path=/config/db, data={"host":"..."}, acl=[...], user=admin, ip=192.168.1.100)
2026-05-24 10:01:00 INFO  setData(path=/config/db, old={"host":"old"}, new={"host":"new"}, user=app1)

异常访问监控

text
# 检测未授权访问
grep "Authentication failed" audit.log

# 检测敏感节点访问
grep "/admin" audit.log
grep "/config" audit.log

# 检测异常操作
grep "delete" audit.log | grep "/config"

日志管理

管理说明
定期归档每周/每月归档
异地备份备份到远程存储
保留期限根据合规要求设置

注意:审计日志需定期分析,及时发现异常访问。

要点总结

  • 防火墙+IP ACL双重限制最安全
  • 企业级ACL按角色分层设计
  • 敏感节点设置digest ACL
  • 公开节点只允许读取权限
  • 数据中记录修改者便于追踪
  • audit.enable开启审计日志
  • 定期分析日志发现异常访问

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper数据不一致修复
下一篇 → ZooKeeper SASL与SSL安全配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库