Wazuh MCP 服务器

Wazuh MCP 服务器是一个专为 Wazuh SIEM 和 AI 助手(如 Claude Desktop)设计的模型上下文协议服务器,提供实时安全警报、代理状态和威胁情报的标准化接口。

  • by gnix45
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 gnix45/Wazuh_MCP_SERVER

使用说明

🛡️ Wazuh MCP 服务器

一个强大的模型上下文协议(MCP)服务器,它将Wazuh SIEM与Claude Desktop等AI助手连接起来

利用AI驱动的洞察力,升级您的安全监控


📋 目录


🎯 这是什么?

这个(或:那个) Wazuh MCP 服务器 这是一个专门的模型上下文协议服务器,能够将Wazuh SIEM(安全信息和事件管理)功能与AI助手无缝集成。它通过简洁、标准化的界面,提供实时访问安全警报、代理状态和威胁情报的功能。

🎪 核心能力

  • 🔍 实时警报监控 - 访问来自所有Wazuh模块的警报
  • 🤖 原生AI集成 - 专为Claude Desktop及其他MCP客户端设计
  • 🔐 安全认证 - 基于JWT的令牌管理,支持自动刷新
  • 📊 多模块支持 - FIM(文件完整性监控)、恶意软件检测、威胁狩猎、漏洞评估等
  • 🐳 准备就绪,可容器化部署 - 完全容器化,支持Docker
  • ⚡ 高性能 - 优化用于实时安全操作

✨ 特点/功能

🔐 安全与认证

  • JWT Token 管理 - 使用Wazuh API进行自动身份验证
  • 令牌缓存 高效复用令牌以最小化API调用
  • 安全秘密 - Docker MCP 密钥集成用于生产环境部署

📊 监控与警报

  • 文件完整性监控(FIM) - 跟踪文件的变化和修改
  • 恶意软件检测 - 识别潜在威胁和可疑活动
  • 威胁狩猎 - 高级威胁检测与分析
  • 漏洞评估 - 安全漏洞追踪
  • IT卫生(或IT良好实践) - 系统配置和合规性监控
  • Docker 监控 - 容器安全与活动追踪
  • MITRE ATT&CK 映射 - 战术、技术和程序分析

🛠️ 技术特性

  • 多索引器支持 - Elasticsearch 与 OpenSearch 的兼容性
  • 智能回退方案 - 管理员记录索引器不可用时的日志
  • 错误处理 - 全面的错误管理和报告
  • 增强表情符号的输出 - 易于阅读、视觉上吸引人的回复
  • 非Root执行 - 安全容器操作

🏗️ 建筑学

graph TB
    A[Claude Desktop] --> B[MCP Gateway]
    B --> C[Wazuh MCP Server]
    C --> D[Wazuh API]
    C --> E[Wazuh Indexer]
    D --> F[JWT Authentication]
    E --> G[Alert Data]
    C --> H[AI Tools]
    H --> I[FIM Alerts]
    H --> J[Malware Detection]
    H --> K[Threat Hunting]
    H --> L[Vulnerability Assessment]

📁 仓库结构

wazuh-mcp-server/
├── 🐳 Dockerfile                 # Container configuration
├── 📦 requirements.txt           # Python dependencies
├── 🐍 wazuh_mcp_server.py       # Main MCP server implementation
├── 📋 setup.sh                   # Setup and configuration script
├── 📖 README.md                  # This documentation
├── 📝 CHANGELOG.md               # Version history
├── 📄 LICENSE                    # MIT License
├── 🔧 custom.yaml                # MCP catalog configuration
├── 📁 assets/                    # Screenshots and images
│   ├── claude-fim-alerts.png
│   └── obsidian-fim-alerts.png
└── 📚 docs/                      # Additional documentation

🚀 快速入门

1️⃣ 克隆仓库

git clone https://github.com/your-username/wazuh-mcp-server.git
cd wazuh-mcp-server

2️⃣ 构建Docker镜像

docker build -t wazuh-mcp-server .

3️⃣ 配置密钥

# Set up Docker MCP secrets
docker mcp secret set WAZUH_API_USER="wazuh"
docker mcp secret set WAZUH_API_PASS="your-api-password"
docker mcp secret set INDEXER_USER="admin"
docker mcp secret set INDEXER_PASS="your-indexer-password"
docker mcp secret set WAZUH_API_URLS="https://your-wazuh-manager:55000"
docker mcp secret set INDEXER_URLS="https://your-indexer:9200"

4️⃣ 测试连接

# Test imports and connectivity
docker run --network host --rm \
  -e WAZUH_PASSWORD="your-password" \
  -e WAZUH_INDEXER_USERNAME="admin" \
  -e WAZUH_INDEXER_PASSWORD="your-indexer-password" \
  wazuh-mcp-server python3 -c "
