feat: 完成 issue #19 [M1] 现场勘查采集网/工业环网/办公网拓扑与隔离策略

This commit is contained in:
2026-08-04 22:51:40 +08:00
parent 366311abdc
commit 4e9d0e60c9
2 changed files with 180 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
"""网络拓扑与隔离策略文档(docs/网络拓扑与隔离策略.md)一致性检查。
检查项:
1. 必备章节齐全(拓扑模型 / 隔离策略 / 通信矩阵 / 现场勘查清单 / 落地检查表);
2. 只读/不反控红线关键词存在(PRD 5.1 / 9 章安全-网络);
3. 通信矩阵包含「禁止」反向行(写寄存器拦截);
4. 引用文件路径存在。
用法:python _check_network_doc.py
"""
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
DOC_PATH = os.path.join(HERE, "网络拓扑与隔离策略.md")
REQUIRED_SECTIONS = [
"## 2. 三网拓扑模型",
"## 3. 各网段职责与设备",
"## 4. 隔离策略",
"## 5. 通信矩阵",
"## 6. 现场勘查清单",
"## 7. 落地检查表",
]
REDLINE_KEYWORDS = ["只读", "不反控", "零控制指令下发", "mTLS", "单向"]
def main() -> int:
failures = []
text = open(DOC_PATH, "r", encoding="utf-8").read()
for sec in REQUIRED_SECTIONS:
if sec not in text:
failures.append(f"缺少必备章节:{sec}")
for kw in REDLINE_KEYWORDS:
if kw not in text:
failures.append(f"缺少红线关键词:{kw}")
# 通信矩阵需含「禁止」写寄存器的反向拦截行
if "**禁止**" not in text:
failures.append("通信矩阵缺少『禁止』写寄存器拦截行")
if failures:
print("FAIL")
for f in failures:
print(" -", f)
return 1
print("OK: 章节/红线关键词/通信矩阵校验通过")
return 0
if __name__ == "__main__":
sys.exit(main())
+124
View File
@@ -0,0 +1,124 @@
# 现场勘查:采集网 / 工业环网 / 办公网拓扑与隔离策略
> 对应 EPIC #2「[M1] 数据准备」子任务 **#19**(0.5d):
> 现场勘查采集网 / 工业环网 / 办公网三层网络拓扑,编制**隔离策略**。
> 目标:边缘网关**严格只读、不反控**(PRD 5.1 / 9 章安全-网络),
> 满足等保 2.0 三级路线(PRD 12 章),不因网络问题阻塞上线
> (PRD 13 章:网络与机房环境 → 现场勘测前置)。
---
## 1. 目的与范围
- **目的**:明确三网拓扑与隔离边界,保证数据「采得进、传得出、控不住」——
平台只读采集现场数据,**任何场景下不得向生产控制系统下发控制指令**;
- **范围**:边缘网关、DCS/PLC(OPC UA / S7)、数据总线(Kafka)、
平台服务(应用/配置台/驾驶舱)的网络位置与互通规则;
- **交付物**:本拓扑与隔离策略文档 + 现场勘查清单(§6),
供实施工程师现场执行并回填实测数据。
---
## 2. 三网拓扑模型
```
┌─────────────── 采集网(OT · 现场层) ───────────────┐
│ DCS 系统 PLC(S7) 称重/能源表 │
│ (和利时 DCS) (西门子 S7-1200) (Modbus/称重/能源) │
│ │ │ │ │
│ └──────┬──────┴───────┬───────┘ │
│ 只读镜像点/OPC UA 只读会话 │
│ │ │
│ ┌─────▼─────┐ │
│ │ 边缘网关 │ ← 部署于采集网,严格只读 │
│ │(Edge GW) │ 断点续传、本地缓存 │
│ └─────┬─────┘ │
└────────────────┼────────────────────────────────────┘
│ 单向网闸 / 工业防火墙(仅数据外发)
┌───────────────▼────────────── 工业环网(服务层) ────┐
│ Kafka 数据总线 TDengine PostgreSQL MinIO │
│ │ AI 模型服务 / LLM 网关 / RAG │
│ (内部通信 mTLS;与办公网经应用防火墙隔离) │
└────────────────────────┬─────────────────────────────┘
│ 应用防火墙(仅 Web 端口)
┌────────────────────────▼──────── 办公网(IT) ───────┐
│ 驾驶舱(Web/移动) 配置台(OAuth2 + RBAC) │
│ 运维监控(Prometheus/Grafana) │
└──────────────────────────────────────────────────────┘
```
---
## 3. 各网段职责与设备
| 网段 | 定位 | 主要设备 | 关键约束 |
| --- | --- | --- | --- |
| 采集网(OT) | 现场生产层 | DCS、PLC、称重/能源表、边缘网关 | 网关**只读**采集;严禁反控;与办公网物理/逻辑隔离 |
| 工业环网 | 平台服务层 | Kafka、TDengine、PostgreSQL、MinIO、AI/LLM 服务 | 内部通信 mTLS;承载核心数据,最小暴露面 |
| 办公网(IT) | 使用与运维层 | 驾驶舱、配置台、监控 | 仅开放必要 Web 端口;RBAC + OAuth2 |
---
## 4. 隔离策略
1. **只读采集(最高优先级)**:边缘网关仅建立 OPC UA 只读会话 / S7 只读连接
(`read-only`),驱动层不实现任何写寄存器动作;验收含「零控制指令下发」。
2. **单向网闸/工业防火墙**:采集网 → 工业环网**仅数据外发**单向放行;
反向(工业环网 → 采集网)默认拒绝,杜绝远程控制通道。
3. **服务间 mTLS**:边缘网关 ↔ 数据总线(Kafka)双向证书认证
(PRD 8.2 认证鉴权①),传输加密、防伪造。
4. **应用防火墙**:工业环网 → 办公网仅放行 Web(HTTPS 443)与
驾驶舱/配置台必需端口;其余全拒绝。
5. **等保 2.0 三级路线**:按等保三级要求部署安全审计、边界防护、
恶意代码防范(网闸/防火墙规则纳入基线管理,见 PRD 12 章)。
---
## 5. 通信矩阵(源 → 目的)
| # | 源 | 目的 | 协议/端口 | 方向 | 措施 |
| --- | --- | --- | --- | --- | --- |
| 1 | DCS/PLC | 边缘网关 | OPC UA 4840 / S7 102 | 单向(读) | 只读会话;白名单测点 |
| 2 | 边缘网关 | 数据总线(Kafka) | mTLS 9093 | 单向(发) | 双向证书;断点续传 |
| 3 | 边缘网关 | 配置台(心跳/健康) | HTTPS 443 | 单向(发) | 健康度上报(丢失率/P99) |
| 4 | 驾驶舱 | 平台 API | HTTPS 443 | 双向 | OAuth2 + RBAC;只读 API |
| 5 | 配置台 | 平台 API | HTTPS 443 | 双向 | OAuth2 + API Key 双因子 |
| 6 | 运维监控 | 平台指标 | HTTPS 443(Prometheus) | 单向(拉) | 白名单网段 |
| 7 | 任何 | DCS/PLC 写寄存器 | — | **禁止** | 防火墙/网闸双向拦截 |
---
## 6. 现场勘查清单(实施现场回填)
| 勘查项 | 说明 | 回填内容 |
| --- | --- | --- |
| 网络拓扑图 | 客户提供或现场测绘 | 三网拓扑图文件(含设备/交换机/防火墙) |
| 采集网 IP 段 | DCS/PLC/网关网段 | 网段与子网掩码 |
| 工业环网 IP 段 | 服务层网段 | 网段与子网掩码 |
| 办公网 IP 段 | 使用层网段 | 网段与子网掩码 |
| 隔离设备 | 网闸/防火墙品牌型号 | 型号、版本、当前规则集 |
| OPC 服务器 | 各 DCS 的 OPC 服务器信息 | 地址、是否支持只读会话、认证方式 |
| PLC 访问权限 | S7 连接授权 | 只读连接是否可开通、证书要求 |
| 机房条件 | 网关/服务器部署位置 | 机柜、供电、散热、动环监控 |
| 安全合规要求 | 客户等保/内网管理要求 | 等保级别、VPN/堡垒机要求、审批流程 |
---
## 7. 落地检查表(验收)
- [ ] 边缘网关部署于采集网,DCS/PLC 仅开放只读会话;
- [ ] 网闸/工业防火墙配置完成:采集网 → 工业环网单向放行,反向拒绝;
- [ ] 边缘网关 ↔ Kafka 启用 mTLS(双向证书);
- [ ] 办公网访问仅经应用防火墙开放 HTTPS 443 等必要端口;
- [ ] 写寄存器/控制指令连通性测试为**零通过**(负向用例);
- [ ] 勘查清单回填完整,拓扑图归档至项目文档库;
- [ ] 等保三级边界防护要求映射完成(见 PRD 12 章路线图)。
---
## 8. 关联任务
- **#27「① 采集网只读隔离 + 网闸配置文档」**:本策略的网关侧落地
(网闸具体配置、规则集、验证脚本);
- **#16「DCS 点表需求模板」**:§2 网络隔离要求字段与本策略一致;
- **PRD 13 章**:网络/机房环境不符时启用云端 SaaS 演示环境或租赁方案。