feat: 完成 issue #19 [M1] 现场勘查采集网/工业环网/办公网拓扑与隔离策略
This commit is contained in:
@@ -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())
|
||||
@@ -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 演示环境或租赁方案。
|
||||
Reference in New Issue
Block a user