import sys
sys.path.append('.')
from wazuh_mcp_server import search_wazuh_alerts_index, WAZUH_MODULES
print('✅ All imports successful')
print(f'Configured modules: {len(WAZUH_MODULES)}')
"

🔧 前提条件

系统要求

  • 🐳 Docker Desktop(中文可译为“Docker 桌面版”) (支持MCP工具包)
  • 🐍 Python 3.11+(Python 3.11或更高版本) (用于本地开发)
  • 🌐 网络访问 到 Wazuh 管理器(端口 55000)和索引器(端口 9200)

Wazuh 要求

  • Wazuh 管理器 4.13+ 已启用API
  • Wazuh 索引器 (Elasticsearch/OpenSearch) 正在运行
  • 有效的API凭证 在获得适当权限后

🔐 配置

环境变量

创建一个 .env 用于本地开发的文件:

# Wazuh API Configuration
WAZUH_API_USER=wazuh
WAZUH_API_PASS=your-api-password
WAZUH_API_URLS=https://192.168.1.100:55000,https://127.0.0.1:55000

# Indexer Configuration
INDEXER_USER=admin
INDEXER_PASS=your-indexer-password
INDEXER_URLS=https://192.168.1.100:9200,https://127.0.0.1:9200

Docker MCP 密钥(推荐)

对于生产环境部署,请使用Docker MCP密钥:

# Set all required secrets
docker mcp secret set WAZUH_API_USER="wazuh"
docker mcp secret set WAZUH_API_PASS="your-secure-password"
docker mcp secret set INDEXER_USER="admin"
docker mcp secret set INDEXER_PASS="your-indexer-password"
docker mcp secret set WAZUH_API_URLS="https://your-wazuh:55000"
docker mcp secret set INDEXER_URLS="https://your-indexer:9200"

# Verify secrets are set
docker mcp secret list

🐳 Docker 设置

构建镜像

# Build the Docker image
docker build -t wazuh-mcp-server .

# Tag for registry (optional)
docker tag wazuh-mcp-server:latest your-registry/wazuh-mcp-server:latest

本地运行

# Quick test run
docker run --rm -i \
  -e WAZUH_API_USER="wazuh" \
  -e WAZUH_API_PASS="your-password" \
  -e WAZUH_API_URLS="https://192.168.1.100:55000" \
  -e INDEXER_USER="admin" \
  -e INDEXER_PASS="your-indexer-password" \
  -e INDEXER_URLS="https://192.168.1.100:9200" \
  wazuh-mcp-server

Claude 桌面集成

1️⃣ 配置MCP目录

创建 ~/.docker/mcp/catalogs/custom.yaml:

version: 2
name: custom
displayName: Custom MCP Servers
registry:
  wazuh_mcp:
    description: "Security monitoring and alert management via Wazuh SIEM platform"
    title: "Wazuh Security Monitor"
    type: server
    dateAdded: "2025-09-23T00:00:00Z"
    image: wazuh-mcp-server:latest
    ref: ""
    tools:
      - name: get_wazuh_agents
      - name: get_wazuh_running_agents
      - name: test_wazuh_indexer_connection
      - name: get_file_integrity_monitoring_alerts
      - name: get_malware_detection_alerts
      - name: get_threat_hunting_alerts
      - name: get_vulnerability_detection_alerts
      - name: get_it_hygiene_alerts
      - name: get_docker_alerts
      - name: get_mitre_attack_alerts
    secrets:
      - name: WAZUH_API_USER
        env: WAZUH_API_USER
        example: "wazuh"
      - name: WAZUH_API_PASS
        env: WAZUH_API_PASS
        example: "your-password"
      - name: INDEXER_USER
        env: INDEXER_USER
        example: "admin"
      - name: INDEXER_PASS
        env: INDEXER_PASS
        example: "your-indexer-password"
      - name: WAZUH_API_URLS
        env: WAZUH_API_URLS
        example: "https://192.168.1.100:55000"
      - name: INDEXER_URLS
        env: INDEXER_URLS
        example: "https://192.168.1.100:9200"
    metadata:
      category: security
      license: MIT
      owner: local

2️⃣ 更新注册表

创建 ~/.docker/mcp/registry.yaml:

registry:
  wazuh_mcp:
    ref: ""

3️⃣ 配置Claude桌面版

