基于MCP协议的AIOps实践:大语言模型与FortiGate防火墙的深度整合
随着大语言模型(LLM)在各个领域的渗透,将其强大的认知与推理能力应用于传统的网络运维(NetOps)领域,即 AIOps,已成为业界探索的前沿方向。
本文将提供一份详尽的技术实践报告,记录如何利用模型上下文协议(Model Context Protocol, MCP),将本地部署的 AI 模型(以 O1-mini 为例)与一台 FortiGate 防火墙通过 SSH 进行整合,从而实现从自然语言指令到精确网络操作的端到端自动化。
只要5秒?AI画出整个公司网络!这不再是科幻!
告别逐行敲打show
命令与手动绘图的低效时代。现在,只需一句自然语言指令,大模型便能深入设备,将错综复杂的网络配置瞬间转化为一张清晰直观的可视化拓扑图。
下图,便是AI的杰作。请看它如何一眼看穿我们的网络世界。
图注: 此拓扑图由 AI 分析 FortiGate 的接口配置、路由表和防火墙策略后自动生成。
目录
1. MCP协议:连接AI智能与物理世界的桥梁
模型上下文协议(MCP)是一种为解决大语言模型与外部世界交互而设计的开放标准。其核心价值在于定义了一套统一的规范,使得 AI 模型能够发现、理解并调用外部的”工具”(Tools)。这些工具可以是任何形式的 API、本地脚本或硬件接口。
在网络运维场景下,MCP 的作用尤为关键:
- 指令解析: 将运维人员的自然语言需求(如”检查内网到外网的策略”)转换为结构化的工具调用请求。
- 任务执行: 触发本地的 MCP 服务器执行具体操作(如通过 SSH 连接防火墙并运行命令)。
- 结果反馈: 读取工具返回的原始 CLI 输出,并将其传递给 AI 模型,供其分析、总结并以人类可读的形式呈现。
MCP 协议生态的成熟,是推动 AIOps 从概念走向实践的关键一步,它为实现真正智能的、可交互的网络自动化提供了基础。
2. MCP生态资源
在深入实践之前,了解当前 MCP 的生态系统有助于发现更多可能性。以下资源提供了丰富的工具和平台:
- MCP Hub (higress.ai) - 一个社区驱动的 MCP 工具注册中心。
- MCP.so - 提供 MCP 相关协议文档和工具示例。
- GitHub - 在 GitHub 上通过 mcp 标签可以找到大量相关的开源项目和工具。
3. SSH MCP服务器部署:实践ssh-mcp-server
本次实践,我选用了一个提供通用 SSH 控制能力的开源 MCP 服务器项目:vilasone455/ssh-mcp-server。该项目旨在使 LLM 能够通过 SSH 安全地执行 Shell 命令。尽管其 README 提及的是 Linux 和 Windows 系统,但其底层 SSH 协议的通用性使其完全适用于 FortiGate 防火墙等网络设备。
3.1 部署安装过程中的挑战与解决
按照项目 README 的指引,我开始了标准的安装流程:
1 | # 克隆项目仓库 |
然而,在执行 npm run build
时,我遇到了一个编译错误:
1 | src/index.ts:422:19 - error TS2339: Property 'trim' does not exist on type 'unknown'. |
问题分析:这是一个 TypeScript 编译时错误,编译器无法确认 command 变量的类型是字符串,因此不允许调用 trim() 方法。
解决方案:我通过在代码中添加一个类型断言,明确告诉编译器 command 是一个字符串。
操作步骤:
- 用文本编辑器打开
C:\xxx\xxx\ssh-mcp-server\src\index.ts
文件 - 定位到第 422 行
- 将原代码
if (!command?.trim()) throw new Error("Command cannot be empty.");
- 修改为
if (!(command as string)?.trim()) throw new Error("Command cannot be empty.");
- 保存文件
修复此问题后,再次执行 npm run build
,项目成功编译,生成了 dist 目录。
3.2 配置 machines.json:定义你的防火墙
ssh-mcp-server 通过 machines.json
文件来管理所有可连接的设备信息。我们需要创建这个文件并填入 FortiGate 防火墙的连接凭据。
1 | [ |
machine_id
: 这是一个唯一的字符串,作为 AI 识别设备的”代号”。例如 Fortigatehost
: FortiGate 防火墙的 IP 地址username
: 登录 FortiGate 的 SSH 用户名password
: 登录密码
3.3 在 Cherry Studio 中注册 MCP 服务器
最后一步是将 ssh-mcp-server 注册到 Cherry Studio,使其能够被 AI 模型调用。
配置参数:
- 名称 (Name): ssh-mcp-server
- 类型 (Type): 标准输入输出 (stdio)
- 命令 (Command): node
- 参数 (Arguments):
C:/xxx/xxx/ssh-mcp-server/dist/index.js
- 环境变量 (Environment Variables):
MACHINES_PATH=C:/xxx/xxx/ssh-mcp-server/machines.json
- 超时 (Timeout): 180 (秒)

4. 提示词工程与模型调优:铸就你的AI防火墙专家
工具部署成功只是开始。如果没有经过精心设计的提示词和严格的参数控制,大语言模型在专业领域的表现往往是不可靠甚至危险的。在本次实践的初期,我们尝试使用通用提示词,结果发现 AI 的行为非常不稳定,时常误解指令,甚至在面对不确定的情况时,会“创造”出虚假的配置信息,这在生产环境中是绝对无法接受的。
正是通过下面一系列精细化的提示词工程与模型参数调优,我们才成功地将一个“充满想象力”的通用模型,改造为了一个“严谨、精确、可靠”的AI防火墙专家。
4.1 模型选择与参数设置
我选用 O1-mini 模型,并对其参数进行了关键调整:
参数 | 设置值 | 作用 |
---|---|---|
模型温度 (Temperature) | 0 | 将模型的创造性降至最低,强制其生成最确定、最符合事实的回答 |
Top-p | 0.05 | 收窄模型词汇选择范围,确保回答的高度一致性和精确性 |
上下文数 (Context Length) | 15 | 确保 AI 在复杂场景下不会”失忆”,能记住之前的命令和结果 |
将“模型温度”与“Top-p”设置为极低值,是抑制模型“幻觉”现象的关键所在。 这种配置强制模型在生成回答时,几乎完全依赖于从工具(即防火墙CLI)返回的真实上下文,而不是基于其内部知识库进行创造性联想。如果AI在防火墙上没有查询到信息,它会如实报告“未找到”,而不会为了“完成任务”而编造一个看似合理的答案。这确保了所有输出的高度事实性和可靠性。
4.2 系统级基础提示词
为 AI 设定一个明确、专业的行为框架至关重要。我编写了一份系统级的”基础提示词”,作为每次对话的”宪法”。
注意:提示词中需要提醒大模型你拥有只读权限,无法修改实际内容,防止对防火墙内容进行破坏。本连接目前只推荐用来获取信息与分析。
4.3 应对长输出:分段扫描与处理策略
在与网络设备交互时,一个常见的挑战是处理长命令输出,例如 show full-configuration
或 get router info routing-table all
。这类命令的返回内容往往会因为终端屏幕的限制而被分页,显示 --More--
提示符,等待用户输入(如空格键)才能继续显示。
如果让 AI 一次性拉取全部内容,不仅容易导致超时,还可能因为缓冲区溢出而使整个任务失败。为了解决这个问题,我们设计了一套分段扫描策略:
- 识别分页符:在提示词中明确指示 AI,当它在命令输出的末尾看到
--More--
标志时,应暂停执行。 - 分块处理:AI 会先将当前收到的部分数据进行分析和整理。
- 发送继续指令:处理完当前数据块后,AI 会主动发起一个新的工具调用,其命令就是一个“发送空指令”(等效于敲击空格键),以获取下一页的内容。
- 循环直至结束:重复步骤1-3,直到命令输出不再出现
--More--
标志,代表所有内容已获取完毕。
通过这种“走走停停”的分段处理方式,AI 能够稳定、可靠地处理任意长度的配置信息,避免了因单次数据量过大而导致的程序崩溃,大大增强了方案的稳定性。
5. 成果展示:AI驱动的FortiGate防火墙管理
经过上述所有配置和调优,我的 AI 助手已经能够稳定、准确地执行任务。以下是一些真实的交互案例:
5.1 基础信息获取与命令执行验证
我的提问:
“好的,我们开始。请在 Fortigate 上执行 get system status 命令,让我看看防火墙的系统信息。”
AI 执行与返回:
AI 成功连接并执行命令。尽管首次连接尝试中出现了”无法找到连接 ID”的短暂错误,但 AI 随即进行了自我修正,成功创建了连接并执行了命令。
AI 返回了防火墙的型号、固件版本、序列号、正常运行时间等关键信息,并进行了专业的结构化总结与分析。
5.2 精确的地址对象查询与专业分析
任务: 查询地址对象 wz-office 的详细信息。
我的提问:
“请在 Fortigate 上,精确地查询并显示地址对象 wz-office 的详细配置。不要使用 grep,直接查询这个对象。”
AI 执行与返回:
AI 成功执行 show firewall address wz-office
,返回了与我手动查询完全一致的真实数据。更重要的是,它对结果进行了专业解读,包括子网换算和实际 IP 范围分析。
5.3 深度安全策略审计与风险识别
任务: 检查 wz-office 在防火墙策略中的应用情况,并识别潜在安全风险。
我的提问:
“请检查 Fortigate 上所有引用了 wz-office 地址对象的防火墙策略。同时,请检查其所在的地址组,并对可能存在的安全风险进行评估。”
AI 执行与返回:
AI 智能地规划了多步操作,包括查询策略和地址组,并主动指出了其中的安全风险,提供了优化建议。
5.4 复杂数据提取与结构化呈现
任务: 获取路由表信息并整理成表格。
我的提问:
“请获取 Fortigate 的完整路由表信息。我需要你将输出的所有路由条目,无论类型是静态(S)、直连(C)还是其他,都整理成一个表格,包含目的网络、子网掩码、下一跳网关和出接口。”
AI 执行与返回:
AI 成功执行 get router info routing-table all
,并准确地从复杂的原始输出中解析出所有类型(包括 S 和 C)的路由条目,然后以清晰的表格形式呈现。
5.5 自主生成多层网络架构图
在验证了AI精确执行和结构化呈现的能力后,我们决定发起一项终极挑战,测试其综合分析与高级生成的能力——让它从零开始,绘制一张详尽的网络架构图。这不再是简单的数据提取,而是对网络关系的深度理解和可视化重构。
我的提问:
“做得非常好。现在是最后的任务,我需要你展示你的综合分析能力。请连接到 Fortigate,深度扫描其接口配置、路由表、VLAN设置以及ARP缓存信息,推断出整体网络架构。然后,为我生成一份详细的、多层级的网络拓扑图的 Mermaid 代码。这张图必须清晰地划分出公网、DMZ区、核心网络、服务器区和无线接入区,并尽可能标注关键设备的型号、IP地址和VLAN信息。”
AI 执行与返回:
收到指令后,AI展现了其作为“智能代理”的真正价值。它没有等待我给出具体命令,而是自主规划并执行了一系列关联操作:
- 边界探测: 执行
get system interface
,识别出wan1
口作为公网出口,并找到dmz
接口。 - 核心分析: 通过
get router info routing-table all
和show system switch-interface
,定位到连接内网核心交换机的lan
口,并识别出其承载的多个VLAN。 - 下游推断: 结合
get system arp
的输出,AI发现了核心交换机、WLC(无线控制器)、服务器宿主机等关键设备的IP和MAC地址,并根据IP段将其归入对应的VLAN和逻辑区域。 - 信息整合与生成: AI将所有收集到的离散信息——接口、路由、VLAN、IP地址——在“脑中”构建成一个逻辑模型。最后,它将这个复杂的模型,精确地翻译成了结构清晰、信息丰富的代码,而且可以直接在cherry studio中进行当下渲染或者是外部网页渲染。
AI返回的以下代码,无需任何手动修改,可直接渲染成一张专业级的网络拓扑图,完美地完成了这项艰巨的任务。
结语
本次实践验证了通过 MCP 协议将大语言模型与网络设备整合的可行性与巨大潜力。其成功的关键不仅在于打通技术链路,更在于通过精细化的提示词工程和参数调优,克服了 AI 的固有缺陷(如”幻觉”),将其”改造”成一个符合专业领域要求的、可靠的智能代理。AIOps 的未来已来,而我们正处在这场变革的中心。