4. 安全架构设计原则

IoT系统的安全架构不是把若干安全产品堆叠在一起,而是用一组稳定的设计原则去约束每一个组件、接口和运维动作。本章聚焦四条原则:最小权限、纵深防御、安全默认值、零信任,并以一个典型的边缘网关安全架构设计任务为载体,说明它们如何落到具体的分区、接口、凭据和策略上。

四条原则在IoT语境下的含义

最小权限要求任何主体(用户、进程、设备、服务账号)只拥有完成其当前任务所必需的最小能力集合,并且这种能力应当有明确的时间边界和范围边界。在IoT中,它既包括云端账号的RBAC角色,也包括网关内部进程的Linux能力集、容器权限、文件系统挂载范围,以及设备证书所允许的Topic与操作。

纵深防御承认任何单层防护都可能失效,因此在物理、网络、主机、应用、数据、身份等层面设置相互独立的控制点,使攻击者突破一层后仍需面对下一层。对边缘网关而言,典型层次是:现场总线/串口隔离、网关防火墙与网段划分、主机加固与只读根文件系统、容器/进程隔离、应用层鉴权与消息校验、数据加密与审计。

安全默认值指设备或系统在未做任何额外配置时,就处于安全状态:无默认口令、默认关闭不必要的服务与端口、默认启用加密、默认拒绝而非默认放行、首次启动强制完成凭据注入。它直接决定大规模部署时的“基线安全水位”。

零信任的核心是“永不信任、持续验证”,不再因为请求来自内网就默认放行。在IoT中表现为:设备与网关之间双向认证、每次会话独立授权、按最小权限下发短期凭据、对异常行为持续评估并动态收敛权限。

设计任务:某工业边缘网关的安全架构

假设场景:一台边缘网关部署在工厂车间,向下通过Modbus RTU采集3台PLC数据,向上通过MQTT over TLS接入云平台;本地运行一个数据采集容器和一个协议转换容器;运维人员需要远程SSH登录排障。我们按四条原则给出可落地的设计。

1. 网络分区与纵深防御。网关配置三个逻辑接口:eth0接车间OT网段(仅允许Modbus TCP/RTU网关流量),eth1接管理网段(仅允许运维跳板机访问),wwan0接云端。使用nftables建立默认拒绝策略,仅放行必要方向:

table inet gw {
  chain input {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    iif eth0 ip saddr 192.168.10.0/24 tcp dport 502 accept
    iif eth1 ip saddr 10.20.0.0/24 tcp dport 22 accept
    iif wwan0 tcp dport 8883 accept
    iif lo accept
  }
}

这样即使OT网段某台设备被攻陷,也无法直接访问管理网段或云端管理端口,形成第一层网络纵深。

2. 最小权限的进程与容器设计。采集容器以非root用户运行,仅挂载/dev/ttyS0设备节点,使用--cap-drop=ALL --cap-add=NET_RAW,根文件系统只读,/tmp使用tmpfs。协议转换容器不直接访问串口,只通过本地Unix Socket接收采集容器的数据。这样即使转换容器被利用,也无法直接操作串口或修改系统文件。

3. 安全默认值与首次启动。网关出厂镜像默认关闭SSH密码登录,仅保留基于密钥的登录;默认不监听任何公网端口;首次上电时通过安全引导流程注入设备证书和云端接入凭据,未完成注入前采集服务不启动。默认配置中PermitRootLogin no、PasswordAuthentication no,并强制TLS 1.2以上。

4. 零信任的设备与用户接入。每台PLC通过网关的Modbus代理访问,代理对每个请求校验源设备证书与目标寄存器白名单;云端MQTT使用双向TLS,网关证书由云端IoT平台签发,Topic权限按设备ID绑定,例如只允许发布gw/{gwId}/telemetry、订阅gw/{gwId}/cmd。运维人员SSH登录必须经过跳板机,并使用短期证书(有效期15分钟),登录后进入受限shell,只能执行预定义诊断命令。

架构关系可视化

下图给出该边缘网关的安全架构关系:从现场设备到云端,经过网络分区、主机加固、容器隔离、应用鉴权与数据加密五层控制,每层都体现最小权限与零信任的约束。

边缘网关安全架构:四原则落地关系 现场设备层 PLC-1 / Modbus RTU PLC-2 / Modbus RTU PLC-3 / Modbus RTU 边缘网关(纵深防御五层) ① 网络分区与防火墙 eth0 OT网段 · eth1 管理网段 · wwan0 云端;默认拒绝,仅放行必要端口 ② 主机加固与安全默认值 只读根文件系统 · 关闭密码登录 · 默认无监听端口 · 首次启动注入证书 ③ 容器/进程最小权限 非root · cap-drop ALL · 仅挂载必要设备 · Unix Socket 内部通信 ④ 应用层鉴权与零信任 双向TLS · 设备证书 · Topic白名单 · 短期运维证书 ⑤ 数据加密与审计 TLS 1.2+ · 本地日志完整性 · 关键操作审计留痕 云端平台 MQTT Broker (8883) 设备身份与策略中心 运维通道 跳板机 + 短期证书 受限Shell诊断命令 Modbus MQTT/TLS SSH 四原则映射 最小权限:容器/账号/证书范围 纵深防御:五层独立控制 安全默认值:出厂即安全 零信任:持续验证与短期凭据

关键配置与验证要点

设计完成后,需要用可观察的结果判断是否达成目标。以下给出示例检查项,参数为教学示例,实际部署需按现场调整。

检查项示例命令/观察点期望结果
默认拒绝策略生效nft list rulesetinput链policy为drop,仅列出白名单规则
SSH密码登录关闭sshd -T | grep -E 'passwordauth|permitroot'passwordauthentication no,permitrootlogin no
容器权限收敛docker inspect --format '{{.HostConfig.CapDrop}}'CapDrop包含ALL,CapAdd仅NET_RAW
MQTT双向认证抓包观察TLS握手客户端与服务端均发送证书,TLS 1.2以上
Topic权限最小化尝试发布未授权TopicBroker返回拒绝,连接被断开
运维证书有效期ssh-keygen -L -f cert.pubValid约15分钟,Principals限定为ops角色
安全默认值不是“默认不安全再让用户改”,而是“默认安全,用户按需放开”。在批量部署中,默认值决定了最差情况下的安全水位,因此应把关闭密码登录、默认拒绝、强制加密作为不可协商的出厂基线。
零信任不等于“所有流量都加密”就够了。若网关仍以静态长期密钥接入云端,且该密钥可被复制到其他设备,则身份不可信。应使用每设备唯一证书,并支持云端吊销与轮换,才能让“持续验证”真正成立。

把四条原则落到边缘网关,最终体现为一张可检查的配置清单:网络默认拒绝、主机默认关闭、进程默认无特权、身份默认双向验证、凭据默认短期且可吊销。架构设计阶段就把这些约束写进镜像、策略和证书体系,后续运维才不需要靠“记得改配置”来维持安全。