tonylturner/rangerdanger

GitHub: tonylturner/rangerdanger

一个基于 Docker 的 OT/ICS 工控安全靶场,通过真实 DPI 防火墙和变电站仿真环境提供动手式网络分段培训。

Stars: 0 | Forks: 0

RangerDanger
An OT/ICS cyber range for hands-on network segmentation training.

CI Release License: Apache 2.0 Go Next.js Docker containd

一个运行在 Docker 中的模拟配电变电站——包含多区域网络、使用 Modbus 和 DNP3 协议的现场设备、一个多宿主 RTAC,以及位于边缘且具备真实 DPI 功能的防火墙([containd](https://github.com/tonylturner/containd))。学生将完成与 **DefendICS** 研讨会对应的 7 个实验:识别所需流量、设计网络分段、在劳动力预算下进行规划、构建安全策略、通过攻击对其进行压力测试,并使用 PCAP 证据进行验证。 ## 外观展示
Substation Network Map Network Map - IEC 62443 zone bands (Enterprise SL-1 / DMZ SL-2 / Supervisory SL-3 / Field SL-2) with live policy state. The containd NGFW sits at the conduit; hardened-policy mode marks blocked enterprise→field paths with red ✗.
Feeder HMI Feeder HMI - live customer service, voltage quality, and protection state from the RTAC via OpenDSS. When a student attacks a Modbus or DNP3 endpoint, voltage and energization update here within ~3 seconds.
Exercises list Exercises - 7 labs aligned to the DefendICS workshop deck (1.2 / 1.3 / 1.4 / 2.2 / 2.3 / 2.3-bonus / 2.4). Per-lab progress, time budgets, tag filtering.
Lab runner Lab runner - step-by-step instructions, inline terminals, persistent notes, live config-state checks. The yellow banner fires when the firewall is on a config the step doesn't expect, with a one-click reset.
## 快速开始 **前置条件:** Docker Desktop 或 Docker Engine + Compose v2 · 16 GB 主机内存(推荐 32 GB),且至少为 Docker VM 分配 8 GB · 30 GB 可用磁盘空间 · Apple Silicon 或 x86_64 架构 · 回环端口 `8088 / 9080 / 9443 / 2222` 未被占用。 **macOS / Linux:** ``` git clone https://github.com/tonylturner/rangerdanger cd rangerdanger ./setup.sh ``` **Windows (PowerShell):** ``` git clone https://github.com/tonylturner/rangerdanger cd rangerdanger .\setup.ps1 ``` **从源码构建**(开发者): ``` docker compose up -d --build ``` **离线 / SSD**(适用于带宽受限的研讨会): ``` ./setup.sh --from-tarballs /Volumes/WORKSHOP_SSD ``` 使用 `./stage-ssd.sh /Volumes/WORKSHOP_SSD vX.Y.Z` 将数据写入 SSD,或者从 [GitHub releases](https://github.com/tonylturner/rangerdanger/releases) 下载各版本的 tar 包。完整的安装步骤(包括离线安装路径和常见错误)请参阅:[`docs/quickstart.md`](docs/quickstart.md)。 容器栈启动后: | | URL | 凭证 | |---|---|---| | **RangerDanger UI** | http://localhost:8088 | - | | containd Web UI | http://localhost:9080 | containd / containd | | containd SSH | `ssh -p 2222 containd@localhost` | containd / containd | | FUXA HMI | http://localhost:8088/apps/fuxa-hmi/ | - | | OpenPLC | http://localhost:8088/apps/openplc/ | - | 打开 [http://localhost:8088/exercises](http://localhost:8088/exercises) 并从 **实验 1.2** 开始。 ## 学生将做什么 与 DefendICS OT 网络分段研讨会议程对齐——6 个核心实验 + 1 个额外实验,总计约 105 分钟。 | 实验 | 标题 | 时长 | 重点关注 | |-----|-------|------|-------| | 1.2 | 基线流量分析 | 15 分钟 | 捕获并分析跨区域流量;识别关键通道 | | 1.3 | 分段需求与策略设计 | 15 分钟 | 将分析结果转化为区域对规则矩阵 + DPI 策略 | | 1.4 | 受限条件下的补救规划 | 15 分钟 | 在有限的劳动力和单角色预算下选择修复方案 | | 2.2 | 防火墙策略实施 | 30 分钟 | 根据规划构建最小权限的 containd 策略 | | 2.3 | 协议强化配置 | 15 分钟 | 针对 Modbus 覆盖和 DNP3 注入进行压力测试(DPI 课程) | | 2.3-bonus | 供应商远程访问攻陷 *(可选)* | 15 分钟 | 从企业网络到供应商网络再到现场的 RDP/VNC 横向移动 | | 2.4 | 测试与验证 | 15 分钟 | 全面正向/反向测试 + PCAP 证据 + 总结复盘 | 每个实验均包含内嵌终端、自动运行命令按钮、各练习的备注,以及用于检查变电站状态、抓包文件和防火墙策略的后端验证器。早期实验中的选择会延续到后续实验中——你在实验 1.4 中的规划将重写你在 2.2 / 2.3 / 2.3-bonus / 2.4 中看到的步骤。 ## 为什么与众不同 大多数 OT 培训实验会退而使用 iptables 并流于表面。RangerDanger 使用了 [containd](https://github.com/tonylturner/containd)——一款专为 ICS 深度包检测构建的下一代防火墙(NGFW)——因此学生可以看到并控制 Modbus 功能码、DNP3 直接操作命令以及流量,其精细度与现代具备 OT 意识的防火墙实际能实现的效果完全一致。 | 典型的 OT 实验 | RangerDanger | |----------------|--------------| | iptables 或 OPNsense | 带有 ICS DPI 功能的 containd NGFW(Modbus, DNP3, CIP) | | 分别使用不同工具进行抓包、IDS、SCADA | 提供集成 DPI 可视性的统一 Web UI | | 静态、手动配置的容器 | 按实验进行动态 compose 编排 | | Notion 工作簿或 PDF | 带有内嵌终端和自动验证的交互式运行器 | | 每个实验机位需要真实虚拟机 | 轻量级容器 - 可在笔记本电脑上运行 | ## 架构概览 一个 Next.js 仪表板为 Go + Gin 后端提供前端界面,后者负责编排 Docker 容器,通过 REST 与 containd 通信,并运行场景验证器。现场设备模拟器基于共享状态实现了 Modbus TCP + DNP3 TCP + REST,并由 OpenDSS 提供馈线物理模拟。系统共有五个网络区域;所有跨区域流量都经由 containd 防火墙传输——包括 RTAC → 现场设备的流量,通过 `rtac-harden.sh` 进行内核绑定,从而使多宿主 RTAC 无法绕过安全策略。 ``` flowchart LR Browser([Student browser]) subgraph Mgmt["mgmt_net · 10.99.99.0/24 · lan3"] Proxy[nginx proxy] Backend[Backend
Go + Gin] Frontend[Frontend
Next.js 14] end subgraph FW["containd NGFW · multi-homed across all 4 zones"] Containd[Web UI · SSH · ICS DPI
nft engine] end subgraph Ent["enterprise_net · 10.10.10.0/24 · wan"] Kali[kali · attacker] CorpWS[corp-ws] end subgraph Vendor["vendor_net · 10.20.20.0/24 · dmz"] VJump[vendor-jump · RDP/VNC/SSH] EngWS[eng-ws · webtop] end subgraph OT["ot_ops_net · 10.30.30.0/24 · lan1"] RTAC[RTAC
10.30.30.20] FUXA[FUXA HMI] OpenPLC[OpenPLC] Hist[historian] GPS[gps clock] end subgraph Field["field_net · 10.40.40.0/24 · lan2"] Relay[relay] Recl[recloser] Reg[regulator] CapB[capbank] end OpenDSS[OpenDSS solver
physics_net · not firewalled] Browser --> Proxy Proxy --> Backend Proxy --> Frontend Proxy -. iframe .-> Containd Backend -. Docker SDK .-> Mgmt Backend -. JWT REST .-> Containd Ent <==> Containd Vendor <==> Containd OT <==> Containd Field <==> Containd RTAC -. kernel-pinned via firewall .-> Field RTAC -. HTTP push .-> OpenDSS classDef zoneEnt fill:#7c2d12,stroke:#fbbf24,color:#fef3c7 classDef zoneVen fill:#581c87,stroke:#c084fc,color:#f3e8ff classDef zoneOT fill:#0c4a6e,stroke:#7dd3fc,color:#e0f2fe classDef zoneFld fill:#14532d,stroke:#86efac,color:#dcfce7 classDef zoneMgt fill:#1e293b,stroke:#94a3b8,color:#e2e8f0 classDef zoneFW fill:#9a3412,stroke:#fb923c,color:#fff7ed class Ent zoneEnt class Vendor zoneVen class OT zoneOT class Field zoneFld class Mgmt zoneMgt class FW zoneFW ``` 完整的细节分解——节点 IP、服务交互、RTAC 内核绑定的补偿控制以及更详细的架构图——请参阅 [`docs/architecture.md`](docs/architecture.md) 和 [`docs/architecture-diagram.md`](docs/architecture-diagram.md)。 ## 文档 | | | |---|---| | 📦 [`docs/quickstart.md`](docs/quickstart.md) | 完整的安装步骤,包括离线/SSD 安装路径 | | 💾 [`docs/workshop-ssd.md`](docs/workshop-ssd.md) | 操作员运行手册:SSD 分发 + 研讨会期间的增量补丁 | | 🏗 [`docs/architecture.md`](docs/architecture.md) | 区域模型、节点清单、服务交互、数据流 | | 🎓 [`docs/workshop-overview.md`](docs/workshop-overview.md) | 逐个实验的步骤说明——哪些是模拟的,哪些不是 | | 📝 [`docs/lab-authoring.md`](docs/lab-authoring.md) | 如何编写研讨会实验(YAML 结构、代码块、决策点) | | 🔌 [`docs/api-spec.md`](docs/api-spec.md) | REST + WebSocket 参考 | | 🔐 [`SECURITY.md`](SECURITY.md) | 实验安全模型、外部访问模式、漏洞报告 | | 🐛 [`docs/security-known-issues.md`](docs/security-known-issues.md) | 已分类的 govulncheck/Trivy 发现及其理由说明 | | 🛠 [`CONTRIBUTING.md`](CONTRIBUTING.md) | 本地开发环境设置、测试、PR 规范 | | 🗺 [`ROADMAP.md`](ROADMAP.md) | 计划中的 v0.2.0 + v0.3.0 版本及待办事项 | | 📋 [`docs/tasks.md`](docs/tasks.md) | 活跃的优先级待办列表 | | 💬 [`SUPPORT.md`](SUPPORT.md) | 提问渠道及预期回复 | | 📜 [`CHANGELOG.md`](CHANGELOG.md) | 各版本发布说明 | ## 相关项目 - **[containd](https://github.com/tonylturner/containd)** - 实验室核心的具备 ICS 意识的 NGFW - **[`dnp3go/`](dnp3go/)** - 现场设备模拟器所使用的零依赖 Go DNP3 库(本仓库内嵌的独立模块) ## 许可证 Apache License 2.0。详见 [LICENSE](LICENSE)。
标签:DefendICS, DNP3, Docker, Docker-Compose, DPI防火墙, Go, ICS安全, OT安全, PCAP分析, PE 加载器, PKINIT, RTAC, Ruby工具, TGT, 变电站仿真, 安全培训, 安全防御评估, 工控协议, 工控安全, 插件系统, 攻防演练, 无线安全, 日志审计, 版权保护, 电力系统, 网络分段, 网络安全靶场, 网络策略, 网络隔离培训, 自动化攻击, 请求拦截, 防御绕过