最后验证:2026-10-08T06:10:57Z

sing-box 完整审计与优化报告

  • 主机:CachyOS(Arch rolling)· 内核 7.2.9-1-cachyos-bore-lto · systemd 262-1-arch
  • 审计时间:2026-10-08 12:00 ~ 13:53(Asia/Shanghai)
  • 审计者权限:普通用户 emo(uid=1000,属 wheel/network/docker/libvirt);sudo 需密码 → 所有破坏性/系统级改动由你执行
  • 审计对象:/etc/sing-box/config.json(审计时 16693 B → 落地后 16641 B,0600 root)+ 单机 systemd 服务 sing-box.service
  • 本报告不含任何节点地址、口令或密钥明文;所有凭据与可识别地址一律用占位符(<home-ip> / <proxy-exit-ip> / <node-server> / <lan-gateway> / <clash-api-secret>)打码

一、第 0 步 · 环境事实清单

项目 实测值 来源/命令
发行版 CachyOS(Arch rolling) /etc/os-release
内核 7.2.9-1-cachyos-bore-lto x86_64 uname -r
init systemd 262-1-arch(无 launchd / Windows 服务) systemctl –version
当前用户 emo uid=1000;组 wheel,network,docker,libvirt,… id
sudo 需要密码(sudo -n 全部失败) sudo -n true
安装方式 pacman 包 sing-box-ebpf 1.14.2.ref1nd-2 pacman -Qi
可执行文件 /usr/bin/sing-box(root:root,83943392 B,2026-10-02 09:54),全盘唯一 which/stat/find
版本 v1.14.2-reF1nd(go1.27.1-X:nodwarf5 linux/amd64,tags: with_gvisor,with_quic,with_ebpf,CGO disabled) sing-box version
上游最新 v1.14.2 → 与上游持平,无需升级(本项目 fork 的 1.15 仍处 alpha) GitHub Releases
服务单元 /usr/lib/systemd/system/sing-box.service:User=root、StateDirectory=sing-box、LimitMEMLOCK=infinity、LimitNOFILE=infinity、Restart=on-failure、RestartSec=10s、ExecStart=/usr/bin/sing-box -D /var/lib/sing-box -C /etc/sing-box run systemctl cat
实际进程 root pid 144710 ps
drop-in /etc/systemd/system/sing-box.service.d/10-config-check.conf:ExecStartPre=/usr/bin/sing-box check -c /etc/sing-box/config.json(10-08 12:47 新增,是唯一 drop-in) systemctl cat
配置加载 -C /etc/sing-box 目录 + 单文件 /etc/sing-box/config.json(16693 B,0600 root,mtime 2026-10-08 12:01:41);无 include 拆分;emo 读不了(EACCES),审计用世界可读的备份副本 ls/stat
rule-set 17 条全部 type=local format=binary,分布:/etc/sing-box/rule-set(2)+ /usr/share/sing-box-rule-set(7)+ /usr/share/sing-box-rule-sets(8),逐条路径实测存在 jq + ls
日志 journald(emo 可读) journalctl -u sing-box
监听端口 127.0.0.1:7892 mixed-in / :9090 clash_api / :9091 services.api / :9096 sing-box-panel;eBPF 入站不占用户态端口 ss -ltnp
历史报错 10-07 12:53、17:08 network: missing default interface;10-07 19:26、19:39 connection upload handshake: i/o timeout;10-08 12:32 unsupported address;12:47 重启后至今无新 ERROR journalctl
~/code/pkg/build 未找到(用户提到的目录不存在)→ 第 2 步改为审计实际存在的两个同步脚本仓库 ls

拓扑事实(影响测试判据,务必知道)

本机 systemd-resolved(/etc/resolv.conf → 127.0.0.53)+ eBPF 入站,使宿主机自身的 DNS 与 TCP 都被 sing-box 透明接管:

  • 不设代理的 curl https://www.google.com/generate_204 = 204;Cloudflare trace 直连 colo=HKG(走代理出口)
  • getent 解析广告域全部 NXDOMAIN;example.com 正常 → 广告拦截在 DNS 层生效
  • 直接向 8.8.8.8:53 / :53 / 223.5.5.5:53 发 UDP 查询,答案一致 → 均被劫持进 sing-box

二、第 1 步 · 官方文档与社区模板核对

2.1 官方「必须改」

结论:无。 按 v1.14.2 现行文档逐项核对,本配置没有使用任何已弃用/被拒的字段:

