安全设计与无人值守更新
本节聚焦于 NetAccel 的三大安全支柱:
- 全盘加密与唯一设备身份
- 两阶段配置与加密容器迁移
- 无人值守安全更新与审计
1. 全盘加密(LUKS)与唯一设备身份
NetAccel 的根分区使用 LUKS 全盘加密。解密密钥由多源信息派生,例如:
- SoC / 板卡的硬件 ID(chipset SID)
- TF 卡 / SSD 的序列号
- 实验室控制的高熵密钥(lab key)
通过 netaccel-unique-id 服务,在早期启动阶段生成并固定设备身份,
用于:
- 加密容器命名与挂载路径规划
- 在 Liaison 仪表板中唯一标识设备
- 后续配置迁移时,保证“设备仍是原设备”
1.1 启动与身份链(Mermaid)
flowchart TD
A[上电 / 引导启动] --> B[U-Boot / Bootloader]
B --> C[加载内核 + initramfs]
C --> D[initramfs: 解锁 LUKS 根分区
使用 SID + 序列号 + Lab Key 派生密钥]
D --> E[挂载加密根分区 /]
E --> F[systemd: 启动 netaccel-unique-id]
F --> G[生成 /etc/netaccel/unique-id
并供后续服务使用]
G --> H[正常用户空间启动
network, dnsmasq, Clash, Beacon 等]
即使存储介质被物理窃取,没有 SID 和实验室密钥的组合,也无法解锁根分区。
2. 两阶段配置与加密容器迁移
为了支持“金种镜像 + 多台量产设备”的场景,NetAccel 采用两阶段配置:
- 第一阶段(first-boot-provision): 处理与通用镜像相关的初始化,例如重新生成机器 ID、初始唯一 ID 文件、 日志目录、首次 beacon 注册等。
- 第二阶段(lock-and-config): 在设备已确认获得稳定 IP / 子网之后,锁定网络配置、写入持久文件、 生成最终加密容器布局。
通过这种设计,同一张“金种镜像”可以在多台设备上复制,同时又能确保每台设备最后 拥有自己的身份和密钥材料。
3. 无人值守安全更新(Unattended Security Update)
NetAccel 需要在“无人看管”的环境中长时间运行,因此安全更新策略非常关键。
- 使用发行版的
unattended-upgrades或等价机制,自动安装安全补丁。 - 日志写入到加密分区,防止设备被盗后泄露敏感运行信息。
- 对内核 / Bootloader 升级保持谨慎策略,避免远程升级导致启动失败。
3.1 无人值守更新流水线(Mermaid)
flowchart LR
subgraph SCHED["定时任务 / systemd timer"]
A[每日 / 每周 定时触发]
end
A --> B[检查网络可用性
可选:仅在指定时段执行]
B --> C[apt update / 获取安全更新列表]
C --> D[apt upgrade --with-security
或 unattended-upgrades]
D --> E[记录日志到 /var/log/netaccel
(加密分区)]
E --> F[[是否需要重启?]]
F -->|是| G[安排延迟重启
并写入标记文件]
F -->|否| H[保持当前运行状态]
G --> I[安全时段内自动重启]
I --> J[系统启动完成后清理重启标记]
更新策略可以根据部署环境调整,例如:学生公寓、家庭、医院机房, 各自有不同的“允许重启窗口”。
4. 日志与审计
出于隐私与审计平衡考虑,NetAccel 的日志策略遵循:
- 将敏感运行信息写入加密分区内的日志目录(例如
/var/log/netaccel)。 - 对 Beacon / Liaison 相关的记录,仅上传必要的设备状态,不上传用户流量细节。
- 为运维提供可选的“扩展日志模式”,以便在调试网络问题时临时启用。
对医生/学校/研究机构而言,这种设计确保了:
- 可以证明设备在某段时间内“正常运行”。
- 可以定位问题,而不需要窥视具体用户内容。
- 即使设备被盗,日志也不会暴露流量细节。