diff --git a/docs/private-dest-acl-design.html b/docs/private-dest-acl-design.html index f5d7bc6..059364c 100644 --- a/docs/private-dest-acl-design.html +++ b/docs/private-dest-acl-design.html @@ -234,7 +234,8 @@ journalctl -u pangolin-agent -n 20 # 确认已重渲染、无 ACL ERROR
render.go:14 的「节点只见不透明 dp_uuid」不变式,属于知情接受,需在该注释处补一行说明。assertNoIdentityFields(agentd/singbox_test.go)只作用于 state.json,从不检查渲染出的 sing-box 配置。本设计不扩大这个缺口,但也没有补上——补闸另开。brain/git,节点侧唯一的区分手段是 sniff 出的 SNI。攻击者(持有效 dp_uuid 的其他 pangolin 用户)向 182.92.213.171:443 发起不带 SNI 的 TLS、握手后用 Host: brain.51yanmei.com 头访问,则不匹配任何 domain 规则、也不匹配 ip_cidr(443 不在端口清单里)→ 落 final:direct → nginx 按 Host 路由放行。这在 sing-box 层无法闭合——不能整封 :443,否则 jiu/travel/sudoku/pay 一起死。因此下面这条 brain 鉴权不是「可选纵深」,而是本闸对 brain 的前置条件。/etc/nginx/conf.d/brain.conf 在原有 allow 103.119.13.48; deny all 之上叠加 auth_basic(satisfy 默认 all → 源 IP 白名单 与 口令二者都需满足),口令存 Bitwarden「brain basic auth」,htpasswd 仅存 apr1 哈希(明文不落 ali)。acme 通道(:80)与 robots.txt 免密。这样即便本节点 ACL 闸失效(agent 挂了、配置手抖)或被上面的 SNI 手法绕过,brain——唯一无自带鉴权的私有服务——仍不裸奔。相关:~/code/brain/docs/remote-access-brain-domain.html(brain 外网入口与出口 IP 白名单)· baize 台账 ~/code/baize/data/{hosts,domains}.yaml