统一服务回环监听并记录标准端口反代要求

同步动态服务生成器与静态模板的回环地址策略,补充回归断言和双服务器只读核查记录。生产验收状态保持待复审。
This commit is contained in:
xuans 2026-10-01 16:29:16 +08:00
parent 48d10fefde
commit 51f7f3e55c
7 changed files with 67 additions and 0 deletions

View File

@ -18,6 +18,7 @@ func TestScertSystemdUnitPolicy(t *testing.T) {
"Documentation=file:///scert/docs/Scert-service-management.md",
"User=Scert",
"Group=Scert",
"Environment=SCERT_SERVER_HOST=127.0.0.1",
"ExecStart=/scert/scert --config /scert/conf/scert.json serve",
"Restart=on-failure",
"UMask=0077",

View File

@ -176,6 +176,7 @@ func renderUnitFile(options Options) (string, error) {
"WorkingDirectory="+quoteUnitValue(normalized.WorkDir),
"ExecStart="+quoteUnitValue(normalized.Executable)+" --config "+quoteUnitValue(normalized.ConfigPath)+" serve",
"Environment=SCERT_BOOTSTRAP_FIREWALL_MODE=external",
"Environment=SCERT_SERVER_HOST=127.0.0.1",
"KillSignal=SIGTERM",
"TimeoutStopSec=30",
"Restart=on-failure",

View File

@ -30,6 +30,7 @@ func TestRenderUnitFileIncludesExecutableConfigurationAndWorkDir(t *testing.T) {
"RuntimeDirectory=scert",
"RuntimeDirectoryMode=0700",
"Environment=SCERT_BOOTSTRAP_FIREWALL_MODE=external",
"Environment=SCERT_SERVER_HOST=127.0.0.1",
"[Service]",
"Type=simple",
"User=Scert",
@ -75,6 +76,7 @@ func TestPackagedUnitAllowsInterfaceDiscoveryWithoutCapabilities(t *testing.T) {
"CapabilityBoundingSet=",
"AmbientCapabilities=",
"NoNewPrivileges=yes",
"Environment=SCERT_SERVER_HOST=127.0.0.1",
"User=Scert",
} {
found := false

View File

@ -369,3 +369,21 @@ powershell -ExecutionPolicy Bypass -File .\install-windows.ps1 `
```
Windows Service 实机安装、开机启动、停止、升级和 ACL 仍需在授权 Windows 主机上验收。
## 标准端口反向代理部署约束(2026-10-01)
本轮 Linux 部署使用以下端口边界;前面的自定义公开端口示例不用于本次生产部署。
| 组件 | 监听地址 | 用途 |
| --- | --- | --- |
| Nginx | 公网 `80` | 跳转到管理域名的 HTTPS 入口 |
| Nginx | 公网 `443` | 管理页面及接口的唯一 HTTPS 入口 |
| Scert | `127.0.0.1:8443` | 仅供本机 Nginx 访问,不在安全组或防火墙额外放行 |
静态安装模板与命令行生成的 Linux systemd unit 均设置 `Environment=SCERT_SERVER_HOST=127.0.0.1`。内部端口由 Scert 配置决定,本次使用 `8443`,该环境变量只约束监听地址。部署时必须核对已有 drop-in 或环境文件没有将监听地址覆盖为公网地址。
使用 `deploy/nginx/Scert.conf.example` 时,将 HTTP、HTTPS、上游端口分别填写为 `80`、`443`、`8443`,管理域名和证书路径使用实际配置。保留 `proxy_ssl_verify on`、管理域名 SNI 和可信 CA;不得通过关闭 TLS 校验解决上游证书错误。共享 Nginx 仅调整 Scert 对应站点,不覆盖邮件或其他站点。
首次初始化也不能临时开放公网业务端口。尚无可信管理证书时,通过密码 SSH 本地转发访问回环初始化入口,并按照既有初始化说明核验临时证书指纹;完成正式证书配置后再启用严格校验的公开反代。
复核至少包括:实际监听地址、`nginx -t`、HTTP 跳转、管理域名 HTTPS 就绪检查、回环上游严格 TLS 检查以及独立外部连接无法访问内部端口。检查通过不代替首次初始化、证书签发、部署恢复及数据库生产矩阵验收。

View File

@ -1188,3 +1188,18 @@ git diff --check
- [ ] T7 最终生产门禁和上线结论。
总体验收位置仍为 **P0-03:完成,待复审**,本轮不得标记全量生产验收通过。
## 2026-10-01 反向代理端口收敛记录
本节补充当前部署要求,不覆盖历史记录。当前仅处理 Linux;本轮是保留数据的端口配置复核,不代表清库首次初始化验收。
- [x] 已完成,等待复审:两台服务器通过密码 SSH 核验,Scert 均仅监听 `127.0.0.1:8443`;没有 `0.0.0.0:8443` 或 `[::]:8443` 监听。
- [x] 已完成,等待复审:Nginx 对外监听 `80/443`,两台服务器的 `nginx -t` 均通过;未修改邮件及其他既有站点。
- [x] 已完成,等待复审:第二台管理入口 `odacm.cn` 的 HTTP 请求返回 301 并跳转 HTTPS,反代 `/readyz` 和回环上游 `/readyz` 均返回 200;上游启用 SNI 和证书校验。
- [x] 已完成,等待复审:从第二台服务器按正常 DNS 访问管理域名,连接地址为 `45.136.13.241`,HTTPS 就绪检查返回 200;该结果不是独立外部客户端的完整生产验收。
- [x] 已完成,等待复审:静态 systemd 模板已提交并推送 `48d10fe`;动态生成的 Linux unit 同步回环监听约束,并补充模板与生成器回归断言。
- [x] 已完成,等待复审:本地后端 `go test ./...`、`go vet ./...` 和 `git diff --check` 通过;本机 Windows 测试不代替 Linux 专属用例执行。
- [~] 进行中:使用干净提交构建 Linux 候选包,核对安装后的默认 unit 和动态生成配置,并补充 Linux 专属用例证据。
- [!] 暂缓或存在阻塞:历史恢复事务、双服务器真实失败回滚与重试幂等、Smail SMTP、数据库生产矩阵、备份恢复及最终生产门禁仍未完成。
端口边界:不新增公网业务端口,不为内部 `8443` 添加防火墙或安全组放行规则。SSH 运维端口与其他已有服务不属于本次端口收敛的修改范围。总体验收保持 **P0-03:完成,待复审**,不新增全量验收通过结论。

View File

@ -1500,3 +1500,18 @@ P0-05 从 `[!]` 调整为 `[~]`,并未标记完成;P0-04 剩余门禁和全
- [ ] T7 最终生产门禁和上线结论。
总体验收位置仍为 **P0-03:完成,待复审**,本轮不得标记全量生产验收通过。
## 2026-10-01 反向代理端口收敛记录
本节补充当前部署要求,不覆盖历史记录。当前仅处理 Linux;本轮是保留数据的端口配置复核,不代表清库首次初始化验收。
- [x] 已完成,等待复审:两台服务器通过密码 SSH 核验,Scert 均仅监听 `127.0.0.1:8443`;没有 `0.0.0.0:8443` 或 `[::]:8443` 监听。
- [x] 已完成,等待复审:Nginx 对外监听 `80/443`,两台服务器的 `nginx -t` 均通过;未修改邮件及其他既有站点。
- [x] 已完成,等待复审:第二台管理入口 `odacm.cn` 的 HTTP 请求返回 301 并跳转 HTTPS,反代 `/readyz` 和回环上游 `/readyz` 均返回 200;上游启用 SNI 和证书校验。
- [x] 已完成,等待复审:从第二台服务器按正常 DNS 访问管理域名,连接地址为 `45.136.13.241`,HTTPS 就绪检查返回 200;该结果不是独立外部客户端的完整生产验收。
- [x] 已完成,等待复审:静态 systemd 模板已提交并推送 `48d10fe`;动态生成的 Linux unit 同步回环监听约束,并补充模板与生成器回归断言。
- [x] 已完成,等待复审:本地后端 `go test ./...`、`go vet ./...` 和 `git diff --check` 通过;本机 Windows 测试不代替 Linux 专属用例执行。
- [~] 进行中:使用干净提交构建 Linux 候选包,核对安装后的默认 unit 和动态生成配置,并补充 Linux 专属用例证据。
- [!] 暂缓或存在阻塞:历史恢复事务、双服务器真实失败回滚与重试幂等、Smail SMTP、数据库生产矩阵、备份恢复及最终生产门禁仍未完成。
端口边界:不新增公网业务端口,不为内部 `8443` 添加防火墙或安全组放行规则。SSH 运维端口与其他已有服务不属于本次端口收敛的修改范围。总体验收保持 **P0-03:完成,待复审**,不新增全量验收通过结论。

View File

@ -2130,3 +2130,18 @@ P0-11 生产验收门禁
- [ ] T7 最终生产门禁和上线结论。
总体验收位置仍为 **P0-03:完成,待复审**,本轮不得标记全量生产验收通过。
## 2026-10-01 反向代理端口收敛记录
本节补充当前部署要求,不覆盖历史记录。当前仅处理 Linux;本轮是保留数据的端口配置复核,不代表清库首次初始化验收。
- [x] 已完成,等待复审:两台服务器通过密码 SSH 核验,Scert 均仅监听 `127.0.0.1:8443`;没有 `0.0.0.0:8443` 或 `[::]:8443` 监听。
- [x] 已完成,等待复审:Nginx 对外监听 `80/443`,两台服务器的 `nginx -t` 均通过;未修改邮件及其他既有站点。
- [x] 已完成,等待复审:第二台管理入口 `odacm.cn` 的 HTTP 请求返回 301 并跳转 HTTPS,反代 `/readyz` 和回环上游 `/readyz` 均返回 200;上游启用 SNI 和证书校验。
- [x] 已完成,等待复审:从第二台服务器按正常 DNS 访问管理域名,连接地址为 `45.136.13.241`,HTTPS 就绪检查返回 200;该结果不是独立外部客户端的完整生产验收。
- [x] 已完成,等待复审:静态 systemd 模板已提交并推送 `48d10fe`;动态生成的 Linux unit 同步回环监听约束,并补充模板与生成器回归断言。
- [x] 已完成,等待复审:本地后端 `go test ./...`、`go vet ./...` 和 `git diff --check` 通过;本机 Windows 测试不代替 Linux 专属用例执行。
- [~] 进行中:使用干净提交构建 Linux 候选包,核对安装后的默认 unit 和动态生成配置,并补充 Linux 专属用例证据。
- [!] 暂缓或存在阻塞:历史恢复事务、双服务器真实失败回滚与重试幂等、Smail SMTP、数据库生产矩阵、备份恢复及最终生产门禁仍未完成。
端口边界:不新增公网业务端口,不为内部 `8443` 添加防火墙或安全组放行规则。SSH 运维端口与其他已有服务不属于本次端口收敛的修改范围。总体验收保持 **P0-03:完成,待复审**,不新增全量验收通过结论。