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,只能执行预定义诊断命令。
架构关系可视化
下图给出该边缘网关的安全架构关系:从现场设备到云端,经过网络分区、主机加固、容器隔离、应用鉴权与数据加密五层控制,每层都体现最小权限与零信任的约束。
关键配置与验证要点
设计完成后,需要用可观察的结果判断是否达成目标。以下给出示例检查项,参数为教学示例,实际部署需按现场调整。
| 检查项 | 示例命令/观察点 | 期望结果 |
|---|---|---|
| 默认拒绝策略生效 | nft list ruleset | input链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权限最小化 | 尝试发布未授权Topic | Broker返回拒绝,连接被断开 |
| 运维证书有效期 | ssh-keygen -L -f cert.pub | Valid约15分钟,Principals限定为ops角色 |
把四条原则落到边缘网关,最终体现为一张可检查的配置清单:网络默认拒绝、主机默认关闭、进程默认无特权、身份默认双向验证、凭据默认短期且可吊销。架构设计阶段就把这些约束写进镜像、策略和证书体系,后续运维才不需要靠“记得改配置”来维持安全。