使用说明
Meraki MX的NetFlow MCP服务器
一个自托管的NetFlow v9收集器,将网络流量分析暴露给 Claude.ai 通过 模型上下文协议(MCP)用简单的英语向克劳德提问有关你的社交网络的问题。
建筑
Meraki MX --UDP 2055--> [ingestor] ---> flows.db (SQLite WAL) <--- [mcp-netflow]
|
[cloudflared]
|
Claude.ai connector
| 容器 | 用途 |
|---|---|
ingestor |
goflow2子流程+GeoIP丰富,写入SQLite |
mcp-netflow |
使用OAuth 2.0的MCP服务器,从SQLite读取 |
geoipupdate |
MaxMind GeoLite2数据库每周更新 |
cloudflared |
用于HTTPS访问的Cloudflare隧道 |
先决条件
- 与Meraki MX位于同一局域网上的Linux服务器
- 码头工人 Docker Compose
- Meraki仪表板 访问(启用NetFlow导出)
- MaxMind 帐户(免费GeoLite2许可证)
- 云耀 账户(隧道)
- Claude.ai Pro或Team帐户(适用于MCP连接器)
快速开始
1.克隆和配置
git clone https://github.com/crwickha/netflow-mcp-server.git
cd netflow-mcp-server
cp .env.example .env
编辑 .env 凭你的证件。生成OAuth密钥:
# Generate OAuth client ID and secret
openssl rand -hex 32 # use as OAUTH_CLIENT_ID
openssl rand -hex 32 # use as OAUTH_CLIENT_SECRET
2.配置Meraki NetFlow导出
在Meraki仪表板中:
- 导航至 网络范围>配置>常规>报告
- 启用 网络流
- 集 收集器IP 到Docker主机的局域网IP
- 集 港口 到
2055
3.设置Cloudflare隧道
- 首选 Cloudflare零信任 >网络>隧道
- 创建指向的隧道
http://mcp-netflow:3000 - 将隧道令牌复制到您的
.env
4.准备存储
sudo mkdir -p /mnt/netflow-data
对于生产,请使用专用磁盘:
sudo mkfs.ext4 /dev/sdb1
echo '/dev/sdb1 /mnt/netflow-data ext4 defaults,nofail 0 2' | sudo tee -a /etc/fstab
sudo mount -a
5.发射
docker compose build
docker compose up -d
验证:
docker compose ps # all 4 containers running
docker compose logs -f ingestor # flow ingestion
docker compose logs -f mcp-netflow # MCP server ready
6.连接到Claude.ai
- 转到Claude.ai>设置>连接器
- 添加新的MCP连接器
- 输入您的Cloudflare隧道URL
- 输入OAuth客户端ID和密码
.env - 完成OAuth授权流程
MCP工具
连接后,Claude可以访问12个分析工具。得益于分层的预聚合汇总表,每个汇总表都能在2秒内完成。
| 工具 | 它做什么 |
|---|---|
get_traffic_overview |
高级摘要:总计、每小时时间表、热门演讲者、端口/协议细分 |
get_top_destinations |
GeoIP、国家、东西交通、新目的地的顶级外部目的地 |
get_anomaly_scan |
异常检测:目的地计数高、端口稀少、非工作时间活动、扫描检测 |
get_sample_flows |
带过滤器(IP、端口、协议)的原始流钻取,最多48小时 |
get_host_profile |
单个IP的行为特征,最多7天 |
detect_beaconing |
通过区间规律性分析进行C2信标检测,最长48小时 |
get_geoip_context |
关于外部IP的所有已知信息 |
get_time_window |
精确时间戳范围的流量摘要,最大48小时窗口 |
get_baseline_delta |
比较当前与上一时期,现货变化,最多7天 |
get_baseline |
统计基线概况(平均值、标准偏差、p95) |
check_baseline_deviation |
使用z评分将过去24小时与基线进行比较 |
get_collector_health |
收集器状态、流计数、数据库大小 |
示例提示
- “请概述过去7天的网络流量”
- “扫描我的网络是否存在任何安全异常”
- “检查过去24小时内是否有任何C2信标模式”
- “与基线相比,现在有什么异常吗?”
- “分析192.168.1.100上周的行为”
- “我们对IP 185.220.101.1了解多少?”
常见操作
# Rebuild after code changes
docker compose build mcp-netflow && docker compose up -d mcp-netflow
# View logs
docker compose logs -f
# Restart ingestor (after GeoIP database update)
docker compose restart ingestor
# Stop everything
docker compose down
故障排除
| 问题 | 解决方案 |
|---|---|
| 无流量到达 | 检查Meraki配置,防火墙允许UDP 2055到Docker主机 |
| GeoIP字段为空 | 验证mmdb文件是否存在于 /mnt/netflow-data,重新启动点火开关 |
| OAuth错误 | 确保客户端ID/密钥匹配 .env Claude.ai连接器 |
| SQLite已锁定 | 两个容器都需要读写访问 /mnt/netflow-data |
| 基线为空 | 基线填充前需要2天以上的数据 |
博客文章
看 docs/blog-post.md 关于构建和部署此系统的完整文章。
许可证
麻省理工学院