3ae96ef229
覆盖前端五端/后端/MySQL/弹性节点拓扑/Web安全/安全总纲,遵循 design/ 设计系统视觉呈现。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
188 lines
11 KiB
HTML
188 lines
11 KiB
HTML
<!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>密码 argon2id;JWT 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>
|