核对项 文档要求 本机实测 判定
DNS server 格式 1.12 起新格式,旧 address 格式已弃用 全部新格式(type/ server/ domain_resolver/ detour) 合规
DNS 规则字段 1.14 起拒绝 ip_cidr / match_response / ip_version dns.rules 未使用这三个字段 合规
independent_cache 1.14 已移除 未使用 合规
Address Filter Fields legacy 已移除 未使用 合规
outbound 字段 domain_resolver 需为 dns server tag 11 个 shadowsocks 节点均为 dns-direct-ali(有效 tag) 合规
route 字段 auto_detect_interface / find_process / default_domain_resolver 仍有效 均在用,find_process=false 合规
experimental clash_api / cache_file 仍有效 均在用 合规
services api 1.14 起与 clash_api 并行的推荐控制面 已启用(127.0.0.1:9091) 合规,无需改

来源:deprecated.md · service/api · outbound/urltest · Releases

2.2 社区「建议改」

社区模板 它主张的做法 本机情况 采纳
LongLights/sing-box_template_merge_sub-store DNS 按 geosite 分流、国内直连解析、防 DNS 泄漏 本配置已实现同类设计(dns.rules 6 条 + 双 dns server 组) 已具备,不重复引入
Toperlock/sing-box-subscribe 远程 rule_set + urltest 自动测速模板 本机 17 个规则集全部本地 .srs,加载更快且不受远端可用性影响 不采纳远程化
qixuancao/sing-box-config-templates 本地渲染配置模板 + sing-box check 后才生效 与本方案第 4 步流程一致 已采纳为上线流程

三、第 2 步 · 云端同步 / 发布脚本审计

审计对象(~/code/pkg/build 不存在,改审实际存在的仓库):

3.1 严重问题