更新您的Claude桌面配置~/.config/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "mcp-toolkit-gateway": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v", "/var/run/docker.sock:/var/run/docker.sock",
        "-v", "/home/your_username/.docker/mcp:/mcp",
        "docker/mcp-gateway",
        "--catalog=/mcp/catalogs/docker-mcp.yaml",
        "--catalog=/mcp/catalogs/custom.yaml",
        "--config=/mcp/config.yaml",
        "--registry=/mcp/registry.yaml",
        "--tools-config=/mcp/tools.yaml",
        "--transport=stdio"
      ]
    }
  }
}

4️⃣ 重启Claude桌面版

重启Claude桌面以加载新的MCP服务器配置。


🧪 测试

测试服务器功能

# Test basic connectivity
docker run --network host --rm \
  -e WAZUH_PASSWORD="your-password" \
  -e WAZUH_INDEXER_USERNAME="admin" \
  -e WAZUH_INDEXER_PASSWORD="your-indexer-password" \
  wazuh-mcp-server python3 -c "
import asyncio
import sys
sys.path.append('.')
from wazuh_mcp_server import search_wazuh_alerts_index

async def test():
    data, error = await search_wazuh_alerts_index({'query': {'match_all': {}}, 'size': 3})
    if error:
        print(f'❌ Indexer Error: {error}')
    else:
        hits = data.get('hits', {}).get('hits', [])
        total = data.get('hits', {}).get('total', 0)
        if isinstance(total, dict):
            total = total.get('value', 0)
        print(f'✅ Found {len(hits)} alerts out of {total} total!')
        for hit in hits:
            rule = hit.get('_source', {}).get('rule', {})
            agent = hit.get('_source', {}).get('agent', {})
            print(f'  - Rule {rule.get(\"id\")}: {rule.get(\"description\", \"No description\")[:60]}... (Agent: {agent.get(\"name\", \"Unknown\")})')

asyncio.run(test())
"

测试MCP协议

# Test MCP server directly
python wazuh_mcp_server.py

💡 使用示例

一旦与Claude Desktop集成,您就可以提出诸如以下问题:

🔍 代理管理

  • “显示所有正在运行的Wazuh代理”
  • “列出代理及其最后签到时间”
  • “哪些代理处于离线状态?”

🚨 警报分析

  • “给我显示最新的文件完整性监控警报”
  • “显示过去24小时内的恶意软件检测警报”
  • “查找高严重性威胁狩猎警报”
  • “显示代理-123的漏洞检测警报”

📊 安全洞察

  • “给我总结一下今天所有安全事件的情况”
  • “显示映射到MITRE ATT&CK框架的警报”
  • “最常见的违规行为是什么?”
  • “分析Docker容器安全事件”

🛠️ 故障排除

  • “测试Wazuh索引器连接”
  • 检查Wazuh API是否正在响应
  • “显示所有认证错误”

🆘 故障排除

❌ 常见问题

🔌 连接被拒绝(索引器)

# Test indexer connectivity
curl -k -u "admin:your-password" "https://your-indexer:9200/_cluster/health"

解决方案:

  • 确保Wazuh索引器正在运行: sudo systemctl status wazuh-indexer
  • 检查9200端口的防火墙设置
  • 验证容器之间的网络连接

🔑 认证错误

# Test Wazuh API authentication
curl -k -u "wazuh:your-password" -X POST "https://your-wazuh:55000/security/user/authenticate?raw=true"

解决方案:

  • 在密钥中验证API凭据
  • 检查Wazuh API用户的权限
  • 确保Wazuh管理器上已启用API

Claude中未显示的工具

检查清单:

  • ✅(勾选标记,通常表示正确、确认或完成) custom.yaml 存在于 ~/.docker/mcp/catalogs/custom.yaml
  • ✅ registry.yaml 包括 wazuh_mcp 条目;入口;入场
  • ✅ Claude Desktop配置指向自定义目录
  • ✅ Docker 镜像构建成功
  • ✅ 配置完成后,Claude Desktop 已重启

🔧 调试命令

# Check MCP server list
docker mcp server list

# Verify secrets
docker mcp secret list

# Test Docker image
docker run --rm wazuh-mcp-server python3 -c "print('✅ Image working')"

# Check file permissions
ls -la ~/.docker/mcp/catalogs/

📸 截图

Claude 桌面集成

Claude Desktop 显示通过 MCP 服务器检索到的最近 Wazuh FIM 警报:

Obsidian 集成

由相同FIM警报(通过工具存储)生成的Obsidian保险库笔记:


📄 许可证

这个项目采用MIT许可证授权——详见 许可证 详情请见文件。


👨‍💻 作者

PK先生 - 安全工程师与开发人员

  • 环境Ubuntu 24.04,Wazuh 4.13,带有MCP工具包的Docker Desktop
  • 特别感谢感谢NetworkChuck的启发和指导🙌

⭐ 如果你觉得这个仓库有帮助,请给它点个星吧!

为安全社区倾心打造