8.5 KiB
完整候选反代隔离验收记录
范围与结论
远程主机为 47.108.78.12,主机名 ikun2。本轮从远程时间 2026 年 9 月 18 日 01:51 开始,仅在远程执行应用和自动测试;本机用于编辑、Git 和文件传输。所有业务流程使用新建隔离实例及空数据库,不清理或复用线上业务数据,不删除历史证据,不暂停线上服务。
- [✓] 完整候选六个 Linux 可执行文件上传后逐一校验长度、SHA-256、ELF64 和 x86_64 标识。
- [✓] 真实独立 Nginx 反代到 HTTPS 8002,HTTP 8001 初始化和运行端口通过;通过正式配置 API 设置公网 HTTPS 443 和可信代理范围。
- [✓] 公网 80 及应用 8001 跳转均保留路径和查询参数,不携带内部 8002;匿名恢复入口、页面登录地址和实际生产入口脚本可用。
- [✓] 两个真实连接来源分别验证登录限流;被限制来源伪造转发头仍被拒绝,另一来源能够正常登录。
- [✓] 空库首次安装、登录会话、SMTP/IMAP/POP3 认证、内部 25 STARTTLS 中文正文及附件收信、混合认证过载后的恢复通过;双库完整性正常,线上不存在测试邮件。
- [✓] 测试进程与线上独立网络、挂载隔离;最终反代测试四个线上服务 PID、InvocationID 和重启计数前后一致,没有新增内核 OOM。
- [✓] 6 项测试收尾模拟回归通过,覆盖资源查询超时、停止及强制终止失败后继续处理其余测试单元、拒绝业务服务名。
- [!] 最新应用尚未替换线上版本。这是隔离候选验收,不是正式部署、真实浏览器闭环、可信 CA 正式换证或整体生产放行。
候选组成
应用源码为 c1dd533c805cbfda7a366a1170d2e710f04f86a1,版本 review-c1dd533。本轮验收工具修改前提交并推送中文基线 1d4b9c4,该基线不改变应用源码。
主前端采用上一轮远程生产构建,详见《远程前端构建验收记录》。Telegram 界面也由同一版本归档源码远程构建,其 16 个输入文件已在前序构建阶段核对。依赖安装日志位于 /var/tmp/smail-review-telegram-build-20260918/deps-0140.txt,最终构建日志为 build-0143.txt;实际 Node 路径修正后 vue-tsc --build、Vite 均通过,构建峰值约 395 MiB、交换空间为零。首次私有临时目录造成的启动失败日志保留。
Linux 候选由干净源码归档、上述新界面产物及重新编译的三个插件组成,主程序使用 bundled 标签;前序交叉编译使用 Go 1.26.6、CGO_ENABLED=0、GOOS=linux、GOARCH=amd64、-mod=readonly -trimpath。本轮未再次编译或更改应用源码。
本机产物位于 out/release-review-c1dd533-linux-amd64,远程位于 root 所有的 0700 目录 /var/tmp/smail-review-candidate-c1dd533。receipt.json 记录六个文件的长度和摘要。
| 项目 | SHA-256 |
|---|---|
| 主程序 | b2ceda68f26e3753be7124d11ce5bc06e309a119dd13ef7254bf403c3e0a4792 |
| 管理工具 | 2a99f6bef10092b72d550e195141a572ec02fae541fb3615d3b529bd15a193eb |
| 配置迁移工具 | b2016a293798c82190f7334b623237b3f460816e67ae9bdb2d592ea6a4ef8c55 |
| 主前端归档 | 91f775c666e01a24e47b7ac35132ac171a087aac9641c5bffb3456113d311f01 |
| Telegram 界面归档 | 07f05f902dbe58c7e49d757b53c3f47c4a6c1442ffd4cc7c83db56af03d061de |
首次管理工具版本断言将额外的根目录输出误判为版本不匹配,在运行业务测试前退出;随后按实际版本输出行核对为 review-c1dd533。主程序没有被当作支持 --version 的命令直接在宿主环境启动。
反代验收方式
test/tools/runtime_review.py 新增可选 --nginx-template,保持原有直连默认路径。runtime_proxy.py 仅替换部署模板中的测试域名和证书、临时文件路径;保留 proxy_pass https://127.0.0.1:8002、上游证书校验、SNI 和覆盖客户端转发头的配置。模板摘要为 bf6816c38f9c639ab17fd7344fff4b06afc5a2388f74318e18c60b8b3311ebd8。
证书由隔离测试创建,仅供当前客户端及测试 Nginx 信任,不写入宿主信任库,不复制正式私钥。公网端口指隔离网络中的 80/443,不对实际互联网开放。应用、探针、Nginx 的内存硬上限分别为 128/48/32 MiB,交换空间均禁止;反代预检至少要求 320 MiB 可用内存,不通过时拒绝执行。
先在 8001 完成正常初始化,再通过真实反代登录、读取配置代次、验证及保存候选、显式应用配置。publicHttpsPort 设置为 443,trustedProxyCidrs 仅为 127.0.0.1/32,没有直接改写测试数据库或配置文件来绕过正式流程。
来源测试从 127.0.0.2 连续发送十次错误密码,使账号与 IP 组合限流生效;该来源改用正确密码并伪造 X-Forwarded-For、X-Real-IP 仍被拒绝。随后从 127.0.0.3 使用正确密码登录成功。该验证覆盖当前单代理拓扑,不等同于任意多层代理、防火墙或公网攻击容量验收。
恢复页以匿名连接访问,验证 /public-password-recovery 跳转至 /rest/、页面 no-store、注入登录地址为 https://mail.runtime.invalid/#/login,并解析 HTML 后实际读取生产脚本入口。没有执行浏览器 JavaScript、恢复邮件送达或密码重置,不能据此宣称恢复业务闭环完成。
运行证据与失败记录
/var/tmp/smail-review-runtime-20260918-015323:修改工具前的完整候选直连基线通过,探针 24.91 秒,应用峰值 77,230,080 字节。/var/tmp/smail-review-runtime-20260918-020045:首次反代失败。生成配置为 root 组且权限 0640,受限 Nginx 无法读取;记录保留,线上不变,测试进程已停止。/var/tmp/smail-review-runtime-20260918-020252:修复为 root 所有、smail 组的 0640 后反代通过,探针 39.28 秒。/var/tmp/smail-review-runtime-20260918-020719:补齐恢复页和收尾逻辑后的反代验收通过,探针 40.32 秒,应用峰值 77,225,984 字节,Nginx 峰值 3,612,672 字节,两者交换空间为零。/var/tmp/smail-review-runtime-20260918-020823:最新工具的默认直连回归通过,探针 25.59 秒,应用峰值 77,254,656 字节,交换空间为零;证明可选反代模式未破坏原直连流程。
每个运行目录保留 result.json、probe-result.json、probe.log、service.log,失败目录也保留。最终结果中的 resource_errors、cleanup_errors 均为空,live_message_absent、live_unchanged 为真,两库 integrity_check 均为 ok。停止操作只接受工具生成的单元名,查询异常仍执行收尾;这些措施不代替未来宿主掉电等完整故障演练。
收尾模拟单元 smail-runtime-cleanup-tests-20260918-0206b 六项通过,峰值 14.9 MiB、交换空间为零。首次 0206 因 PrivateTmp 隐藏工具目录而没有执行测试;第二次仅增加指定工具目录的只读挂载,继续保留生产目录不可访问和独立网络限制。模拟用例不调用真实停止命令。
02:16 在相同限制下补跑六项模拟回归,全部通过,单元 smail-runtime-cleanup-tests-20260918-021606 运行 406 毫秒、峰值 15.1 MiB、交换空间为零。持久日志为 /var/tmp/smail-review-proxy-c1dd533/cleanup-tests-20260918-021606.txt。模拟单元以 root 执行,不宣称其为非特权用户回归。
02:15 远程收尾复核:四个线上服务仍 active,主进程及 InvocationID 与测试前一致;Nginx 配置检查、MySQL 就绪探测通过,Smail 与 Scert 的系统信任 HTTPS 页面均返回 200。本轮测试无运行中单元,历史失败单元记录继续保留。四个远程验收工具与本机 SHA-256 逐一一致。此时专用 DNS 配置仍不存在,旧续期 timer 为 active,未把候选脚本当作已经上线。
后续门槛
- 对线上部署建立可回退备份,部署候选并复核真实公网配置和传输入口。
- 真实桌面浏览器首次安装、登录、网页提交邮件、最终队列状态和实际收件结果。
- 受保护本地 IPC 管理员恢复及旧会话、协议凭据撤销,凭据轮换与访问审计。
- 队列与数据库故障、目标数据库兼容性、竞态、容量和异机恢复。
- [!] 01:51 只读复核时专用 DNS 配置仍缺失、旧续期 timer 仍启用;全新 DNS 挑战、正式新证书发布及外部告警仍未验收。不得将本轮隔离证书当作可信证书自动续期完成。
维持整体结论:不满足生产放行。以上通过项是完整目标中的增量证据,不缩减原发布验收范围。