# 问题 证据 风险 处置
S1 同名脚本双份漂移:Singborg/scripts/* 是 2026-10-02 22:59 的旧副本,pkgbuild-source/scripts/* 才是新版(apply-audit-fixes.sh 相差 112 行);Singborg/scripts/refresh-rule-sets.sh 旧版缺两个 lyc8503 源、且不拒绝未知参数 diff / head 照 Singborg README 执行会跑旧逻辑,静默漏更新 2 个规则集,广告/直连规则可能过期 统一入口:只从 pkgbuild-source 运行;删除或替换 Singborg 旧副本
S2 配置明文外泄面:/etc/sing-box/backups/.json 与 /etc/sing-box/config.json.bak. 共 23 份完整配置副本、权限 644,含全部节点口令与 clash/api secret ls -l 本机任意用户可读全部节点凭据 已写进变更清单第 1 项(目录 700 / 文件 600)
S3 secret 弱且 CORS 全开:clash_api.secret 与 services[api].secret 同值,11 字符(10 小写字母+1 符号)非随机;access_control_allow_origin=["*"] + allow_private_network: true,实测 9090 对任意 Origin(含 https://evil.example)都回 Access-Control-Allow-Origin: * curl -D- 恶意网页在浏览器中跨域读本机 9090(可读取/切换代理节点) 变更清单第 5、6 项:轮换为 secrets.token_urlsafe(32) + CORS 收紧到面板源

3.2 警告

# 问题 说明 处置
W1 apply-audit-fixes.sh 无备份保留策略 find -delete / -mtime / prune 全无命中,备份无限增长 变更清单第 2 项(保留 10 份 + 7 天内不归档,超出 tar.gz 归档而非删除)
W2 generate-sanitized-config.py 把 dns.rules[*].server(DNS 服务器 tag)误当主机名替换为 <node-server> 公开快照的 DNS 分流引用失真——是错误不是泄漏 修正该脚本的替换白名单(仅替换 outbound.server / 订阅字段)
W3 我上一轮的工作区报告把明文 secret 写进了文件 singbox-optimization-review.md:47、:48 与 singbox-panel-guide.md:114(均 0600、非 git 仓库、无远端) 已打码,全工作区 grep = 0 命中
W4 pkgbuild-source 有 30+ 未提交改动 一次 push 会连带发布无关内容 push 前先审查 git status / 分批提交
W5 新发现(超出已授权清单):/var/lib/sing-box/cache.db 权限 644(BoltDB,存 DNS 缓存,store_dns=true) 任意本地用户可读取该机 DNS 查询历史 建议后续单独加固(本脚本未包含,等你确认再加)

3.3 良好实践(已确认无风险,保持即可)

  • 两个公开仓库的工作区 + 完整 git 历史对 11 个节点域名、节点口令、clash secret 全部 0 命中 → 公开仓库未泄漏任何私密节点信息
  • 三个会写 main 的 workflow 共用 concurrency: main-branch-updates(不会并发互踩)、actions 按 commit SHA 固定、用 github.token 而非 PAT、权限最小化
  • 没有任何脚本会把本机配置 push 或上传到远端(这是本次审计最关心的越权路径,已逐文件确认)
  • 用 github.token 而非 PAT

四、第 3 步 · 配置逐字段体检与变更清单

4.1 变更清单(14 项,全部已授权实现)

# 位置 现状 建议 依据 风险 重启
1 /etc/sing-box/backups 与 config.json.bak.* 目录 755、23 份文件 644,含明文凭据 目录 700、文件 600 最小权限原则 无(root 仍可读写) 否
2 备份目录 无保留策略,无限增长 每目录留最新 10 份;7 天内的不归档;超出部分 tar.gz 归档(不删除) 可回溯 + 控体积 无(归档保底) 否
3 我自己的工作区报告 含明文 secret 打码为 ****** 防二次泄漏 无 否(已完成)
4 systemd drop-in unit 有 After=network-online.target 但缺 Wants=,开机早期报 missing default interface 新增 20-network-online.conf:[Unit] Wants=network-online.target 官方 systemd 约定 极低(仅延后启动) 需 daemon-reload
5 experimental.clash_api secret 11 字符非随机;CORS ["*"] + allow_private_network:true secret 轮换为 token_urlsafe(32);CORS 收紧为 ["http://127.0.0.1:9096","http://localhost:9096"];移除 allow_private_network 本机已复现跨域读 9090 中(外部工具若硬编码旧 secret 会 401——面板按 mtime 动态读取,不受影响) 是
6 services[api] secret 与 clash_api 同值 轮换为独立随机值 凭据隔离 同上(仅 9091 使用者受影响) 是
7 11 个 shadowsocks 节点 同一口令(distinct_passwords=1) 服务商侧问题,建议逐节点独立口令 单点失陷面 需在服务商面板改 否(仅报告)
8 节点 server 的 domain_resolver dns-direct-ali 已撤回:dns-proxy 的 detour 是 Auto,用它解析 Auto 自己的节点域名会形成解析环;现有「国内 DoH 直解节点域名」是正确设计 解析环风险 — —
9 outbounds 存在未被任何 rule 引用的 {"type":"block","tag":"block"} 移除(route 第 5 条已用 action: reject) 死配置 无(实测 “block” 字面量仅 2 次即其自身声明) 是
10 selector Download / Auto / Auto-Japan Download.default=Auto;「🇯🇵 日本Z05|下载专用」同时是 Auto 与 Auto-Japan 的测速候选 Download.default 改为该节点,并把该节点从 Auto / Auto-Japan 的 urltest 候选中剔除 tag 语义=下载专用,不应参与日常选路 极低(下载路径更明确) 是
11 route.find_process false 保持 false(无 process 匹配规则,开启只增开销) 无收益 无 否
12 dns.rules(6 条) 已按 must-direct / 广告 NXDOMAIN / cn 直连 / !cn 走代理划分 无需改动 已符合最佳实践 — —
13 版本 v1.14.2-reF1nd = 上游最新 不升级 无新版可升 — —
14 cache_file / 双控制面(9090+9091) 均已启用 保留 持久 DNS 缓存 + 新版控制面 — —

4.2 高危项(已单独提示,均带回滚)

  • 第 5、6 项(secret 轮换):唯一会影响外部脚本的改动。如果你的其它设备/脚本里硬编码了旧的 clash secret,轮换后它们会 401。已确认本机面板(127.0.0.1:9096)是按文件 mtime 动态读取密钥的,轮换对它透明;zashboard 入口用 #/setup?…&secret= 深链自动带密钥,无需手输。
  • 统一回滚一行(脚本每次运行都会打印,并把当次备份路径填进去):
    sudo install -m 600 -o root -g root /etc/sing-box/config.json.bak.<时间戳> /etc/sing-box/config.json && sudo systemctl restart sing-box
  • 脚本对第 5~10 项任一步失败都会自动用当次备份回滚并重启服务(30 秒等待),且会打印同样的手动命令。

五、第 4 步 · 上线流程(先备份 → check → 才生效;失败 10 秒内回滚)

脚本:/home/emo/Documents/deepseek-harness/default-workspace/apply-hardening-2026-10-08.sh(320 行,bash -n 通过,755)

执行顺序:

  1. 前置备份:install -m600 生成 /etc/sing-box/config.json.bak.<TS>,另存一份原配置到临时文件用于失败对照
  2. 备份加固 + 归档(清单 1、2)
  3. 用 python 改写候选配置(清单 5、6、9、10):轮换两个 secret、收紧 CORS/移除 allow_private_network、删除 block 出站、Download.default + Auto/Auto-Japan 剔除下载节点;仅改这些字段,其余字节不动 → 得到最小 diff
  4. 先停服再 sing-box check:避免与正在运行的 eBPF 争用 BPF 资源导致误报;check 失败则按原配置立即 start 并退出(不动线上配置)
  5. 原子替换:install + mv 到 /etc/sing-box/config.json(0600 root)
  6. 写 drop-in + systemctl daemon-reload(清单 4)
  7. 启动 + 全套健康检查:服务 active(30s)→ 端口 7892/9090/9091 → 启动后 journalctl ERROR 计数 → 新密钥 200 / 旧密钥非 200 / 无密钥 401 → CORS 面板源放行且 evil.example 不放行 → 9096 面板 200 → 面板 /api/state 能读到新密钥 → 经 7892 代理 gstatic/generate_204 = 204;任一失败即回滚
  8. 汇总:备份路径、打码 diff、一行回滚命令、新密钥前 6 字符与长度

用法(由你用 sudo 执行):

cd /home/emo/Documents/deepseek-harness/default-workspace
sudo bash apply-hardening-2026-10-08.sh --dry-run   # 只生成候选+check+打印 diff,不落盘不重启(仍会短暂停服做 check)
sudo bash apply-hardening-2026-10-08.sh             # 正式执行

可选:--keep-cors(跳过 CORS 收紧)、--no-routing(跳过选路调整)、--no-retention(跳过备份加固)
说明:脚本为了一次无资源冲突的 check 会短暂停服约 5~10 秒,随后立即以新配置启动;有 flock 单实例锁。

5.1 实际执行结果(2026-10-08)

第一次执行(13:35:51)——误报回滚,正式配置未落盘。

  • 现象:sing-box check 通过 → 原子替换成功 → 健康检查报「端口未监听: 7892 9090 9091」→ 自动回滚,服务恢复。
  • 排查证据:① systemd 日志显示新实例是 Stopping → Deactivated successfully(被脚本主动停),不是崩溃——没有 Main process exited / Failed with result;② 新实例存活 586ms / 538ms、各耗 CPU 538ms,说明它正在正常启动过程中就被判失败;③ 同期测试脚本 T1.3 也报端口缺失,但几秒后 T2/T3 全部连通。
  • 根因(脚本 bug,非配置问题):unit 为 Type=simple,systemctl is-active 在进程 fork 后立即返回 active,而健康检查零等待就查端口;sing-box 加载 17 个 rule-set + eBPF 程序需要数秒。
  • 修复:端口检查改为最长 60 秒轮询(进程若自行退出则立即判失败),真失败时先打印新实例最后 40 行日志再回滚。

第二次执行(13:45:03 生效)——成功。

  • 流程:sing-box check 通过 → 原子替换(16641 B, mode 600)→ 启动 → 全套健康检查通过 → 未触发回滚。
  • 独立复核(emo 权限,13:53 实测):systemd active,MainPID 168960;Wants=network-online.target 已进事务;7892/9090/9091/9096 全部 LISTEN;outbounds 由 22 → 21(block 出站已移除);CORS 对 https://evil.example 不再返回 Access-Control-Allow-Origin,对 http://127.0.0.1:9096 / http://localhost:9096 分别回显该源;无密钥访问 9090 → 401;经 7892 代理 gstatic → 204(0.33s);出口 IP ;新配置启动后 journalctl 无新增 ERROR(最近一条 ERROR 为 13:34:32,属切换前的旧配置)。

六、第 5 步 · 测试

脚本:/home/emo/Documents/deepseek-harness/default-workspace/test-singbox-2026-10-08.sh(302 行,bash -n 通过,755,必须 root)

用例组 覆盖内容
T1 服务面 systemd active、config.json JSON 合法、7892/9090/9091 监听、启动后无 ERROR
T2 国内直连 eBPF 路径下访问国内站点(注意:宿主机 TCP 也被透明接管,这是「direct 规则」路径验证)
T3 显式代理 经 127.0.0.1:7892 取出口 IP + 地区 + 当前节点(/proxies/Auto 的 now)
T4 TCP + UDP SOCKS5 UDP ASSOCIATE 真实 DNS 中继、curl --http3 QUIC
T5 DNS 防泄漏 T5.1 向系统解析器查 o-o.myaddr.l.google.com TXT,看 Google 侧回声是否落在国内;T5.2 记录 Akamai whoami 回声;T5.3 经代理 ipinfo.io 的 org
T6 稳定性 N 秒(默认 60)混合并发负载的成功率 + CPU/RSS
T7 失效切换(可选) nft 临时屏蔽当前节点 IP → 轮询 /proxies/Auto 的 now 直到切换 → 撤规则后再等回落,结束务必 nft delete table inet sbx_test

用法:

sudo bash test-singbox-2026-10-08.sh                    # 60 秒负载
sudo bash test-singbox-2026-10-08.sh --load-seconds 120 --with-failover

6.1 审计期间已完成的真实验证(emo 权限可做的部分,全部通过)

验证项 结果
9090 无密钥 401
9090 带密钥 200
9091/dashboard/ 200
9096 面板首页 200
经 7892 代理生成 204 204
出口 IP 归属 AS134972 IKUUU NETWORK LTD()
出口地区 Cloudflare trace loc=HK colo=HKG
SOCKS5 UDP ASSOCIATE 中继真实 DNS 收到应答 OK,ancount=1
DNS 广告拦截 doubleclick 等 5 域全部 NXDOMAIN
DNS 防泄漏 o-o.myaddr 回声 172.64.214.13 = Cloudflare(境外递归)→ 无 ISP 泄漏
工具可用性 curl(–http3)、jq、python3、flock、nft、ss 齐备

6.2 关于「Akamai 回声是国内 IP」的说明(重要,避免误判为泄漏)

whoami.akamai.net 的回声是 (AS4134 中国电信四川),但这是直连解析分流造成的:该名字命中 must-direct / dns-direct 规则,由国内递归解析器解析,Akamai 权威侧看到的是国内递归地址。CDN/国内域名走直连解析是常见且正确的设计,不是 DNS 泄漏。真正的泄漏判据是 T5.1 的 Google ECS 回声是否落在国内网段——实测落在 Cloudflare,判定通过。

6.3 测试结果(脚本真实输出)

第一次 --load-seconds 60:通过 17 / 失败 0 / 未执行 2;第二次 --load-seconds 120 --with-failover 的 T1~T6 同样全通过。

用例 期望 实测 结论
T1.1 服务状态 active active PASS
T1.2 配置 JSON 合法 合法 PASS
T1.3 监听端口 全部监听 7892/9090/9091 全部监听 PASS
T1.4 近 10 分钟 ERROR 0 0 PASS
T1.5 route.rules / outbounds 11 / 21 11 / 21 PASS(21 印证 block 出站已移除)
T1.6 版本 v1.14.2 v1.14.2-reF1nd PASS
T2.1 / T2.2 国内站点 200 baidu 200 / jd 200 PASS
T2.3 被劫持的 DNS 解析 有 A 记录 183.2.172.177 PASS
T3.1 出口 IP 地区 非 CN JP( / NRT) PASS
T3.2 / T3.3 国外站点 204 / 200 204 / 200 PASS
T3.4 当前出站 有值 Auto → 🇯🇵 日本Z01|IEPL PASS
T4.1 SOCKS5 UDP 中继 收到 DNS 应答 OK,54 字节 ancount=1 PASS
T4.2 QUIC / HTTP3 有响应 200 PASS
T5.1 宿主解析器归属 非国内递归 162.159.111.13(Cloudflare) PASS
T5.2 出口 IP 归属 境外 IDC AS134972 IKUUU NETWORK LTD PASS
T5.2 Akamai 回声 参考项 (直连解析所致,非泄漏,见 6.2) SKIP
T6.1 混合负载成功率 失败 0 60 秒 137/0;120 秒 227/0(代理 114 / 直连 113) PASS
T6.2 资源占用 无异常增长 120 秒内 CPU 0.62s / RSS 峰值 108 MB PASS
T7 失效切换与回落 自动切换 见 6.4 待补

T6 的 137/0 与 227/0 值得单独强调:全程零失败,且两条路径都覆盖了——被 eBPF 透明接管的宿主机直连,与显式代理 127.0.0.1:7892。

6.4 T7(节点失效 → 自动切换 → 恢复回落)

已打印 T7.1:初态 Auto → 🇯🇵 日本Z01|IEPL,节点端口 475。该用例的后续步骤(nft 屏蔽节点 IP → 轮询 /proxies/Auto 的 now 直到切换 → 撤规则 → 等回落 → 删除 sbx_test 表)在贴回的输出里被截断,第二次运行的 结果汇总 表也未贴到,故本节暂记「待补」。

  • 当前实测(13:53,emo 侧独立复核):经 7892 代理 gstatic → 204(0.33s),且存在到 <node-server>:475 / <node-server>:475 的已建立连接 → 链路当前是通的,无残留屏蔽。
  • 补两条即可闭项:sudo nft list tables | grep sbx_test || echo clean,以及 T7 从 T7.1 起到汇总表的剩余输出(若中途 Ctrl-C,脚本 trap 会清理 nft 表,上面那条命令可确认)。

6.5 测试方法自身的两次修正(都不是 sing-box 的问题,如实记录)

  1. 零等待误判端口:见 5.1,已改为 60 秒轮询,并在测试脚本开头同样加了等待,修掉 T1.3 的误报。
  2. www.qq.com 反爬导致的假失败:第一次运行时 T2.2 → 501、T6 出现 138 次「失败」,全部来自同一个 URL——腾讯边缘(Server: stgw)对 curl 默认 UA 直接返回 501,带浏览器 UA 即 200;同批次的 baidu 直连 200、代理路径全部 200。已改为 jd.com 并统一带浏览器 UA。另外把 T6 CPU 计数改成小数秒(原来 120 秒只显示「0s」),T7 的 nft 规则补上 IPv6 分支(本机默认走 IPv6 直连,原规则只写 ip daddr 拦不住),urltest 等待上限 360→480 秒(其检测周期为 5 分钟)。

七、第 6 步 · 回滚步骤与维护建议

7.1 回滚(三层,任选)

  1. 配置回滚(最常用):
    sudo install -m 600 -o root -g root /etc/sing-box/config.json.bak.<时间戳> /etc/sing-box/config.json
    sudo systemctl restart sing-box
    systemctl is-active sing-box && ss -ltn | grep -E '7892|9090|9091'
  2. drop-in 回滚(只撤开机等待网络):sudo rm /etc/systemd/system/sing-box.service.d/20-network-online.conf && sudo systemctl daemon-reload
  3. 备份权限回滚(一般不需要):sudo chmod 755 /etc/sing-box/backups; sudo find /etc/sing-box -maxdepth 1 -name 'config.json.bak.*' -exec chmod 644 {} +

7.2 维护建议

  1. 每季度跑一次本审计的两个脚本(先 –dry-run 看 diff);sing-box 有新版时先在 --dry-run 下核对 deprecated 列表。
  2. 统一脚本来源:只从 /home/emo/pkgbuild-source 运行同步脚本,删除或同步 Singborg 里的旧副本,消除 S1 漂移。
  3. 备份保留:保留「最新 10 份 + 7 天内不归档」,归档文件另存到加密盘更稳妥;备份里含明文凭据,务必保持 600。
  4. 密钥轮换:本次轮换后,建议每 6 个月轮换一次;轮换只需改配置并重启,面板自动跟上。
  5. 待你确认的新项:chmod 600 /var/lib/sing-box/cache.db(当前 644,本地可读 DNS 查询历史)。这不在已授权的 14 项内,你点头我再加进脚本。
  6. 节点口令复用(第 7 项)属服务商侧,建议在服务商面板逐节点改独立口令。
  7. 监控:journalctl -u sing-box -p warning --since today 每周扫一遍;missing default interface 应在 drop-in 生效后不再出现。
  8. 不要把 experimental.clash_api.secret 写回任何会进 git 的文件;generate-sanitized-config.py 修好后再用它生成公开快照。

八、第 6 步交付物索引

交付物 文件
本报告(环境事实 / 调研 / 脚本审计 / 变更清单 / 回滚 / 维护建议) docs/10-审计报告-2026-10-08.md
变更实施脚本(含备份、check、原子替换、健康检查、自动回滚) scripts/apply-hardening-2026-10-08.sh
第 5 步验收测试脚本(T1~T7) scripts/test-singbox-2026-10-08.sh