网络流量分析服务器

一个自托管的NetFlow v9收集器,通过模型上下文协议(MCP)将网络流量分析暴露给Claude.ai,用户可以用自然语言询问关于网络的问题。

  • by crwickha
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 crwickha/netflow-mcp-server

使用说明

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仪表板中:

  1. 导航至 网络范围>配置>常规>报告
  2. 启用 网络流
  3. 集 收集器IP 到Docker主机的局域网IP
  4. 集 港口 到 2055

3.设置Cloudflare隧道

  1. 首选 Cloudflare零信任 >网络>隧道
  2. 创建指向的隧道 http://mcp-netflow:3000
  3. 将隧道令牌复制到您的 .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

  1. 转到Claude.ai>设置>连接器
  2. 添加新的MCP连接器
  3. 输入您的Cloudflare隧道URL
  4. 输入OAuth客户端ID和密码 .env
  5. 完成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 关于构建和部署此系统的完整文章。

许可证

麻省理工学院