Files
Muse 084afeb8f4 3x-ui 式共享节点改造:nodes 状态机 + nodeClients 各自凭据
- 移除 VMess 协议
- VLESS/SS2022 按用户流量统计(AnyTLS 日志解析,SS 节点级)
- sing-box v2ray_api stats 支持
- 内存优化:面板 128M,agent 64M,sing-box 64M
2026-10-19 22:23:40 +08:00

2.9 KiB

安全模型

信任边界

  • 控制面管理员是高权限主体,可以查看客户链接并下发配置。
  • Agent 拥有其绑定服务器的配置权限,但不能领取其他服务器任务。
  • sing-box 独立运行;控制面不承载客户数据流量。
  • 服务器 root 用户仍可读取本机凭据和流量日志,这是自托管系统无法消除的权限边界。

已实现控制

  • 管理密码和控制面侧 Agent Key 只保存 scrypt 哈希;Agent 本机用 0600 环境文件保存自己的密钥。
  • Agent Key 带 SHA-256 指纹索引,候选匹配后仍执行 scrypt 校验,避免心跳全表慢哈希。
  • 注册令牌为高熵随机值、单次使用、30 分钟到期。
  • 管理 Cookie 使用 HttpOnly、SameSite=Strict、Secure。
  • 状态变更 API 校验 CSRF Token。
  • 登录失败按来源地址限速。
  • Reality 私钥在 Agent 本机生成,不回传控制面。
  • Agent 配置采用“候选配置校验 → 原子切换 → 失败回滚”。
  • systemd 控制面启用 NoNewPrivileges、ProtectSystem=strict 和最小可写目录。
  • 日志和已完成任务按保留期自动清理。
  • Agent 重新注册会撤销该设备的所有旧密钥并重新下发期望资源。

当前限制

  • 客户协议凭据和待执行配置任务保存在权限为 0600 的控制面数据文件中,尚未做字段级静态加密。备份同样包含这些凭据。
  • 节点 IP 上限依赖 sing-box 已认证会话日志的滚动观察,并非精确的同时在线连接数;修改日志格式、关闭日志、UDP-only 流量或客户端经过同一 NAT 会影响结果。
  • 设备上限按订阅请求的 X-Device-ID、X-Client-ID 或 User-Agent 估计,只拒绝新的订阅下载。已导入的节点凭据可以继续使用,客户端也可自行更换标识;尚无每设备凭据与撤销机制。
  • 订阅令牌是高熵随机值,但控制面数据/备份中为便于管理员查看而保存明文;必须保护备份及管理员会话。重置订阅地址不会撤销客户已经导入的节点凭据。
  • IP/流量限制依赖 Agent 周期性日志与上报,不能作为瞬时硬限制;共享 NAT、动态 IP 会影响统计。需要严格设备隔离时应给每台设备发不同凭据。
  • Agent 到控制面依赖公开 CA 的 HTTPS 校验,尚未增加双向 TLS。
  • sing-box 构建产物目前随发布包分发;未来如改走 Release 下载,需校验发布包的签名或预期哈希。

部署建议

  • 控制面只允许 HTTPS,域名开启 HSTS。
  • 使用独立管理域名,不与订阅或客户流量共用。
  • 缩小服务器端口池,并仅在云安全组/防火墙中放行实际需要的 TCP/UDP 范围。
  • 定期离线保存 ng backup 生成的文件,并对备份再次加密。
  • 不要在聊天、工单或公开仓库中粘贴注册令牌、Agent Key、备份或客户链接。
  • 首次上线前在测试链路验证 sing-box 版本、Reality SNI、UDP 和回滚行为。