39 KiB
生产整改验收清单
Telegram 代理链路续验(2026 年 10 月 3 日 20:47)
本节补充下方三库记录并更新当前构建状态。后台仍为 web.cdis.cn,未重复清库,也未修改同机其他服务。
- [✓] 已确认旧实现的回调检查忽略代理设置,且推送插件拒绝非空代理。修复提交
857491c已推送,并于 20:43:35 仅重启 Smail 部署。 - Telegram 主进程和沙箱出站使用同一套本机 HTTP 代理校验;仅允许回环 IP 和显式端口,仍限制目标为 Telegram HTTPS 接口,保留 TLS 验证及插件网络隔离。
- 补充代理地址、跨目标请求与重定向、沙箱通道、代理拒绝和配置失效相关回归源码;主程序及插件构建成功,相关测试包仅编译,未执行自动化验收。
- [✓] 运行主程序摘要与上传产物一致,Smail 与 Nginx 为 active,刷新后台后已有 SQLite 邮件仍显示。
- [!] 浏览器点击检查回调仍显示无法连接 Telegram,未配置新回调、未取得个人绑定或真实送达证据。不能将代码修复或代理监听当作推送通过。
- [!] 进一步细化脱敏网络诊断的补丁被工具策略拒绝,未写入;当前失败阶段尚未明确。没有修改代理服务或放宽安全边界。
- 微信新库配置、外部邮箱真人验证、附件、邮件客户端协议、证书和正式发布收尾仍待完成;25 端口豁免规则及三库核心业务结论保持不变。
三库与安全码恢复续验(2026 年 10 月 3 日 20:24)
本节优先于以下历史状态。当前后台为 web.cdis.cn,邮件域名为 cdis.cn,运行目录为 /opt/smail。三库记录根据同一线程已完成的云端浏览器验收补录;20:08 起的恢复修复和浏览器复测为本段直接执行记录。当前为连续验收,不重复清库,不继承旧部署验收结论。
- [✓] SQLite、MySQL、PostgreSQL 已分别完成全新向导初始化、三角色登录、超管向管理员及普通用户发信、两角色读取中文正文并回复、仅重启 Smail 后复核持久化。每个实例仅使用一种业务数据库;此项不代表三库全部功能通过。
- [✓] 管理员安全码独立恢复缺口已修复并部署,代码提交
c47155d。未验证外部邮箱时,可用安全码完成身份验证和重置;旧网页会话刷新后退出,新密码登录成功;旧批次未使用安全码被拒绝。 - [✓] 管理员密码已恢复为约定测试值,重新生成安全码后退出并登录,不再出现强制补充另一种恢复方式的提醒。超级管理员公网找回仍被阻止。
- 已补充管理员、普通用户、超级管理员边界及核销、失败次数、重置后撤销的回归源码,并完成编译检查;未执行自动化用例,不计为业务验收通过。
- 安全码桌面三行四列布局已在管理员和普通用户原失败窗口宽度复测;其他桌面尺寸与移动端不包含在本结论中。
- [!] 25 端口按用户许可可不测或失败后跳过,不计通过、不阻断本次验收。465、587、993、995 不在豁免范围,监听状态不是协议验收。
- [!] 附件上传、发送及下载尚未闭环;MCP 文件访问限制不等于应用上传失败。需用户通过正常文件选择操作协助,不用脚本或接口绕过。
- 新库外部安全邮箱真实收件绑定、微信与 Telegram 初始化及实际送达、客户端协议及凭据撤销、证书续期应用、最终发布打包和遗留清理仍待完成。
整体验收尚未完成。当前云端为 review-20261003-c47155d 验收构建,不是正式发布放行。
插件升级与规则续验状态(2026 年 9 月 30 日 22:55)
本节优先于以下历史记录。当前运行 ceacd99-audit,保持现有 MySQL 单库数据;不是清库首次安装验收。详细摘要、备份及浏览器证据见《云端全项目测试报告》顶部。
- 隔离插件受控出站实现已提交、推送和部署;保留独立网络、chroot 与非 root 身份,通过本地 socket 按插件权限限制出站。回归用例仅补充源码,未执行自动化测试,完整出站安全边界待复验。
- [✓] 22:37:28 仅重启 Smail 完成升级;22:50:24 Smail 与 Nginx 均为运行中,主进程
1771758、自动重启0,未操作其他项目。 - [✓] 微信子进程降权、独立网络命名空间、出站 socket 权限及 NoNewPrivs 已核实;这不是消息推送送达证据。
- [✓] 管理员个人规则精确匹配后移入广告箱、超管副本不受影响、非匹配主题保留收件箱、删除测试规则后相同主题不再移动均完成浏览器实测;相关正文均已读取。本轮仅清理该测试规则,保留邮件。
- 22:35 Smail 单库及部署文件备份完成,退出状态和 SQL 完成标记已检查;未进行同一时点备份恢复演练。
- [!] Telegram 运行配置应用失败和页面连接失败仍存在;无凭据 TLS 连接诊断超时,尚未明确根因。微信真人扫码、附件人工上传与外部邮箱协作仍待完成。
- 混合投递列表状态、通知凭据协议隔离与轮换、图形协议客户端、完整恢复、三种数据库选项和迁移、清库首次安装、干净可复现发布、证书续期及容量验收仍有未完成项。
全项目验收仍未完成,不以本次编译、服务运行或收信规则专项通过作为发布批准。
接续验收状态(2026 年 9 月 30 日 22:15)
本节优先于以下历史状态;保持现有运行版本和数据库,本轮未部署代码、未重启服务。详细证据见《云端全项目测试报告》顶部。
- [✓] 管理员修改为临时密码及改回指定测试密码,两次均自动进入正确登录页且新密码成功登录;普通用户与管理员改密跳转实机复测已完成。
- [!] 超管改密需已验证外部安全邮箱,当前缺少该前提,尚未完成实机跳转复测,不绕过验证。
- 管理员改密后旧密保问题为空、页面提示需重新设置安全码;最终密码及角色恢复,旧凭据的逐项撤销仍需验证。
- 超管本人微信绑定经密码确认后可以显示二维码,已取消弹窗;真人扫码、绑定及通知送达未通过验收。
- [!] 已核实 Linux 插件隔离与直接出站实现不匹配:独立网络命名空间、无路由条目、无沙箱 DNS/CA 目录,而客户端直接 DNS/TCP;需补全受控出站通道,不能取消安全隔离。
- [!] Telegram 主进程检查回调显示无法连接,另需定位网络失败阶段;不能与插件隔离缺口混同。代理输入与插件拒绝非空代理的行为也需统一。
- [!] 附件草稿仍无附件且未发送,附件收发验收尚未完成。
- [✓] Smail 与 Nginx 持续运行,主进程及自动重启次数未变化,其他项目未操作。
最新修复部署状态(2026 年 9 月 30 日 22:00)
全项目仍未完成验收。本节优先于以下旧记录;本次为保留数据的增量部署与复测,不是清库首次安装。详细证据见《云端全项目测试报告》顶部。
- [✓] 修复改密后跳往
/login的 404,源码提交3155353已推送并编译部署;普通用户两次改密均自动进入正确登录页,新密码和恢复后的指定测试密码均成功登录。 - 已补充三角色跳转及身份清理回归断言,未运行辅助测试脚本;管理员和超管分支仍需各自实机复测。
- [✓] 安全码重新生成后旧批次被拒、新批次可验证;成功验证的码在新流程重复使用被拒,另一未使用码可继续验证并完成密码重置。
- [✓] 重置后指定密码登录成功,安全设置显示无有效离线恢复码;不将页面状态视为所有旧码、恢复票据和协议凭据的直接撤销验证。
- 部署文件及原主程序、配套工具已备份;沿用 21:31 数据库检查点。尚未完成文件与数据库同一时点备份及恢复演练。
- [✓] 21:50:48 仅重启 Smail 完成升级;22:00 服务运行中,主进程
1768882、自动重启0,Nginx 运行中。上传与运行主程序摘要和本机一致。 - 当前产物已记录源码版本与摘要,但仍含
vcs.modified=true;干净源码可复现发布、清库首次安装和三种数据库部署选项尚未闭环。 - [!] Telegram 启动配置失败仍存在;微信真人扫码、附件人工上传及外部邮箱协作仍需继续。
- 完整账户恢复与凭据撤销、外部收发、图形协议客户端、备份恢复、证书续期和容量验收保持未完成。
最新续验状态(2026 年 9 月 30 日 21:28)
整体验收仍未完成,不能标记可发布。详细证据与限制见《云端全项目测试报告》顶部的同日续验章节。以下旧章节不应覆盖本节结论。
- [✓] 当前入口为
web.apmmk.cn,邮件域为apmmk.cn;不再使用属于其他项目的solit.cn。 - [✓] 三角色站内邮件收发阅读回复、草稿主送抄送密送、多组管理员与降级旧会话失效、逐账号通知授权及密码查看、安全码查看保护,已取得本轮浏览器证据。
- [✓] 混合投递中本站账户实际收到,无效域名失败,详情计数准确;邮件搜索、广告箱移动与恢复通过。
- 部分成功的发件列表状态需优化;附件上传受 MCP 工作区权限阻塞,尚未验收附件收发。
- 当前为 MySQL 单库配置及连接证据,并非仍运行两个 SQLite;三个数据库选项与迁移、备份恢复仍需完整验证。
- 当前部署产物含未提交修改标记,需补齐产物对应关系;主进程按设计使用 root 创建插件隔离,不应直接降权。微信插件实机降权和网络隔离已核实,主进程权限范围及全部插件安全路径仍待复核。
- 21:31 完成受保护的 Smail 单库备份,使用指定数据库凭据成功,退出状态与摘要检查通过;未执行恢复,不能标记恢复演练通过。
- 外部邮件往返、协议客户端、通知发信隔离与轮换、微信及 Telegram、完整找回、证书续期、容量和最新构建首次安装流程仍有未验收项。
本轮为连续验收,没有重置数据库或重新部署,不能表述成完成最新构建的清库生产全流程。
以下为历史验收状态
当前验收结论(2026 年 9 月 27 日)
整体部署验收尚未完成,不予标记为可发布。以下为当前版本的浏览器增量验收;后面的历史脚本、接口及双库记录不作为本轮放行证据。
验收范围与运行版本
- 邮件主域名为
solit.cn,后台为web.solit.cn;测试配置不是产品固定值,也不是验收标准本身。 - 运行目录为
/opt/smail。本轮服务只读检查为运行中,主进程为1313919,重启计数为0;未停止、部署或清理服务,未操作同机其他项目。 - 本轮源码检查点为
ed6ec16,包含通知凭据状态同步修复6a801c1;云端主程序摘要为946849b29194568104cc9542df37cfb79bc0683ee0c052891e99659d800fce4b。 - 本轮为既有多账号、旧会话回归的续测,不清库重建。下一轮完整首次安装验收仍需按已授权范围清理 Smail 环境、部署最新构建并清理浏览器缓存。
- 业务操作仅通过浏览器点击、输入和页面导航完成;没有直接请求接口、执行页面脚本、命令行协议测试或辅助测试脚本。交互式 SSH 仅检查 Smail 服务与主程序摘要。
- 状态含义:
[ ]未开始;[~]进行中;[x]已完成,等待复审;[✓]仅所述范围复审通过;[!]缺陷或存在阻塞。
当前已获得的浏览器证据
- [✓] 客户端配置区的 IMAP、POP3、SMTP 三卡并排,协议名与收发信服务两行显示;服务器、端口和加密方式在当前桌面宽度下各占一行。此项仅证明布局,不证明协议连通性。
- [✓] 通知授权被管理员关闭后,普通用户保留的旧凭据验证框提交本人密码,页面自动转为未开启并隐藏验证框和明文入口,无需刷新;错误密码不展示凭据。此项不证明 SMTP 实投或真实限流。
- [✓] 多分组管理员降为普通用户时,保留两个分组会被明确阻止;选择乙组后可保存。旧管理员会话继续保存组内用户资料时被要求重新登录,原资料未被修改。
- [✓] 02:21 起恢复验收基线:将
auditadmin从普通用户设为管理员,分组管理立即使用多选框;同时选择甲、乙两组,确认当前超管密码后保存。原普通用户会话在下一次操作时失效。 - [✓]
auditadmin重新登录显示管理员;用户管理仅显示甲、乙两组,展开后两组都有本人,甲组还能管理auditmember;未显示默认组、超管和auditoutside。 - [✓] 中文草稿保存并从草稿箱重新打开后,收件人、主题、正文保留。邮件标识
20260927-0224从管理员发给超管,发件箱显示发送成功,超管收件箱实际收到并打开核对内容。 - [✓] 新建反向邮件
20260927-0230从超管发给管理员,管理员收件箱实际收到并打开核对中文正文和地址。此项是新邮件反向投递,不是回复功能验收。 - [✓] 将上述反向邮件从详情页删除,邮件进入已删除列表;选中后移动到收件箱,原主题和正文预览重新出现。没有永久删除邮件或触碰其他邮件。
- [✓] 投递到
auditfailure@example.invalid的测试邮件20260927-0235先显示已提交,随后发件箱显示发送失败。点击查看详情显示已接收零、失败一及收件域名解析失败,未误报送达。
本轮发现与待整改事项
- [!] 邮件详情页没有回复入口,源码也没有对应操作;不能以反向新建邮件替代回复验收。下一步补齐入口与收件人、主题、引用内容衔接,再部署后通过浏览器复核。
- [~] 发给不存在本站账号的邮件
20260927-0232被超管接收,发件箱显示成功。源码存在未知收件人按策略转交超管的逻辑;此例不属于投递失败。仍需核对该策略的配置可见性、产品预期和普通用户隔离边界,不应擅自改变收件策略。 - 外部邮件往返、附件完整性、抄送与密送、回复流程、混合收件人部分失败、重试和重启后的队列一致性尚未取得当前版本的完整浏览器验收证据。
仍须完成的发布门槛
- SQLite、MySQL、PostgreSQL 三种部署选项必须每次仅使用一个所选数据库;分别验证首次安装、重启、迁移、数据完整性及不生成第二业务库。发现单个 SQLite 文件不等于三种选项全部通过。
- 通知服务按账号授权,管理员只能管理所属分组;普通用户不能自行开启,但获授权后可验证本人密码查看本人凭据。继续覆盖越权、授权撤销、改组和重置凭据后的访问回收。
- 通过允许的交互式用户界面验证通知 SMTP 实际投递、配额、旧连接失效,以及通知凭据不能用于 IMAP、POP3 和网页登录。设置页面保存成功不等于协议验收完成。
- 根域名与泛域名证书覆盖、邮件 DNS 记录、真实公网协议连通性、自动续期及无停机维护仍须逐项保留当前证据。
- 当前发布流程旧静态资源清理、最新构建部署、升级与回滚、容量和恢复验证仍未闭环;不得以旧发布包或历史测试放行。
- 超管保护性本机 IPC 恢复、真实安全凭据撤销、外部安全邮箱及其他原发布门槛保持未完成,按后文原清单继续复核。
当前测试基线:auditadmin 已恢复管理员并属于甲、乙两组;auditmember 属于甲组,auditoutside 属于默认组。通知授权关闭,限额配置保留;本轮测试邮件继续保留为验收证据。账号密码、通知明文凭据和服务器密码不得写入本文件。
历史记录(以下不作为当前版本验收结论)
以下保留原阶段记录。章节中的当前、线上、候选、双库、接口或脚本通过等表述,仅指该记录发生时的版本与方法;与本轮单数据库要求、浏览器键鼠验收和运行状态不一致时,以本节以上的当前清单及后续实测为准。
当前进展:管理员恢复事务通过,线上跳转严格验收失败
- [✓] 2026 年 9 月 18 日恢复服务 24 项、协议凭据 8 项远程隔离回归通过,零失败、零跳过;真实 SQLite 和 Unix Socket 覆盖重置提交、四阶段撤销回滚及目标歧义拒绝。
- [✓] 02:48:57 测试单元正常退出,峰值 78.1 MiB、交换空间为零;终态、二进制摘要、双库完整性和线上服务收尾核对完成。
- [✓] 修复传输检查只记录而不拒绝 8001 内部端口跳转的验收缺口,六项远程隔离回归通过;严格检查保留失败明细并以非零退出码拒绝放行。
- [!] 03:00 严格线上验证明确失败:8001 仍跳向内部 8002。七个 TLS/STARTTLS 入口通过不等于公网配置通过,完整候选尚未正式部署。
- [!] 正式管理员恢复命令、浏览器会话退出、真实协议连接撤销、无停机续期和其他原发布门槛仍未完成,整体生产放行继续不通过。
详见《管理员恢复事务验收记录》和《反代跳转验收整改记录》。下方阶段记录保留历史结论,不得将旧检查器的 passed 当作严格跳转验收通过。
当前进展:无停机 HTTP 备用方案真实挑战受阻
- [✓] 候选支持显式 HTTP Webroot,不抢占端口、不停止 Nginx;41 项远程隔离回归通过,保留默认 DNS 及校验、回退机制。
- [✓] 02:25 全新测试账号挑战失败期间,两站点 138 次 HTTPS 探测通过,四个线上服务进程、正式文件和旧续期任务均未变化。
- [!] CA 对五域名 HTTP 挑战均报告 403,但对应 Nginx 日志为 200,公网差异仍待定位,不能启用 HTTP 模式。DNS 专用授权仍缺失,线上无停机自动续期尚未落地,整体生产放行仍不通过。
详见《HTTP无停机续期验收记录》。以下各阶段结论仅覆盖各自验证范围。
当前进展:完整候选反代隔离运行通过
- [✓] 2026 年 9 月 18 日,
review-c1dd533完整 Linux 候选六文件上传至 47 服务器,长度、摘要、ELF 格式核对通过;主前端和 Telegram 界面均使用新生产构建。 - [✓] 02:07:19 开始的新空实例通过真实独立 Nginx 反代验收,应用 8001/8002、公网 443、可信代理配置均通过正式 API 生效;HTTP 跳转和恢复页登录地址不再继承内部 8002。
- [✓] 两个真实来源的登录限流相互隔离,伪造转发头不能绕过已触发的限制;首次安装、三协议认证、内部 25 中文附件收信、过载恢复、双库完整性通过。
- [✓] 线上四个服务进程及 InvocationID 不变,线上无测试邮件,未停止业务服务,未发生新增 OOM;6 项测试收尾异常模拟回归通过。
- [✓] 最新工具默认直连回归通过;02:15 两站点可信 HTTPS、MySQL 就绪和服务状态收尾通过,02:16 六项收尾回归补齐持久日志,四个工具的本机及远程摘要一致。
- [!] 候选尚未替换线上版本,浏览器业务闭环、真实恢复邮件、管理员恢复撤销、DNS 自动续期、容量与灾难恢复等门槛继续未完成。隔离通过不等于线上配置已经整改生效。
详见《完整候选反代隔离验收记录》。下方较早章节保留历史阶段状态,当前增量结论以上方为准。
当前进展:远程生产前端构建完成
- [✓] 2026 年 9 月 18 日 01:30,完整锁定依赖下远程前端回归 24 个文件、185 项通过,零失败、零跳过。
- [✓] 修复维护窗口停止构建超时会跳过服务恢复的问题,11 项隔离回归通过;保留 128 MiB 系统预算,受限前端生产构建成功。
- [✓] 01:31:26 至 01:32:07 授权窗口内仅暂停 MySQL、Scert,构建峰值 758.5 MiB,交换空间为零。两服务已恢复,数据库就绪、两站点可信 HTTPS 页面均通过;Smail、Nginx 主进程未变。
- 新前端产物与源码及嵌入目录核对完成,待完整 Linux 候选构建、隔离首次安装及正式部署复审。
- [!] 尚未替换线上应用或续期任务。公网端口、可信代理的线上验收及其他生产门槛继续未完成,不能以构建成功代替放行。详情见《远程前端构建验收记录》。
当前候选:可信代理客户端地址整改
- [✓] 可信代理地址解析候选及真实隔离 Nginx 双来源验证通过,默认不信任任何代理;登录限流和安全验证共用解析,原始连接地址不变。
- [✓] 控制器 85 项、HTTP 层 65 项完整远程回归通过,另有 1 项浏览器夹具跳过;详情见《可信代理地址整改记录》。候选尚未构建为正式应用或部署,不能将线上代理 IP 问题标为验收完成。
- [!] 公网恢复地址仍继承内部 8002,浏览器业务流程、管理员恢复撤销及其他生产门槛保持未完成。
当前状态:远程主机 2026 年 9 月 18 日凌晨无停机续期整改
- [✓] Nginx 已迁移到已发布证书目录,不再直接读取 ACME 签发产物;Smail 8001/8002 和其他站点配置未修改。
- [✓] 28 项远程隔离回归通过,含真实独立 Nginx 换证、重载、回退后的 TLS 指纹检查和原子配置权限回归;候选文件与远程测试文件摘要一致。
- [✓] 线上平滑重载期间两个站点 58 次 HTTPS 探测成功,已有连接完整下载 312,377 字节,Nginx 与 Smail 主进程未重启;七个 TLS/STARTTLS 入口复测通过。
- [✓] DNS 候选脚本在真实未到期状态校验通过,但没有签发新证书或替换自动任务。
- [✓] 00:34 恢复迁移中被 umask 收紧的 Smail 配置权限为原 0644,内容摘要不变;远程语法检查、八个保护文件及七个 TLS/STARTTLS 入口收尾复核通过,未重启服务。
- [!] Smail 专用 DNS 授权、全新 DNS 挑战、正式新证书发布、外部告警尚未验收;线上续期脚本和定时任务仍为旧版本,不能宣称无停机自动续期已启用。
- [!] 实时配置显示 Scert 已按域名共享 443,旧记录中的 8003/8004 不再是当前入口。其他生产门槛继续有效,整体结论仍为“不满足生产放行”。
本轮无业务数据写入,不清库、不重编译应用、不替代首次安装和浏览器业务验收。详情及失败记录见《无停机续期整改记录》。
历史状态:2026 年 9 月 17 日晚间复测
本节与《晚间验收复测记录》保留当时状态;当前以顶部较新章节为准,不应把早期 SSH 失败、自签名或单次资源失败当作当前结论。已部署程序仍为 review-2263779,本轮没有编译或替换应用。
- [✓] SSH 可用;8001/8002 与 Nginx 反代、正式可信证书、七个 TLS/STARTTLS 入口复测通过。
- [✓] 六项远程隔离续期回归通过;备份摘要、证书有效期与关键文件权限复核通过。
- [✓] 原 128 MiB 保留预算的资源预检五分钟共 11 次采样通过,同一进程、无 OOM;不代表持续负载或生产容量验收,PROD-013 整体仍待完成。
- [✓] 用户授权测试维护窗口后,128 MiB 限额内真实测试环境续期及 systemd 超时自动恢复通过,Smail 与 Scert 网页入口均恢复。详见《续期维护窗口演练记录》。
- [!] Nginx 仍同时承载 Scert 8003/8004;全新挑战、正式换证、外部告警及长期共用维护窗口尚未完成验收或确认,不能把单次测试停机授权扩大为长期运维批准。
- [!] 代理客户端 IP、公网恢复端口、远程浏览器业务闭环、管理员恢复撤销、凭据轮换、故障恢复、续期告警、容量与异机恢复仍待验收。
结论:维持“不满足整体生产放行”。本轮为无业务写入的部署复测,不冒充清库、最新构建或浏览器首次安装验收。
历史复核:2026 年 9 月 17 日 22:02 主机清理
本节更新下方 21:51 的资源失败状态。经用户授权清理 47 主机,发现 /tmp 为 tmpfs,旧发布及验收文件实际占用物理内存。6 项无进程引用的 Smail、Scert 临时发布文件已完整归档到磁盘,并保留原路径链接;业务数据、证书、已有备份和服务配置未改动。
- [✓] 释放约 355.5 MiB 文件内容占用,逐文件 SHA-256、属主、权限和修改时间一致;四项业务服务 PID、重启计数未变。
- [✓] 原参数资源预检连续 5 次通过,间隔 15 秒;保留 128 MiB 系统预算,未降低 512 MiB 硬上限或 384 MiB 高水位。可用内存约 625 至 643 MiB,未出现 OOM。
- [~] PROD-013 从“即时预算失败”转为“短时预检通过,持续运行、同机增长与容量待验收”。采样中最小剩余增长预算约 159 MiB,仅比 128 MiB 门槛多约 31 MiB,不构成宽裕容量证明。
- [!] 自签名证书、完整远程浏览器流程、恢复撤销、异机恢复等其他阻塞保持不变,仍不能签署生产放行。
归档及完整清单:/var/backups/host-tmp-archive-20260917T215952/manifest.json;五次原始预检:同目录 resource-samples.json。未来构建或测试产物应放在磁盘上的项目专用 /var/tmp 目录,避免大包再次占用 tmpfs;未改全局临时目录或删除失败测试证据。
历史复核:2026 年 9 月 17 日 21:51
本节优先于下方早期状态。已使用本次提供的访问凭据恢复受信任主机密钥校验的 SSH 连接,不再将 SSH 认证列为当前阻塞。凭据轮换、历史清理和访问审计仍未完成。
- [✓] 线上双程序摘要与
review-2263779封存候选一致。 - [✓] 新增资源策略 15 项 Python 回归和 Node 测试入口在远程受限单元通过,无跳过。
- [✓] 最新程序在全新隔离副本通过正式初始化 API、HTTPS 登录会话、三协议授权码、内部 25 端口中文正文及附件入库、三轮混合认证过载恢复;双库完整性正常,无新增 OOM。
- [✓] 停服备份后新增 systemd drop-in,运行进程确认
GOMEMLIMIT=256MiB;未修改原环境文件,未改变 384/512 MiB 内存限额。 - [!] PROD-013:资源预检仍失败。21:51 可用内存约 312 MiB,服务增长至硬上限还需约 495 MiB,无法同时保留 128 MiB 系统预算。不能将小样本的约 84.1 MiB 峰值直接作为生产容量。
- [!] PROD-006:当前证书为自签名,系统信任校验失败。
- PROD-007、PROD-008、PROD-012:正式浏览器、网页持久投递闭环、完整本地 IPC 恢复撤销与浏览器首次安装未通过。服务器未检测到 Chromium/Chrome;没有改为本机测试或忽略证书错误。
- 异机恢复、持续监控、生产容量及故障注入验收仍待完成。
结论:候选可继续隔离验收,不满足生产放行。线上数据库未清空;空数据副本用于本轮协议测试,不冒充线上清库或浏览器六步安装验收。详细证据见《远程服务器测试记录》最新章节。
本清单对应 2026 年 9 月 17 日 D:\Desktop\Smail 生产审查整改,验收服务器为 47.108.78.12。应用和自动测试只在该服务器执行,SMTP 按用户要求使用远程 127.0.0.1:25,不将公网 25 端口连通列为本轮通过条件。
当前版本已经完成凭据配置、SMTP 判定、MX 路由和网页持久投递队列的代码整改及针对性远程测试,但仍不建议直接生产上线。测试范围、版本摘要和备份位置以《远程服务器测试记录》最新章节为准。
截至 11:32,47 服务器已部署 review-421aa7303d3b。本轮 60 包分批执行、958 个顶层用例通过;部署后内部 SMTP 五项真实入库、双库完整性及未认证接口边界通过。此结论不覆盖跳过项、容量、可信 TLS 或真实网页登录发信;部署和 SMTP 回归均保留数据,不满足 PROD-012 的清库安装要求。
12:39 已部署认证容量与前端重试版本 review-d34ffdb7d1f6。前端 23 个文件、182 项测试通过,旧版 958 项结果不得作为新版全量通过的依据。随后空数据副本通过正式初始化接口、HTTPS 登录、三协议授权码登录及中文附件收信,但真实 POP3 过载响应失败,不能将此前业务层测试等同于完整协议验收。
13:05,POP3 与 SMTP 错误分类修复的三包远程回归共 48 项通过,无跳过。13:10 同版候选程序通过空数据副本初始化、真实协议及三轮混合认证过载恢复;随后完成备份部署,线上为 review-b47f36643547。13:12 部署后内部 SMTP 五项真实收信、产物摘要、双库和安全边界复核通过。生产容量、资源规划和正式浏览器验收仍未通过。
15:21 起继续资源隔离整改。已补充 systemd 候选资源预算、OOM 整组收尾、启动限频、90 秒停止期限、只读资源预检及反例测试;本轮仅完成源码复审、语法检查和 Linux 测试程序交叉编译,未在本机执行应用或测试用例。当前会话无法通过 47 的 SSH 认证,没有上传或部署,也没有重新核实线上版本与资源。详见《生产资源部署说明》,不得把本轮源码变化计为 PROD-013 已通过。
任务状态
| 编号 | 优先级 | 任务 | 状态 | 验收边界 |
|---|---|---|---|---|
| PROD-001 | P0 | 移除脚本中的已知明文凭据 | [x] | 工作区已清理,历史泄露处置未结束 |
| PROD-002 | P0 | 轮换泄露凭据、核查访问记录 | [!] | 前轮记录旧 SSH 密码仍有效;本轮不复用泄露密码,已有密钥无法登录,需要恢复受信任访问并确认轮换状态 |
| PROD-003 | P0 | 处置 Git 历史中的凭据 | [!] | 未授权重写历史或强推;轮换应先于历史清理 |
| PROD-004 | P0 | 持久化逐收件人投递、防不确定重投 | [x] | 相关自动测试通过,真实网页业务闭环待验收 |
| PROD-005 | P1 | MX、备用路由、DNS 错误分类 | [✓] | 针对性测试通过,不代表各外部邮件供应商兼容性 |
| PROD-006 | P0 | 可信 TLS 和正式域名验证 | [✓] | 2026-09-17 已签发并部署五域名可信证书,443/8002/465/993/995 与内部25/587系统信任链校验通过;续期告警和到期演练另列 |
| PROD-007 | P0 | 完整网页登录、发信和状态核对 | [!] | 可信证书已解决,仍需有效测试账号和远程真实浏览器;不得绕过登录 |
| PROD-008 | P0 | 超级管理员恢复完整交互 | [!] | IPC 权限已复核,正式密码代理交互及旧会话撤销未验收 |
| PROD-009 | P1 | 备份与恢复演练 | [x] | 同机独立网络和挂载空间恢复、HTTPS、内部 SMTP 入库通过;异机恢复未演练 |
| PROD-010 | P1 | 内部 SMTP 与部署后安全回归 | [✓] | 五项真实收信、双库、产物、未认证 API 均通过 |
| PROD-011 | P1 | 全量测试、竞态、数据库兼容性和压测 | [~] | 60 包分批执行、958 个顶层用例通过;8 处跳过单列,竞态、真实跨库和容量验收未完成 |
| PROD-012 | P1 | 最新版本清库首次安装验收 | [~] | 新部署产物的空数据副本正式初始化 API、协议收信和认证过载恢复通过;真实浏览器首次安装待验收 |
| PROD-013 | P0 | 共享主机资源隔离与容量 | [!] | 首轮全机 OOM 后补充候选服务限额和只读预检;SSH 认证阻塞,尚未部署或测试,实际预算与容量未验收 |
| PROD-014 | P1 | 投递结果写库恢复 | [✓] | 12 项远程测试及源码复审通过;持久故障后的进程退出仍需人工核对,不代表生产故障演练通过 |
| PROD-015 | P1 | 跨平台证书路径与插件测试 | [✓] | Linux 拒绝异平台路径误解析;保持证书校验、托管导入和插件目录权限要求 |
| PROD-016 | P0 | 密码计算全局并发和过载处理 | [✓] | 48 项远程回归及新部署产物三轮真实混合认证过载恢复通过;区分 SMTP 535/454、IMAP UNAVAILABLE、POP3 SYS/TEMP,不代表生产容量或浏览器验收通过 |
状态含义:[ ] 未开始,[~] 进行中,[x] 已完成待复审,[✓] 指定范围复审通过,[!] 暂缓或存在阻塞。
晚间候选进展
- 修正发行工具链版本来源,补充双程序大小和 SHA-256 回执;代码已推送至
2263779,新增断言待远程执行。 - 完整构建并单独封存
review-2263779Linux/amd64 候选包;目标平台、ELF 文件头、提交号、源码指纹和产物摘要已静态核对,尚未部署。 - [!] 20:14 再次连接 47 服务器仍认证失败,未执行清库、部署或应用测试;资源策略和其余生产门槛继续阻塞。
- 打包流程自动拒绝错误目标产物、隔离旧目录元数据;本轮以全新封存目录和明确文件清单规避混包,尚未形成自动回归保障。
候选压缩包与边界详见《远程服务器测试记录》晚间章节。既有远程通过项仅对应记录中的历史版本,不代表 review-2263779 已通过同样验收。
凭据与 SSH
SSH 脚本复用 test/tools/remote_ssh.py,强制核对已知主机密钥。不得为连接方便改回自动接受未知主机,也不要把真实值写入命令记录、仓库或文档。
| 环境变量 | 用途 |
|---|---|
SMAIL_SSH_HOST、SMAIL_SSH_PORT |
SSH 主机和端口 |
SMAIL_SSH_USER |
登录账号 |
SMAIL_SSH_PASSWORD |
临时注入的密码,优先协调迁移到密钥认证 |
SMAIL_SSH_KEY |
私钥路径,不是私钥内容 |
SMAIL_SSH_KNOWN_HOSTS |
额外的已核验主机密钥文件路径 |
SMAIL_TEST_ADMIN_PASSWORD |
测试安装时使用的管理员密码 |
SMAIL_TEST_SMTP_PASSWORD |
SMTP 示例客户端凭据 |
轮换前必须验证新的独立登录路径,避免锁死服务器访问;还应撤销关联会话、令牌及重复使用该密码的账号凭据,并审查异常登录。历史清理需要单独授权、备份及协作安排,当前未删除文件、重写历史或强推。删除源码中的密码不会让旧密码失效。
投递语义与运维边界
- 网页返回提交成功表示邮件和任务已经持久化,不表示收件箱已收到。SMTP 250 仅表示对端接收了投递责任。
- 每收件人独立记录
queued、running、accepted、failed或uncertain。成功收件人不随其他收件人的失败重投。 - 临时失败最多五次,间隔 1、2、4、8 分钟;明确拒绝、证书问题、危险目标和结果不确定停止自动重试。
- DATA 结果不确定、重启时仍在途、旧版本没有可靠尝试记录的邮件必须先核对实际收件结果,再决定人工处理。当前没有已验收的人工重投界面,不要直接改库重排。
- 新版数据库读取失败不领取任务;结果写库失败时单工作器最多保留一份结果,暂停新领取,每秒仅重试写库,不再次调用 SMTP。数据库恢复后自动保存;进程中途退出仍将遗留在途记录转为待核对。相同尝试的相同结果允许重复保存,不覆盖后续尝试;线上部署状态以最新测试记录为准。
- 当前仅允许单实例、单工作器使用同一队列库。没有验收多实例调度、吞吐容量、队列告警和故障期间的服务等级。
- 现有邮件客户端 SMTP 提交、系统通知和其他调用方不自动等同于网页持久队列;分别验收其投递及失败处理。
- 备用 MX 保留既有 25 STARTTLS、587 STARTTLS、465 TLS 顺序;禁止明文降级。各运营商的端口策略及可达性需要独立验证。
下一轮验收顺序
- 验证替代 SSH 登录,完成泄露凭据轮换和访问审计,再另行协调历史清理。
- 部署覆盖实际域名的受信任证书,使用有效测试账号恢复桌面浏览器验收;移动端遵循指定插件流程。
- 从正常网页提交邮件,核对持久任务、部分成功、最终状态和实际收件结果;对重启、暂时拒绝、DATA 断连及数据库故障使用受控远程故障环境,不影响其他服务。
- 用受保护的本地管理命令完成恢复交互,核对新密码登录、旧密码拒绝、旧会话及客户端凭据撤销。不得增加普通 HTTP 或公网/LAN TCP 恢复入口。
- 在隔离远程目标完成备份恢复、全量与竞态测试、目标数据库兼容性和容量验证。最新版本重新清库安装前,先备份所有项目数据库并核实范围,不清理其他项目数据。
上述阻塞项解决后再做最终生产评审,不以构建成功、首页 200、内部 SMTP 250 或单次提交代替整体验收。
2026-09-17 23:00 反代验收更新
- [✓] Smail HTTP 8001、HTTPS 8002 已生效,Nginx 接管公网 80/443,现有 UFW 拒绝外部直连上游端口。
- [✓] 五域名可信证书签发和七个 TLS/STARTTLS 入口检查通过;私钥仅在服务器受保护目录,未进入仓库。
- [✓] 续期未到期任务、六项远程隔离回归、可信 HTTPS 首页及入口资源检查通过。
- [!] 到期续期维护窗口、外部告警、代理后的客户端 IP 限流、恢复页面外部端口仍需整改或演练。
- [~] 安装 Nginx 后原 128 MiB 保留预算的只读预检再次通过,无新增 OOM;这不是生产容量批准。
- [!] 真实浏览器首次安装与发信、管理员恢复撤销、凭据轮换和异机恢复继续待验收。
详细配置、备份、证书与证据见《Nginx反代与证书部署说明》和《远程服务器测试记录》。本轮没有业务数据写入或清库,没有把传输层检查冒充首次安装测试。
资源与测试隔离
47 服务器约 1.6 GiB 内存,晚间复核已有约 4 GiB 主机交换空间,Smail 的 MemorySwapMax 仍为零;同机另有 MySQL、Scert 等服务。首轮测试仅设置 Go 软内存上限,不能防止全机内存耗尽。新工具通过 systemd 设置 CPU、内存、进程数和最长运行时间上限,使用独立网络、私有临时目录,并禁止访问线上 /opt/smail、/run/smail。可用内存不足时拒绝开始测试,不自动放宽限制、不停止其他项目。
GOMEMLIMIT 是 Go 回收目标,不是进程或主机硬限制。本轮协议测试以 128 MiB cgroup 上限、25% CPU 配额和 64 MiB Go 回收目标完成,不能据此推导生产容量。生产仍需确定同机服务预算、并发认证开销、邮件大小与吞吐上限、告警和故障恢复指标。
恢复服务整包执行曾在 128 MiB 上限触发测试 cgroup OOM,改为逐顶层用例独立进程后 14 项通过,峰值约 126.4 MiB。没有降低 Argon2id 的 64 MiB 内存参数;不能把拆分测试视为生产内存问题已解决。测试启动器默认 128 MiB,并对不存在的包、空清单和零匹配筛选返回失败;中断包保留运行中记录。
后续认证整改在整个进程内仅允许一个昂贵密码计算,满载立即返回可重试错误,不建立等待队列;HTTP 返回 503,SMTP 返回 454,IMAP 和 POP3 返回临时不可用。恢复服务不会把容量不足视为错误恢复码或消耗验证机会,前端不会因此清空输入或宣称链接失效。前端测试使用同样的独立网络和生产目录访问限制,128 MiB 硬上限下峰值约 73.7 MiB;测试通过不代表已测得生产可承载并发量。