zynovexllc/vrp-ir

GitHub: zynovexllc/vrp-ir

vrp-ir 将华为 VRP/USG 配置文件解析为逐字段可溯源的结构化模型,并生成带行号证据的安全验收报告,填补了网络自动化生态中对华为设备配置解析的空白。

Stars: 0 | Forks: 1

# vrp-ir [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/74c3e58fb3233809.svg)](https://github.com/zynovexllc/vrp-ir/actions/workflows/tests.yml) [![PyPI](https://img.shields.io/pypi/v/vrp-ir.svg)](https://pypi.org/project/vrp-ir/) [![Python](https://img.shields.io/pypi/pyversions/vrp-ir.svg)](https://pypi.org/project/vrp-ir/) [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE) **针对华为 VRP 配置的可溯源结构化 IR。** `vrp-ir` 可将离线的华为 VRP 配置文件(`display current-configuration` 输出 / 保存的 `.cfg`)解析为结构化的类型化模型, 其中**每个解析出的值都包含一个 `SourceRef`,可追溯回其来源的确切文件 + 行号**。 ``` Huawei VRP .cfg ──► structured IR ──► every field knows its source line ``` ## 为什么需要这个项目(现状空白) 网络自动化生态系统非常丰富,但缺失了以下特定的组合: - **Batfish** 非常出色,但它的源码明确将华为 **VRP 标记为 `UNSUPPORTED`**。 - **ntc-templates** 拥有约 35 个华为 `display` *show-command* 模板,但**没有** `display current-configuration`(配置文件)解析器。 - **ciscoconfparse2** 以 Cisco 为中心,且仅提供每行的整数 `.linenum` —— 而非字段级别的溯源。 - 没有任何开源工具能为解析出的配置事实提供**字段 → `file:line` 溯源**。 `vrp-ir` 正好填补了这一空白:**华为 VRP 配置文件 → 具备逐字段可溯源性的语义模型。** 这正是验收/审计工作所需要的——当某个值看起来有误时,可以直接跳转到对应行,而无需去 grep 原始配置。 ## 安装说明 ``` pip install vrp-ir # 或者,从 source 构建: pip install -e . ``` ## 快速入门(CLI) ``` vrp-ir parse examples/sample-vrp.cfg # routing / switching vrp-ir parse examples/sample-usg.cfg # USG firewall (zones / policy / nat-policy / objects / hrp) ``` ``` { "hostname": { "value": "CORE-FW-01", "source": { "file": "...", "line": 2, "col": 8 } }, "interfaces": [ { "name": { "value": "GigabitEthernet0/0/1", "source": { "line": 9 } }, "ipv4": [ { "address": { "value": "10.10.10.1", "source": { "line": 11 } }, "prefix_length": { "value": 24, "source": { "line": 11 } } } ] } ] } ``` ## 快速入门(Python) ``` from vrp_ir import parse_file cfg = parse_file("examples/sample-vrp.cfg") print(cfg.hostname.value) # CORE-FW-01 ip = cfg.interfaces[0].ipv4[0] print(ip.address.value, ip.prefix_length.value) # 10.10.10.1 24 print(ip.address.source) # examples/sample-vrp.cfg:11 ← provenance ``` ## 安全验收审计(v0.6) 将可溯源的 IR 转化为**安全验收报告**:每项检查都是一个小型测试用例(意图),并且每项发现都会引用其所基于的确切配置行——因此审查人员可以直接跳转到出错的行。 ``` vrp-ir audit examples/sample-usg-risky.cfg # Markdown acceptance report vrp-ir audit examples/sample-usg.cfg --format json # machine-readable JSON vrp-ir audit examples/sample-usg-risky.cfg --strict # exit 1 if any check fails (CI gate) ``` ``` ### ❌ `FW-DEFAULT-DENY` [CRITICAL] — Security-policy 默认动作拒绝未匹配的 traffic Default action is 'permit': all traffic matching no rule is allowed (permit-any). **Evidence**: - `examples/sample-usg-risky.cfg:14` — `default action permit` ``` 检查项(13 项):策略默认拒绝(permit-any);允许范围(规则未通过 zone/address 进行收窄,**会解引用 `address-set` 引用**,因此解析为 `0.0.0.0/0` 的对象依然会被标记);无会话日志记录的允许规则;每个 zone 仅有一个 interface;`address-set` 等于 any;已启用 HRP;已启用 HRP 但 heartbeat interface/peer 不完整;**管理平面**——启用了 Telnet/HTTP(明文)、VTY 接受 Telnet、VTY 没有入站源 ACL、弱 SSH 加密算法(CBC/3DES/DES),以及被授予 Telnet 服务的本地 AAA 用户。请在 [`docs/acceptance-report-example.md`](docs/acceptance-report-example.md) 查看完整的渲染报告。 ## 设计原则 - 核心**零运行时依赖**——易于嵌入。 - **重用,而不是重复造轮子。** `vrp-ir` 是一个轻量级的 VRP 配置 + 溯源层。 它是对 `ntc-templates`(show-command 解析)、 `hier_config`(VRP diff/修复)、`napalm`(实时设备收集)和 `Batfish`(多供应商分析)的补充(而非替代)。拓扑/分析层将集成 这些工具,而不是重新构建它们。 - **溯源优先。** 如果我们无法说明某个值的来源,我们就不会将其呈现出来。 ## 路线图 - **v0.1:** 包含 SourceRef 的 hostname + interface 基础信息。 ✅ - **v0.2:** VLAN(批量范围),VRF(RD/RT),接口增强 (link-type、trunk allow-pass 范围、Eth-Trunk、dot1q 子接口、secondary IPv4、VRF 绑定),ACL,静态路由。 ✅ - **v0.3:** 华为 **USG 防火墙** 对象 —— `firewall zone`、 `security-policy`(包含 zones / addresses / services / profiles / action / logging 的 `rule name`)、`nat server`、`hrp`(全局 OSS 的盲区;Batfish 完全放弃了对 VRP 的支持)。 ✅ - **v0.4:** 安全**验收审计** —— 测试用例 schema (`testCase ↔ intent ↔ evidenceRef`)+ Markdown/JSON 报告生成器; 包含初始防火墙检查并各自引用其源码行的 `vrp-ir audit`。 ✅ - **v0.5:** `nat-policy` 块、`ip address-set` / `ip service-set` 对象、 telnet/http 管理开关;包含 9 项审计检查 —— permit-scope 中的 `address-set` 解引用、`address-set`-equals-any、HRP 一致性、明文 管理(Telnet / HTTP)。 ✅ - **v0.6(当前):** **管理平面访问基线**(由真实世界的配置语料库驱动)—— `user-interface` con/vty(protocol inbound / inbound ACL / auth mode)、`ssh server cipher`、`aaa` 本地用户;审计增加至 **13 项** 检查(VTY-accepts-Telnet、VTY-no-ACL、weak-SSH-cipher、AAA-user-Telnet)。 ✅ - **v0.6.x(下一个版本):** SNMP community、NTP / Syslog 状态、NAT 正确性、 `vsys`;扩大测试语料库。 - 未来:华为安全设备覆盖范围(USG / WAF / AntiDDoS / 4A)。 ## 商业版 / 支持 `vrp-ir` 是免费且开源的(Apache-2.0),并将一直保持如此。 它是 **AegisTwin 的开放核心** —— 一个面向运营商和 数据中心安全集成的验收工作台(HLD/LLD → 可溯源拓扑 → 验收 顾问 → 证据链 → 签收报告)。如果您喜欢 `vrp-ir`,对于需要大规模进行验收的团队,AegisTwin 在其基础上**进行了构建**:华为 安全设备覆盖范围(USG / WAF / AntiDDoS / 4A),HLD/LLD → 可溯源的 验收测试用例,以及客户级别、可审计的报告(包括 MLPS / 运营商格式)。 请参阅**[开源版与商业版对比](docs/commercial.md)**。 **联系我们** 进行付费的工作流审查或设计合作伙伴试点 → **support@zynovexllc.com**。 ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。我们解析错误的真实(已脱敏)VRP 配置片段 是**最好**的 issue。 ## 许可证 [Apache-2.0](LICENSE)。
标签:Python, 中间表示, 华为VRP, 文档结构分析, 无后门, 网络自动化, 逆向工具, 配置解析