Files
pangolin/doc/06-security.html
T
wangjia 3ae96ef229 docs: 新增整体架构设计文档(doc/,HTML 七章)
覆盖前端五端/后端/MySQL/弹性节点拓扑/Web安全/安全总纲,遵循 design/ 设计系统视觉呈现。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 23:57:49 +08:00

188 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>06 安全总纲 · 穿山甲架构设计</title>
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<header class="site-header"><div class="inner">
<a class="brand" href="index.html"><img src="assets/logo-mark.svg" alt="Pangolin"><span><span class="zh">穿山甲 · 架构设计</span><br><span class="en">Pangolin Architecture</span></span></a>
<nav class="site-nav">
<a href="index.html">总览</a>
<a href="01-frontend.html">01 前端</a>
<a href="02-backend.html">02 后端</a>
<a href="03-database.html">03 数据库</a>
<a href="04-infra.html">04 网络拓扑</a>
<a href="05-web-security.html">05 Web 安全</a>
<a href="06-security.html" class="active">06 安全总纲</a>
</nav>
<button class="theme-btn" id="themeBtn" title="切换深浅主题"><i data-lucide="moon"></i></button>
</div></header>
<main class="doc">
<div class="doc-hero">
<div class="overline">Chapter 06 · Security</div>
<h1>安全总纲</h1>
<p class="lede">安全是本项目的第一优先级,且分三个互不混淆的层面:<strong>运营者安全</strong>(身份隔离)、<strong>系统安全</strong>(攻击面与数据保护)、<strong>可用性安全</strong>(被封/断网后的存活)。任何功能与安全冲突时,安全赢。</p>
</div>
<section id="threat-model">
<h2><span class="num">§1</span>威胁模型总表</h2>
<div class="tbl-wrap"><table>
<thead><tr><th>资产</th><th>威胁</th><th>对策</th><th>详见</th></tr></thead>
<tbody>
<tr><td><strong>运营主体身份</strong></td><td>服务器/域名/收款被关联追踪</td><td>全链路境外身份、加密货币付款、WHOIS 隐私、专用管理环境;各资产间零身份交叉</td><td>本章 §2</td></tr>
<tr><td><strong>用户库</strong>(邮箱)</td><td>控制面被入侵、备份泄露</td><td>管理端内网+2FA、最小攻击面、备份 age 加密 + 私钥离线、audit_log</td><td>02/03/05 章</td></tr>
<tr><td><strong>用户行为隐私</strong></td><td>连接行为被记录/关联</td><td>无日志口径(仅字节/分钟)、节点零用户库(只见 dp_uuid)、DoH、Kill-switch</td><td>本章 §4</td></tr>
<tr><td><strong>数据面节点</strong></td><td>IP 被识别封锁、机器被抄</td><td>REALITY 无指纹 + Hy2 端口跳跃、三层拓扑、判封自动换、节点无状态零数据</td><td>04 章</td></tr>
<tr><td><strong>Web 入口</strong></td><td>域名被墙、源站被定位、DDoS</td><td>CDN 前置、域名池 + 冷备、源站隐藏、全资产可秒建</td><td>05 章</td></tr>
<tr><td><strong>资金流</strong></td><td>收款账户冻结、被关联</td><td>App 内零支付;USDT(TRC20) + 发卡店,通道可热切换,绝不绑实名账户</td><td>02 章 §4</td></tr>
<tr><td><strong>客户端</strong></td><td>安装包被篡改、端点被伪造</td><td>安装包签名 + 多渠道校验值;端点/公告更新 Ed25519 验签;敏感参数按渠道分包</td><td>01 章 §4</td></tr>
</tbody>
</table></div>
</section>
<section id="redlines">
<h2><span class="num">§2</span>身份隔离红线(继承 plan/security,任何阶段不得触碰)</h2>
<div class="callout danger"><b>红线清单</b>
<ul>
<li>不得用国内真实身份注册任何环节(服务器、域名、CDN、对象存储、收款、应用商店)。</li>
<li>管理后台不得暴露公网(仅内网/白名单 + 强口令 + 2FA)。</li>
<li>节点不得保留连接日志。</li>
<li>收款不得绑定个人实名账户。</li>
<li>服务器、域名、支付、邮箱、手机号之间不得产生可被关联的身份线索;管理操作只在专用环境进行。</li>
</ul></div>
<p class="muted">架构上的落实:providers 凭证、域名注册商、CDN 账号、备份存储账号全部独立身份并在文档中登记隔离关系;CI/CD 与管理操作走专用通道。</p>
</section>
<section id="system">
<h2><span class="num">§3</span>系统安全基线(汇总各章)</h2>
<div class="grid2">
<div class="card">
<h4 style="margin-top:0">控制面</h4>
<ul style="margin-bottom:0">
<li>管理端独立监听:内网 + IP 白名单 + 2FA</li>
<li>SSH 仅密钥、禁 root 口令、最小开放端口</li>
<li>密码 argon2idJWT RS256 密钥轮换;TLS 1.3</li>
<li>验证码/兑换/登录全限流 + 失败锁定 + 防一次性邮箱</li>
<li>敏感操作全量 <code>audit_log</code></li>
</ul>
</div>
<div class="card">
<h4 style="margin-top:0">数据面</h4>
<ul style="margin-bottom:0">
<li>节点零用户库:只持有 dp_uuid 表,被抄一台不泄露任何账号</li>
<li>agent ↔ 控制面双向 mTLS,证书绑节点、回收即吊销</li>
<li>节点间隧道密钥按节点对发放</li>
<li>节点无状态、无日志、无持久数据(04 章 §2)</li>
</ul>
</div>
<div class="card">
<h4 style="margin-top:0">密码学口径</h4>
<ul style="margin-bottom:0">
<li>口令哈希 argon2id;激活码库内只存 SHA-256</li>
<li>端点/公告分发 Ed25519 签名,公钥随安装包内置</li>
<li>备份 age 公钥加密,私钥离线两地保存</li>
<li>内部 CA 签发 agent 证书,根私钥离线</li>
</ul>
</div>
<div class="card">
<h4 style="margin-top:0">客户端</h4>
<ul style="margin-bottom:0">
<li>凭证存 Keychain / Keystore,不落明文</li>
<li>Kill-switch 默认开;DoH 防 DNS 泄露;阻 WebRTC 泄露</li>
<li>安装包多渠道发布 + 校验值公示</li>
<li>敏感内置参数按分发渠道分包轮换</li>
</ul>
</div>
</div>
</section>
<section id="privacy">
<h2><span class="num">§4</span>无日志口径(写进隐私政策并据实执行)</h2>
<div class="tbl-wrap"><table>
<thead><tr><th>数据</th><th>是否保留</th><th>说明</th></tr></thead>
<tbody>
<tr><td>浏览内容 / 目的地址 / DNS 查询</td><td><span class="pill bad"><span class="dot"></span>不记录</span></td><td>节点与控制面均无此数据,技术上不可补记</td></tr>
<tr><td>连接日志(谁何时连了哪个节点)</td><td><span class="pill bad"><span class="dot"></span>不记录</span></td><td>节点 no-log;控制面仅 connect 校验通过与否的限流计数(短 TTL)</td></tr>
<tr><td>用量字节数 / 分钟数(按日聚合)</td><td><span class="pill warn"><span class="dot"></span>保留</span></td><td>计费与免费额度所需的最小元数据(usage_daily</td></tr>
<tr><td>账号(邮箱)、设备名、最后活跃</td><td><span class="pill warn"><span class="dot"></span>保留</span></td><td>登录与设备数限制所需;不收集真实身份</td></tr>
</tbody>
</table></div>
<p class="muted">对外文案遵守设计铁律 13 的脱敏口径:「我们不记录你的浏览数据 · 端到端加密」。</p>
</section>
<section id="offline-matrix">
<h2><span class="num">§5</span>断网应对策略矩阵(端 × 故障)</h2>
<p>「断网」指各类不可达事件。目标排序:① 已连接用户不掉线 → ② 能重连 → ③ 能获取新入口 → ④ 能联系到我们。</p>
<div class="tbl-wrap"><table>
<thead><tr><th>故障 \ 端</th><th>移动 / 桌面客户端</th><th>Web 用户中心</th><th>官网</th></tr></thead>
<tbody>
<tr>
<td><strong>API 不可达</strong>(单域名)</td>
<td>端点池自动故障转移(域名池→IP 直连→DoH 重解析),用户无感</td>
<td>同源 API 池故障转移;只读功能照常</td>
<td>纯静态,不依赖 API</td>
</tr>
<tr>
<td><strong>API 全灭</strong>(控制面宕机)</td>
<td>缓存目录 + 已下发凭证继续连接(数据面独立);登录/兑换暂停,连接不受影响</td>
<td>暂不可用,公告位提示</td>
<td>照常;展示状态公告</td>
</tr>
<tr>
<td><strong>节点大面积被封</strong></td>
<td>URLTest 自动切存量好节点;目录刷新拿补充节点;极端时启用内置应急节点</td>
<td>订阅导入页提示刷新订阅</td>
<td>不受影响</td>
</tr>
<tr>
<td><strong>域名被墙 / DNS 污染</strong></td>
<td>DoH 绕污染 → 失败走 IP 直连 → 签名端点更新拿新域名</td>
<td>切镜像域名(公告/TG 广播)</td>
<td>切镜像域名(≥2 活跃镜像常备)</td>
</tr>
<tr>
<td><strong>用户本地断网</strong>(非封锁)</td>
<td>连接键回 off 态 + 明确文案;Kill-switch 防泄露;网络恢复自动重连</td>
<td>浏览器原生提示</td>
<td></td>
</tr>
<tr>
<td><strong>一切在线途径失效</strong></td>
<td>内置应急节点拉新目录;客户端内「联系我们」展示 TG/LINE/邮箱(离线可见)</td>
<td colspan="2">TG 频道为最终广播渠道;安装包在 GitHub/网盘多镜像可获取</td>
</tr>
</tbody>
</table></div>
<div class="callout ok"><b>设计自检</b>上表每个格子都不依赖「正在故障的那个组件」自身恢复——客户端兜底链(缓存 → 端点池 → DoH → 签名更新 → 应急节点 → TG)层层递降,每层的信任锚(内置公钥、应急参数)都在安装包内离线可用。</div>
</section>
<section id="review">
<h2><span class="num">§6</span>安全例行制度</h2>
<ul>
<li><strong>每月</strong>:灾备演练(05 章 §4);备份恢复验证;依赖漏洞审计。</li>
<li><strong>每季</strong>:JWT 密钥与回源鉴权轮换;伪装 SNI 评估;红线清单自查(对照 §2 逐条核)。</li>
<li><strong>每次发版</strong>:设计验收清单(铁律 13 条)+ 脱敏文案扫描(CI 关键词检查 UI 文案资源)。</li>
<li><strong>事件后</strong>node_events / audit_log 复盘,更新判封阈值与 runbook。</li>
</ul>
</section>
</main>
<nav class="pager">
<a href="05-web-security.html"><span>上一章</span><b>← 05 Web 安全与灾备</b></a>
<a class="next" href="index.html"><span>返回</span><b>总览 →</b></a>
</nav>
<footer class="colophon">穿山甲 · Pangolin — 内部架构设计文档 · 遵循 design/ 设计系统 · 2026-06</footer>
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js"></script>
<script src="assets/doc.js"></script>
</body>
</html>