9.9 KiB
HN 邮件与订阅网关
2026-10-27初始化,2026-10-28按用户要求将c2订阅域名迁至t34;所有凭据、数据库与运行实例独立,未向DPL发布。主站与后台见 HN_PRODUCTION。本文是实现、验收和恢复的唯一正文。
域名与渠道
hardnerd.net/admin.hardnerd.net:HN主站/后台,sitejp02。hardnerd.dev:系统邮件域名,保留Namecheap BasicDNS和Private Email MX/SPF、privateemail DKIM。用户实际建立的是mail@hardnerd.dev,保留其名称。- Resend:独立账号ACC-RESEND-HN,Tokyo,domain ID
db1cf9ac-3d57-41b5-9fd0-f567ab40b520。resend._domainkeyTXT、rsendCNAME到rsend-apne1.forge.rmta.net、sendCNAME到send.forge.rmta.net均verified。Resend receiving关闭;企业收件走IMAP。 - 邮箱:Namecheap Private Email Launch,订阅4476265,1/1邮箱、5GB;后台已显示服务有效至2027-10-27、自动续费开启,不代表将来扣款成功。
hardnerd-nodes.com:独立Cloudflare Free zone1043df03492d50f87d92300a6729362e,NSbradley.ns.cloudflare.com/jewel.ns.cloudflare.com,权威/公共解析及active状态已核实。root A与t34 A指向gateway-01,www CNAME根域,均橙云;原Namecheap转发MX/SPF保留,不作为HN业务邮箱。- 正式订阅基址
https://t34.hardnerd-nodes.com已写入仅HN的subscribe_url,生成链接主机已回读。root/www跳到hardnerd.net;t34只开放/s/<token>和/api/v1/client/subscribe,其他路径404,不提供公开管理端。 - Cloudflare完整(严格)在源站证书验证通过后保存;Cache Rule
d765537a713747faa2a6e9cd1009c8a9对所有请求绕过缓存。Bot Fight/Under Attack未开启,未关闭BIC或改账号安全设置。
2026-10-28 t34 域名迁移
用户明确将c2.hardnerd-nodes.com改为t34.hardnerd-nodes.com。新t34 A记录到相同gateway-01、橙云及自动TTL,旧c2记录已移除;不保留旧地址为正式订阅别名。HN subscribe_url已修改,生成链接主机回读t34。原全区缓存绕过和严格TLS保持,不改日志设置、认证、邮箱、DPL/FUC配置。
运维提交 360c155fae5bbf86654fdcba1d0de33b80fb7de4 先推送后部署;scripts/hn/gateway/migrate-t34.py分prepare/certificate/activate执行。新证书独立lineage t34,SAN=t34/root/www,有效至2027-01-26;宿主/容器证书路径、SNI、环回管理端模板和hn-gateway-cert.service已同步。仅重建HN两个容器以刷新只读挂载模板,保留原卷和管理员凭据;DPL/FUC四个原容器及Nginx哈希基线通过。旧c2证书只保留回退,不由现行专用timer续期。
经白色机实际测试:t34有效限时账号得到sing-box JSON和Clash YAML,invalid token403,非订阅/管理路径404,CF DYNAMIC、private/no-store及过滤头存在;源站证书校验、新lineage续期dry-run及专用HN reload hook均通过。QA用户ID4已禁用、额度清零、到期、令牌轮换、会话0。当前回读套餐0、节点1;节点来自既有/并行业务,本任务没有新增/改动节点,不把订阅格式验收写成节点联网验收。未做线上页面验收。
网关备份 /root/codex-backups/hn-gateway/20261028-t34/ 保存本次保护基线、旧host/proxy/cert service、旧证书symlink和deployment metadata;HN应用设置备份 /root/codex-backups/hn/20261028-t34/subscribe-before.json。本次本地证据 codex/output/hn-t34-20261028/。回退先恢复旧c2橙云A记录及旧网关Git模板/备份vhost、proxy、证书symlink、专用service,nginx -t后仅重建HN容器并平滑reload,再恢复HN subscribe_url;保留新旧证书/卷和凭据,不用全局docker/Certbot操作,不重启DPL/FUC。
HN 邮件运行配置
/www/wwwroot/hardnerd.net/.env、HN库的 mail_flow 设置;SMTP465 SSL与IMAP993 TLS均校验证书。旧Laravel读取 MAIL_DRIVER,已明确设smtp,不能只设MAIL_MAILER。发件名称hardnerd、地址及Reply-To均为自有邮箱,页脚主站hardnerd.net,空MAIL_LOGO_PATH避免沿用DPL图片。
验证码/登录链接/工单回复优先Resend,其他走企业SMTP;额度100/3000且使用官方用量与本地预占,规则沿 BUSINESS_RULES。Resend密钥、IMAP密码与回调签名秘密在HN库加密;SMTP密码只在私有环境,未复制进普通后台可读设置。ACC-HN-MAIL与ACC-RESEND-HN私有字段按GemDocs读取,本文不存值。
Webhook https://hardnerd.net/api/v1/guest/resend/webhook,ID dafe1822-894f-4aff-97c9-0dc669d416b8,enabled;订阅sent/delivered/delivery_delayed/bounced/failed/complained/suppressed。未签名401,签名诊断200;真实测试sent和delivered均回调200,投递事件和时间已入库。
IMAP来信加密保存;来信自动回复启用,普通SMTP发送,按北京时间每天每发件人最多一次,既有过滤避免自身/退信/自动邮件循环。管理员运行汇报保持关闭,没有借用DPL master或Telegram目的地;HN尚无独立汇报路由,不能宣称已接入日报。外部普通来信自动回复未做额外真实发送验收。
只重启过HN的hn-fpm、hn-horizon;DPL邮件配置和工作进程未改。
独立网关
Git分支 codex/hn-production。首个网关安装器d8a5091,首启等待/安全续跑修复 ad9a4fe5877f3f9741e79f8250257d707e768189;后续文档提交以服务器HEAD为准。发布先推送后部署;原Git获取较慢最终成功,修复提交经已推送Git bundle导入,不使用源码打包覆盖。
- gateway-01 / VPS-006 ->
/opt/hn-gateway/provision,实现scripts/hn/gateway/,只经白色机SSH。 - 本地代码:HN独立工作树相同目录下的scripts;本地Web域名不适用(运维容器);线上订阅域名见上;白色机网站反代未建立。
- 容器
hn-subscribe-gateway/hn-subscribe-admin;宿主端口仅127.0.0.1:28080/28443/26444。管理端只环回26444,无公网vhost。默认管理员按ACC-005建立,未改旧管理员。 - 网络hn_sgw_net,172.28.32.0/24;卷hn_sgw_config / hn_sgw_logs;状态
/var/lib/hn-sgw,admin.env600。管理后端只指向hardnerd.net。白色机IP104.168.30.40为运维验收白名单,其他继承独立过滤库与管理规则。 - gateway内存160MB/0.5CPU,admin128MB/0.5CPU;启动前可用内存538MB,端口/子网/磁盘/固定镜像均检查。既有DPL/FUC资源不停止、不复用HN卷。
- 宿主
/etc/nginx/conf.d/hn-subscribe.conf、独立Cloudflare可信IP include与proxy include。宿主验证容器证书,容器验证HN上游证书,均不跳过TLS;已知域名SNI固定。 - 初启镜像下载公开云IP列表再启动Nginx;安装器等待其初始化,失败后只允许相同凭据安全续跑,不重建身份或覆盖变更。
- 独立证书SAN含t34/root/www,到2027-01-26;目录
/etc/hn-gateway-letsencrypt,ACME账户从同宿主既有已接受条款的账户复制到独立目录,未创建新账户或运行全局hooks。 - hn-gateway-cert.timer专属续期,renew-gateway.sh仅重载两个HN容器和宿主Nginx;hn-gateway-cloudflare-ips.timer维护HN可信代理段。独立续期dry-run通过,未改DPL/FUC续期。
验收证据与边界
证据本地忽略目录 codex/output/hn-mail-20261027/;远端私有备份下保存配置/SQL/回调与测试收据,不能输出其中秘密。
- 两封SendEmailJob测试只发用户新建邮箱:Resend verification一封、conventional other一封;没有跨渠道重复发送。IMAP实收2封、SPF和DKIM均pass、HN正文/页脚正确、无DPL品牌;IMAP入库2封。Resend已投递且有时间;SMTP仅记submitted,真实收件另证,未伪造SMTP回执。
- 白色机实际HTTPS请求:HN主站和DPL主站200,订阅root404;源站TLS校验通过。正式入口有效受限用户输出sing-box JSON与Clash YAML结构,invalid token403,管理路径404,no-store与过滤响应头存在。
- 为保留审计同时避免令牌进入URL日志,真实有效令牌测试放GET JSON body,未持久改变原HN主站日志配置;非秘密invalid token验证了常规查询路径和短路径。没有对外展示或记录有效订阅URL。
- 限时非管理员QA用户ID2,example.invalid、1MB/30分钟、无权限组/无节点;结束已禁用、额度清零、到期、令牌轮换且会话0,未删除审计证据。套餐/节点为空,未声称实际代理联网通过。
- 四个原DPL/FUC容器ID、启动时间、重启次数与既有Nginx配置hash基线一致。HN主站外其他站点配置未改。未发布DPL功能代码。
- sitejp02整机启动时间为2026-10-27 19:50:52,五个原服务在19:50:59至19:51:07随系统启动;与18:39首发保护基线的启动时间不同,不能写成未重启。重启原因本任务未核实,未执行重启命令;DPL HEAD/既有Nginx配置hash未变,原服务当前均active,DPL公网200。此项与gateway-01四个旧容器基线保持一致是两台服务器的不同结论。
- 已完成服务器侧验收,未做线上页面验收。支付、真实节点联网及外部自动回复额外发送未验收。
备份与回退
邮件备份 /root/codex-backups/hn/20261027-mail-setup/:hn.sql、hn.env.before、applied.json、subscribe-url-before.json、邮件测试收据;resend-webhook.json含秘密只限root。恢复前先备份当前业务数据,不能用初次SQL覆盖后续运营数据。紧急停用HN mail_flow或恢复旧HN邮件环境/设置,仅重启HN FPM/Horizon;不要重置DPL或邮箱密码。回调可在HN Resend账号禁用,保留记录。
网关备份 /root/codex-backups/hn-gateway/20261027-first-install/:原容器/配置保护基线、HTTP-only vhost及证书日志。回退顺序:先恢复HN subscribe_url为原值,再只停HN两个timer及HN compose容器,将HN vhost恢复HTTP-only或退出,nginx -t后平滑reload;保留卷、证书、admin.env及备份。不得执行全局docker prune/down,不停旧容器、不撤销旧证书或重启共享服务。