v1.4.1
Web 运维控制台 & 安全加固 & 单向 TLS
距 v1.4.0 约 13 天,跨 45 次提交。本版本把 Web 远程管理从「单机远控」扩展为「多设备运维控制台」:MFC 与 Go 主控同步上线屏幕墙、安全审计日志与查询页(Go 端另加离线设备历史与远程卸载),设备端口新增可选单向 TLS;同时完成每 IP 限流、入站缓冲上限、子连接源 IP 绑定与 ConnAuth HMAC 校验等公网暴露面加固。
Web 屏幕墙(MFC + Go)
- 多设备同屏监控:Web UI 新增第三种视图「屏幕墙」,同一标签页以 1×1 / 2×2 / 3×3 / 4×4 / 5×5 布局同时观看多台设备,左侧为可搜索的设备侧边栏
- 监控与控制分离:墙上的 tile 仅监控,点击 tile 放大到单画面页控制,Back 返回;同一设备可重复添加并共享一个解码器与一路流
- 解码预算:桌面最多 9 路、触控 4 路实时解码;超出预算的 tile 保留末帧并显示 Paused,有实时 tile 释放后自动晋升
- 快速出图:服务端缓存每台设备的 raw IDR,在 connect 与新增
keyframe命令时立即回放,再让客户端强制新 IDR;旧客户端忽略命令时最坏等一个自然 GOP - 服务端协议:
watch_device_id改为 watch 集合(每连接上限 32 台),输入命令按集合解析id,多设备且无id时丢弃,避免跨设备输入注入;新增caps.multiWatch/caps.keyframeRequest能力协商,旧前端 / 旧服务端自动降级
安全审计日志
- 双服务端一致:登录尝试、授权拒绝、WebSocket 生命周期、屏幕 / 终端会话、剪贴板操作(仅字节数)、设备认证与管理变更写入审计事件;Go 端落盘
logs/audit.log,MFC 端保留最近 1000 条内存环形缓冲 - Web 查询页:管理员可按时间、事件、操作者、IP、设备、关键字、仅告警过滤并分页;仅在服务端广告
caps.auditLog时显示,旧服务端优雅降级 - 脱敏与有界查询:记录不含密码、哈希、Token 或剪贴板内容;单次查询最多扫描当前文件最新 32 MB,查询本身也记入审计
- 真实客户端 IP:反向代理后的 Web 请求从升级请求解析真实地址,
X-Forwarded-For优先且只信任 loopback peer 的转发头,审计与登录限流不再记录代理的127.0.0.1
离线设备历史(Go)
- 持久化:所有登录过的设备写入
devices.json(默认最多 1000 条,原子写 + fsync + rename,重连突发 500ms 去抖) - 列表合并:服务端广告
offlineDevices,设备列表可按需显示离线记录(卡片变暗虚线),屏幕墙侧边栏始终列出离线设备 - 删除与远程卸载:管理员可删除离线记录;删除在线设备会先下发
TOKEN_UNINSTALL再移除记录,客户端断开后走既有清理路径
单向 TLS 传输
- 同端口兼容:设备端口按首字节嗅探 TLS ClientHello,TLS 1.2 客户端加密、旧明文客户端不受影响;证书加载失败时 Go 端启动失败而不是静默回退明文
- 客户端严格 pin:Windows 客户端对主连接与所有子连接完成 TLS 握手,并以
hExclusiveRoot严格 pin 到注册表 / 配置文件中的信任锚;握手或证书失败 fail-closed - 运行时配置与远程开关:MFC「扩展 > TLS证书」即时配置证书 / 私钥;在线列表新增 TLS 列,右键可远程启用 / 取消客户端 TLS(证书写入客户端注册表,下次启动生效)
Web 远程桌面增强
- 剪贴板双向同步:Ctrl+C / Ctrl+X / Ctrl+V 复用原生剪贴板协议,本地→远端与远端→本地均可用,客户端无需改动
- 手机 IME 输入框:「I」按钮打开固定在虚拟键盘上方的输入框,文本经剪贴板桥注入;空框时 Enter / Backspace 转发为远端按键
- 跨标签页会话:登录 Token 与角色改用
localStorage,新标签页自动恢复;管理员可通过/sso从父门户免二次登录(仅admin角色)
客户端安装位置选择
BuildDlg 新增「安装目录」下拉框:ProgramData(默认)/ ProgramFiles - Admin / SystemRoot - Admin / APPDATA / LOCALAPPDATA,选择经登录信息传给客户端。
安全加固
- 每 IP 限流:设备端口按源 IP 限制并发连接(默认 256)与 accept 速率(默认 120/分钟),
TOKEN_AUTH同样节流;超限在分配缓冲前拒绝 - 入站缓冲上限:单连接未解析字节超过
MaxBufferedBytes(默认 50 MiB + 64 KiB)即断开,0表示不限制 - 子连接源 IP 绑定:屏幕 / 终端子连接必须与设备主连接同源 IP,阻止冒用
MasterID劫持画面或 shell - ConnAuth HMAC:设置
YAMA_CONN_AUTH_KEY后校验子连接签名与时间戳,密钥只从环境读取
其他改进与修复
- 克隆机 ID:V2
client_id折叠主机名,撞 ID 时服务端下发COMMAND_REGEN_CLIENT_ID让客户端重算重连 - 传输体验:文件传输速度改由 MasterSettings 下发(修复单次点击弹出两个远程桌面窗口),传输对话框标题实时显示速度
- 非中文系统:对话框 / 进程列表 / 文件列表 / 路径 / 地理位置 / 主机管理 / 剪贴板统一按 GBK / UTF-8 解码
- 其他:共享 / 转移主机后重启主控不重连、已过期授权续期日期、V2 上传
%USERPROFILE%未展开、无摄像头主机发送 0×0 画面、列切换残影、Go 设备端口日志刷屏、审计页最小化后跳回设备页等
升级提示
- Web 功能依赖新版服务端:屏幕墙、审计日志页、离线设备历史需要新版服务端(MFC 重编嵌入新
index.html;Go 更新二进制);旧服务端不广告对应caps,前端自动隐藏入口 - 屏幕墙恢复:旧客户端忽略关键帧命令,暂停 / 恢复最多等待一个自然 GOP(约 4–15 秒);升级客户端后立即出图
- TLS:服务端需配置证书与私钥;客户端信任锚可远程下发,但需重启客户端生效;握手失败不会回退明文
- 离线设备历史:仅 Go 主控提供
- SSO:仅 Go Web,需设置
YAMA_SSO_JWT_SECRET,只桥接admin角色 - 克隆机 ID:新装客户端自动使用新算法;已部署的克隆机需清除
settings/client_id后重启才会重算