Tito-42/Agentic-AI-Driven-Firewall-Migration
GitHub: Tito-42/Agentic-AI-Driven-Firewall-Migration
记录了由 Agentic AI 驱动的生产环境 FortiGate 到 Stormshield 防火墙迁移割接实战报告,包含方法论、安全机制设计及 serverd API 经验教训。
Stars: 0 | Forks: 0
# Agentic AI 驱动的防火墙迁移
### 人机协同的生产环境割接 — 实战报告
**版本 1.0 — 2026 年 7 月** · [Français](README.fr.md) · 许可证:[CC BY 4.0](LICENSE)
据我们所知,这是**首份公开记录的实战报告**,记录了由通用 AI agent 执行的*生产环境*防火墙迁移割接。在相关领域已有现有技术(参见[相关工作](#6-related-work--how-this-differs)),但仅限于操作辅助或离线配置转换。
### 结果
| 指标 | 结果 |
| --- | --- |
| 故障 | 0 |
| 回滚 | 0 |
| 宣布 GO | T₀ + 95 分钟(领先截止时间 25 分钟) |
| 内部区段割接 | 每个不到 10 秒 |
| 互联网服务恢复 | T₀ 后 3 分钟 |
| 站点到站点 VPN | 经过 5 分钟的有效配置后投入运行 |
| HA 接管(硬断电) | < 10 秒,无明显中断 |
| 验收测试 | 12/13 通过,1 项备份项不在防火墙范围内* |
* 唯一的备份项涉及一个辅助设备,该设备由于位于防火墙上游的原因仍然无法访问——防火墙没有看到来自它的流量,也没有拦截任何内容。此事已在窗口期内记录并移交给相关第三方。
### 目标读者
规划跨厂商防火墙迁移的网络和安全工程师;通过 `serverd` API 工作的 Stormshield SNS 管理员;任何评估 Agentic AI 是否可以被信任用于生产基础设施更改及其约束条件的人。
## 1. 操作范围
| 项目 | 详情 |
| --- | --- |
| 源端 | FortiGate HA 集群,Active-Active,生产环境 |
| 目标端 | 2× Stormshield SN520 (SNS 4.8 LTSB),HA Active-Passive |
| 方法 | 保持 IP 不变进行物理替换,按区段逐步进行(LAN → WAN1 → WAN2 → DMZ) |
| 最终策略 | 28 条过滤规则(顺序与源策略一致),3 条 NAT 规则,8 条静态路由,约 140 个网络对象,IP 信誉拦截,显式记录的最终拒绝 |
| 窗口期内额外完成 | 到合作伙伴站点的 IPsec IKEv2 站点到站点隧道(预先注册、实时诊断并激活),真实的 HA 故障测试(对主用设备进行硬断电),WAN 故障转移测试 |
| 人类角色 | 所有布线,所有 GO/NO-GO 决策,业务验收测试(VoIP 通话、门禁系统、摄像头、邮件),密码保管 |
| Agent 角色 | 其他所有工作:审计、API 会话、配置写入、验证、网络测试、故障诊断、文档记录、备份 |
## 2. 为什么这与“AI 辅助网络”不同
Agent 并不是*建议*配置让人类去应用。在一个明确的安全机制内,它**自己掌握了 API 会话**:它读取状态、写入配置、激活策略、验证结果、在每次写入批次前后进行备份,并逐步指导人类的物理操作(“从两台设备上拔下 WAN2,然后告诉我*完成了*”)。人类在割接窗口期间没有输入过任何防火墙命令。
## 3. 安全机制(使其在生产环境中可被接受的原因)
1. **单次尝试认证** — 防暴力破解/锁定原则:每次会话一次干净的认证,出现任何失败即硬停止。(真实应用:在合作伙伴设备上出现一次 `ACCESS_DENIED`,立即终止了该工作流。)
2. **任何写入前都要备份** — 每次写入批次都由经过验证的 `.na` 配置备份作为边界(窗口期间产生了 6 个备份,通过大小进行完整性检查)。
3. **默认只读** — 整个割接前审计在一次只读会话中完成;写入权限是按批次显式获取的。
4. **同一会话提交** — 缓冲的更改(过滤规则)在同一个 API 会话中检查并激活,绝不悬挂不管。
5. **HA 同步原则** — *每次*写入后执行 `HA SYNC` 和同步验证,并容忍已知的小毛病(从机静默最多 5 分钟)。
6. **人类 GO 门控** — 三个正式的 GO/NO-GO 门控(设备状态、割接开始、最终验收),仅由当值指挥员宣布。
7. **回滚始终有定义** — 旧集群保持通电并断开线缆;在最终 GO 之前,记录在案的物理回滚可在 15 分钟内完成。
8. **完全可追溯** — 每条命令、发现和决策都实时记入运维日志;验收报告在窗口期内生成。
## 4. 时间线(T₀ = 12:00)
| 时间 | 事件 |
| --- | --- |
| 11:32 | 对新集群进行空跑审计(单个只读 API 会话):策略、路由、对象、HA、许可证 — 发现符合性 + 3 处偏差(包括一个过于宽泛的管理员 ACL,已标记给人类做决定) |
| 11:45 | 强制重新应用 HA master;通过 API 配置新的 DMZ 接口;执行前/后备份 |
| **12:00** | **T₀ — 割接开始**,按区段逐步进行,两台设备同步 |
| 12:03 | 通过新集群恢复互联网(无偿 ARP 发挥了作用) |
| 12:20–12:35 | 站点到站点 IPsec 隧道:agent 发现预先注册的策略**被禁用且带有错误的选择器**,修复了该问题,然后将静默故障的根本原因归结为 IPsec 引擎从未加载其配置(`CONFIG IPSEC RELOAD` — 参见[经验教训](#5-lessons-learned--stormshield-sns-48-serverd-api)) → SA 建立,SIEM 可访问 |
| 12:50 | 业务验收:VoIP、门禁系统、摄像头 (4G)、邮件、内网 — 5/5 通过 |
| 13:10 | WAN 故障转移测试:瞬间切换到备份链路并切回;隧道自动重新建立 |
| 13:20–13:30 | **真实 HA 测试:对主用设备硬断电 → 接管耗时 < 10 秒,无明显中断 → 恢复供电时自动故障回复** |
| **13:35** | **GO — 迁移验证通过**(12/13 验收测试通过 + 1 项备份项不在防火墙范围内) |
| 13:41 | 全新竣工图收集 + 最终验证备份 |
## 5. 经验教训 — Stormshield SNS 4.8 `serverd` API
通用且可重用。下面列出的每个问题都是在窗口期间真实遇到的。
### `CONFIG IPSEC ACTIVATE` 不够 — 症状:`MONITOR GETSPD` 返回 0 个条目
如果 IPsec 引擎从未加载策略,`ACTIVATE` 会使 SPD 保持为空,并且即使启用了 keepalive,也不会发生 IKE 发起。解决方法是执行 **`CONFIG IPSEC RELOAD`**。这是窗口期代价最大的发现:隧道看起来配置正确,但却静默失效,什么也没做。
### `CONFIG WEBADMIN ACCESS ADD` 是位置参数 — `host=` 会导致 `Invalid parameters`
按位置传递对象名称:`CONFIG WEBADMIN ACCESS ADD
标签:FortiGate, Stormshield, 网络安全, 自动化运维, 运维, 防火墙迁移, 隐私保护