🛡️ A10守护者
用于A10 Networks Thunder TPS DDoS抵御设备的REST API+MCP服务器。提供了一个简化的界面来管理受保护区域、监控活动事件和部署缓解配置——可以通过HTTP端点或AI代理通过模型上下文协议(MCP)访问。
✨ 特性
- 🚀 REST API --缓解区、系统监控、事件跟踪、模板管理
- 🤖 MCP服务器 --通过模型上下文协议(Claude Desktop、n8n等)集成AI代理
- 📝 可配置模板 --基于JSON的区域模板,具有自定义配置文件、策略和服务
- 📥 模板导入 --从现有A10区域导入配置,以便在新的缓解措施中重复使用
- 🔐 认证 -用于REST的API令牌,用于MCP HTTP传输的承载器令牌
- 📊 可观测性 --使用Loguru进行结构化日志记录,对写入操作进行审计跟踪
- 🔔 通知 --模板、缓解措施和系统事件的粒度webhook警报(Slack、Discord、Telegram)
- 🐳 Docker就绪 -Two-service组合设置(API+MCP),带有健康检查和持久模板存储
📚 文档
- API使用指南 完整的 REST API 文档
- 集成指南 -N8N、Claude API、Gemini、Make.com、Zapier
- N8N工作流 - N8N的设置准备就绪
- MCP指南 -模型上下文协议服务器
🛠️ 技术栈
- 🐍 Python 3.10+ / ⚡ 快速API / 🦄 Uvicorn
- 🔌 FastMCP --带stdio和流式http传输的MCP服务器
- 🌐 httpx --用于A10设备通信的HTTP客户端
- ✅ Pydantic v2 --请求/响应验证
- 📝 洛古鲁 --旋转式结构化测井
- ⏱️ 慢速API --速率限制
🚀 快速入门(Docker)
选项1:使用预构建映像(推荐)
Docker编写:
# 1. Download compose file
curl -O https://raw.githubusercontent.com/opastorello/a10-guardian/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/opastorello/a10-guardian/main/.env.example
# 2. Configure
cp .env.example .env
# Edit .env with your A10 credentials
# 3. Pull and start
docker compose pull
docker compose up -d直接运行Docker:
# Pull the image
docker pull ghcr.io/opastorello/a10-guardian:latest
# Run REST API server
docker run -d \
--name a10-guardian-api \
-p 8000:8000 \
-e A10_USERNAME=admin \
-e A10_PASSWORD=your_password \
-e A10_BASE_URL=https://your-a10-host:17489 \
-e API_SECRET_TOKEN=your_secret_token \
-e WEBHOOK_ENABLED=true \
-e WEBHOOK_URL=https://discord.com/api/webhooks/your-webhook \
-e NOTIFY_ATTACK_DETECTED=true \
-e NOTIFY_ATTACK_MITIGATED=true \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/config:/app/config \
--restart unless-stopped \
ghcr.io/opastorello/a10-guardian:latest
# Run MCP Server (optional - for AI agent integration)
docker run -d \
--name a10-guardian-mcp \
-p 8001:8001 \
-e A10_USERNAME=admin \
-e A10_PASSWORD=your_password \
-e A10_BASE_URL=https://your-a10-host:17489 \
-e API_SECRET_TOKEN=your_secret_token \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HOST=0.0.0.0 \
-e MCP_PORT=8001 \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/config:/app/config \
--restart unless-stopped \
ghcr.io/opastorello/a10-guardian:latest \
python src/a10_guardian/mcp_server.py常见环境变量:
# Required
A10_USERNAME=admin # A10 device username
A10_PASSWORD=your_password # A10 device password
A10_BASE_URL=https://your-a10-host:17489 # A10 device URL
API_SECRET_TOKEN=your_internal_token # Internal master token — full access
MCP_SECRET_TOKEN=your_mcp_token # Dedicated MCP token — full access
# Optional - Webhooks
WEBHOOK_ENABLED=true # Enable webhook notifications
WEBHOOK_URL=https://discord.com/api/webhooks/... # Discord/Slack webhook URL
WEBHOOK_USERNAME=A10 Guardian # Bot display name
# Optional - Telegram (works alongside webhooks)
TELEGRAM_BOT_TOKEN=123456:ABC-DEF... # Get from @BotFather
TELEGRAM_CHAT_ID=-1001234567890 # Chat/group ID (@userinfobot)
# Optional - Attack Monitoring
NOTIFY_ATTACK_DETECTED=true # Alert on new attacks
NOTIFY_ATTACK_MITIGATED=true # Alert when attacks end
NOTIFY_ATTACK_ONGOING=false # Periodic updates (15min)
ATTACK_MONITORING_INTERVAL=30 # Check interval (seconds)
# Optional - Mitigation Notifications
NOTIFY_MITIGATION_START=true # Alert on mitigation start
NOTIFY_MITIGATION_STOP=true # Alert on mitigation stop
# Optional - Template Notifications
NOTIFY_TEMPLATE_CREATE=true # Alert on template creation
NOTIFY_TEMPLATE_IMPORT=true # Alert on template import选项2:从源代码构建
# 1. Clone and configure
git clone https://github.com/opastorello/a10-guardian.git
cd a10-guardian
cp .env.example .env
# Edit .env with your A10 credentials
# 2. Build and start
docker compose up --build -d| 服务 | 端口 | URL |
|---|---|---|
| REST API | 8000 | http://localhost:8000/docs |
| MCP服务器 | 8001 | http://localhost:8001/mcp |
💻 本地运行
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install
pip install -e .
# Start API server
uvicorn a10_guardian.main:app --reload
# Start MCP server (separate terminal)
MCP_TRANSPORT=streamable-http MCP_PORT=8001 python src/a10_guardian/mcp_server.py🔌 API终点
所有端点都需要 x-api-token 头球交互式文档可在 /docs.
🖥️ 系统
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /api/v1/system/info | 主机名、版本、序列号、正常运行时间 |
| 得到 | /api/v1/system/devices | 库存中的所有设备 |
| 得到 | /api/v1/system/license | 许可证类型、限制、到期 |
🛡️ 缓解
| 方法 | 路径 | 描述 |
|---|---|---|
| 职位 | /api/v1/mitigation/zones/mitigate/{ip}?template=default | 使用指定模板创建/部署区域 |
| 得到 | /api/v1/mitigation/zones/list | 分区分页列表 |
| 得到 | /api/v1/mitigation/zones/status/{ip} | 按IP进行全区域配置 |
| 得到 | /api/v1/mitigation/under-attack/{ip} | 检查给定IP的/24块是否受到攻击 |
| 删除 | /api/v1/mitigation/zones/remove/{ip} | 停止缓解并删除区域 |
| 得到 | /api/v1/mitigation/zones/{zone_name}/ip/{ip} | 检查特定IP是否在多IP区域中 ip_list → {found: bool} |
| 职位 | /api/v1/mitigation/zones/{zone_name}/ip/{ip} | 将IP添加到多IP区域(幂等) |
| 删除 | /api/v1/mitigation/zones/{zone_name}/ip/{ip} | 从多IP区域中删除IP(如果不存在,则删除404,如果最后一个IP,则删除422) |
📝 模板
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /api/v1/templates/list | 列出所有已配置的模板 |
| 得到 | /api/v1/templates/{name} | 获取模板详细信息 |
| 职位 | /api/v1/templates/{name} | 创建或更新模板 |
| 职位 | /api/v1/templates/validate | 验证模板而不保存(模拟运行) |
| 删除 | /api/v1/templates/{name} | 删除模板 |
| 得到 | /api/v1/templates/export/{name} | 将模板下载为JSON文件 |
| 职位 | /api/v1/templates/import/{ip}?name={name} | 从现有A10区域导入模板 |
🚨 攻击监控
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /api/v1/attacks/ongoing | 列出所有正在进行的DDoS攻击(分页) |
| 得到 | /api/v1/attacks/incident/{id}/stats | 获取特定事件的交通统计数据 |
| 得到 | /api/v1/attacks/incident/{id}/details | 获取完整的事件细节和原始数据 |
❤️ 健康
| 方法 | 路径 | 描述 |
|---|---|---|
| 得到 | /health | 健康检查(可选 ?check_upstream=true) |
📝 模板系统
📋 概述
模板是JSON配置,定义了如何创建和监视区域。它们包括:
- 📦 区域有效载荷:配置文件、策略、设备组和服务列表
- 📊 监控有效载荷:检测算法、灵敏度和符合协议的阈值
模板存储在 config/zone_templates/ (出于安全考虑,从Git中排除)。
⚙️ 初始设置
选项1:从现有区域导入(推荐)
curl -X POST "http://localhost:8000/api/v1/templates/import/203.0.113.5?name=default" \
-H "x-api-token: YOUR_TOKEN"选项2:手动创建
curl -X POST "http://localhost:8000/api/v1/templates/default" \
-H "x-api-token: YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d @docs/examples/gaming-template.json使用模板
配置后,在创建缓解措施时指定模板:
# Use default template
POST /api/v1/mitigation/zones/mitigate/203.0.113.10
# Use specific template
POST /api/v1/mitigation/zones/mitigate/203.0.113.10?template=gaming从同一模板创建的所有区域将具有相同的配置(配置文件、策略、服务)。
🚨 实时攻击监控
A10 Guardian提供跨平台DDoS攻击的自动实时监控 所有保护区 (不仅仅是那些通过API创建的)。该系统持续轮询A10设备以查找活动事件,并在检测到或减轻攻击时发送即时通知。
⚙️ 运作原理
- 🔍 后台监控任务 每10秒检查一次正在进行的攻击(可配置)
- 🌍 监控所有区域 在A10设备中,无论它们是如何创建的
- 🚨 检测新的攻击 并发送即时通知(🚨 检测到攻击)
- ⏱️ 跟踪攻击持续时间 并在攻击结束时发送通知(✅ 攻击停止)
- ⚠️ 可选的定期更新 用于长期攻击(⚠️ 攻击每15分钟进行一次)
⚙️ 配置
在中启用攻击监控 .env:
# Attack Monitoring (real-time DDoS attack detection)
NOTIFY_ATTACK_DETECTED=True # Alert when DDoS attack is detected
NOTIFY_ATTACK_MITIGATED=True # Alert when attack stops
NOTIFY_ATTACK_ONGOING=False # Periodic updates for long-running attacks (every 15min)
ATTACK_MONITORING_INTERVAL=30 # Check for attacks every N seconds (min: 10, max: 300)🔔 Webhook通知
当 WEBHOOK_ENABLED=true,攻击事件被发送到Discord/Slack/n8n:
检测到攻击:
{
"title": "🚨 Attack Detected",
"description": "DDoS attack detected on 203.0.113.50",
"color": 16711680, // Red
"fields": [
{"name": "Zone", "value": "203.0.113.50"},
{"name": "Severity", "value": "High"},
{"name": "Incident ID", "value": "a1b2c3d4-..."}
]
}攻击已停止:
{
"title": "✅ Attack Stopped",
"description": "Attack on 203.0.113.50 has stopped",
"color": 65280, // Green
"fields": [
{"name": "Zone", "value": "203.0.113.50"},
{"name": "Duration", "value": "8 minutes 42 seconds"}
]
}API终点
以编程方式查询攻击数据:
# List all ongoing attacks
GET /api/v1/attacks/ongoing?page=1&items=20
# Get detailed statistics for specific attack
GET /api/v1/attacks/incident/{incident_id}/stats
# Get full incident details with raw A10 data
GET /api/v1/attacks/incident/{incident_id}/details示例响应(正在进行的攻击):
{
"total": 2,
"page": 1,
"items_per_page": 20,
"incidents": [
{
"incident_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"zone_name": "203.0.113.50",
"zone_id": "f6593c0b-9c93-4736-babc-8a3828e35af6",
"severity": "High",
"start_time": "2026-02-13T10:15:30Z",
"status": "Ongoing"
}
]
}示例响应(事件统计):
{
"incident_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"zone_name": "203.0.113.50",
"total_packets": 15000000,
"total_bytes": 7500000000,
"peak_pps": 500000,
"peak_bps": 4000000000,
"attack_vectors": [
{"protocol": "UDP", "port": 53, "percentage": 65},
{"protocol": "TCP", "port": 80, "percentage": 25},
{"protocol": "ICMP", "port": null, "percentage": 10}
]
}🎯 监测范围
目前监控的内容:
- ✅ 所有正在进行的DDoS攻击 --整个A10设备的实时事件检测
- ✅ 任何保护区 --监控区域,无论其来源如何:
- 通过此API创建的区域 - 在A10 TPS web界面中手动创建的区域 - 由其他系统或自动化创建的区域
当前未监控的内容 (参见 路线图):
- ⏳ 区域创建/删除 -在API外部添加/删除区域时
- ⏳ 区域配置更改 --在A10界面中手动修改区域时
- ⏳ 模板漂移检测 --当部署的区域与其原始模板不同时
这提供了 完全能见度 进入所有DDoS活动。有关基础设施变更监控(区域、配置),请参阅路线图部分中的计划增强功能。
📱 电报通知
A10 Guardian支持 电报通知 与Slack/Discord webhooks并列。Telegram通知独立工作,可以与webhook通知同时启用。
⚙️ 设置
- 创建Telegram Bot:
- 消息 @植物学家 在Telegram上 - 发送 /newbot 并按照提示进行操作 - 复制 bot令牌 (格式: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
- 获取您的聊天ID:
- 与您的机器人开始对话或将其添加到组中 - 消息 @用户信息机器人 得到你的 聊天ID - 对于私人聊天:正数(例如。, 123456789) - 对于组:负数(例如。, -1001234567890)
- 在中配置
.env:
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_CHAT_ID=-1001234567890📨 消息格式
电报通知使用 Markdown格式 使用表情符号:
检测到攻击:
*🚨 Attack Detected*
DDoS attack detected on zone 203.0.113.50
🌐 *IP:* 203.0.113.50
📎 *Zone ID:* f6593c0b-...
⚙️ *Mode:* monitor
_A10 Guardian API_缓解措施开始:
*🛡️ Mitigation Started*
Protection activated for 203.0.113.50
🌐 *IP:* 203.0.113.50
🛡️ *Services:* 23
📋 *Profile:* Gaming_Profile
📋 *Template:* default
_A10 Guardian API_✅ 特性
- ✅ 与webhooks一起工作 --同时发送到Telegram和Discord/Slack
- ✅ 相同的事件报道 --模板、缓解措施、攻击、系统健康状况
- ✅ Markdown格式 --粗体、斜体、代码块,以提高可读性
- ✅ 特定事件表情符号 — 🚨 攻击,🛡️ 缓解措施,📋 模板
- ✅ 精细控制 --使用相同
NOTIFY_*设置为webhooks
🔧 配置示例
# Enable both Telegram and Discord
WEBHOOK_ENABLED=true
WEBHOOK_URL=https://discord.com/api/webhooks/...
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
TELEGRAM_CHAT_ID=-1001234567890
# Notification preferences (apply to both)
NOTIFY_ATTACK_DETECTED=true
NOTIFY_ATTACK_MITIGATED=true
NOTIFY_MITIGATION_START=true
NOTIFY_TEMPLATE_CREATE=true🤖 MCP集成
MCP服务器为AI代理提供了15个工具:
🖥️ 系统与监控
| 工具 | 说明 |
|---|---|
get_system_health() | 检查A10设备是否在线 |
get_system_devices() | 列出A10清单中的所有设备 |
get_system_license() | 许可证类型、限制和到期 |
list_active_mitigations() | 列出目前正在缓解的所有IP |
list_ongoing_attacks() | 列出当前正在缓解的所有DDoS攻击 |
get_zone_status(ip_address) | 特定区域的完整配置和状态 |
🛡️ 缓解管理
| 工具 | 说明 |
|---|---|
mitigate_ip(ip_address, template) | 使用指定模板创建或重新同步缓解措施 |
remove_mitigation(ip_address) | 停止缓解措施并移除该区域 |
zone_has_ip(zone_name, ip) | 检查IP是否在多IP区域中 ip_list |
add_ip_to_zone(zone_name, ip) | 将IP添加到多IP区域(幂等,锁保护) |
remove_ip_from_zone(zone_name, ip) | 从多IP区域中删除IP |
📝 模板管理
| 工具 | 说明 |
|---|---|
list_zone_templates() | 列出所有可用模板 |
get_zone_template(name) | 检索模板配置 |
set_zone_template(template_json, name) | 创建/更新带有验证功能的模板 |
import_zone_template(ip_address, name) | 从现有A10区域导入模板 |
通过克劳德代码(HTTP)连接
claude mcp add a10-guardian --transport http http://:8001/mcp \
--header "Authorization: Bearer "通过n8n(HTTP)连接
使用 MCP客户端工具 节点具有:
- 网址:
http://:8001/mcp - 身份验证: 持有者令牌
- 令牌: 你的
MCP_SECRET_TOKEN价值
通过克劳德桌面(stdio)连接
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"a10-guardian": {
"command": "python",
"args": ["src/a10_guardian/mcp_server.py"],
"cwd": "/path/to/a10-guardian",
"env": {
"A10_USERNAME": "admin",
"A10_PASSWORD": "your_password",
"API_SECRET_TOKEN": "your_internal_token",
"MCP_SECRET_TOKEN": "your_mcp_token",
"A10_BASE_URL": "https://your-a10-host:17489"
}
}
}
}看 docs/MCP_USAGE.md 了解完整的MCP集成指南。
🔐 认证
| 接口 | 标题 | 格式 |
|---|---|---|
| REST API | x-api-token | 普通令牌值 |
| MCP(HTTP) | Authorization | Bearer |
令牌配置文件
A10 Guardian支持 具有粒度范围的多个令牌。在中配置它们 .env:
| 令牌 | 变量 | 范围 | 用例 |
|---|---|---|---|
| 内部/团队 | API_SECRET_TOKEN | all | API完全访问-内部团队 |
| MCP客户端 | MCP_SECRET_TOKEN | all | 专为Claude、n8n、AI代理设计的代币 |
| 外部网站 | API_TOKENS (JSON) | 可配置 | 只读嵌入,合作伙伴集成 |
可用范围: system:read, mitigation:read, mitigation:write, templates:read, templates:write, attacks:read
示例--外部网站的只读令牌:
# .env
API_TOKENS={"tok_mysite": ["mitigation:read"]}# Can call:
GET /api/v1/mitigation/under-attack/{ip} ✅
GET /api/v1/mitigation/zones/list ✅
GET /api/v1/mitigation/zones/status/{ip} ✅
# Blocked:
POST /api/v1/mitigation/zones/mitigate ❌ 403
DELETE /api/v1/mitigation/zones/remove ❌ 403暴力防护: 每60秒每个IP有10次失败尝试→ 429 请求太多。
⚙️ 环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
| A10设备 | ||
A10_USERNAME | A10设备用户名 | *必需的* |
A10_PASSWORD | A10设备密码 | *必需的* |
A10_BASE_URL | A10设备的完整URL | https://A10_HOST:A10_PORT |
A10_VERIFY_SSL | 验证SSL证书 | False |
| API设置 | ||
API_SECRET_TOKEN | 内部主令牌——完全访问,所有作用域 | *必需的* |
MCP_SECRET_TOKEN | MCP客户端专用令牌(Claude,n8n)——完全访问 | *必需的* |
API_TOKENS | 具有粒度范围的附加令牌(JSON) | {} |
CORS_ORIGINS | 允许的CORS源,逗号分隔 | "" (全部屏蔽) |
DEBUG | 启用调试模式 | False |
LOG_LEVEL | 日志记录级别 | INFO |
RATE_LIMIT_DEFAULT | API费率限制 | 60/minute |
| 网络钩子 | ||
WEBHOOK_ENABLED | 启用webhook通知 | False |
WEBHOOK_URL | 松弛/不协调/n8n webhook URL | -- |
WEBHOOK_USERNAME | webhook消息的显示名称 | A10 Guardian |
WEBHOOK_FOOTER | webhook消息的页脚文本 | A10 Guardian API |
| 通知控制 | ||
NOTIFY_TEMPLATE_CREATE | 模板创建时通知 | True |
NOTIFY_TEMPLATE_UPDATE | 模板更新时通知 | False |
NOTIFY_TEMPLATE_DELETE | 模板删除时通知 | True |
NOTIFY_TEMPLATE_IMPORT | 模板导入时通知 | True |
NOTIFY_MITIGATION_START | 缓解措施开始时通知 | True |
NOTIFY_MITIGATION_STOP | 缓解措施停止时通知 | True |
NOTIFY_SYSTEM_HEALTH | 监测A10运行状况(间隔60秒) | False |
| 攻击监控 | ||
NOTIFY_ATTACK_DETECTED | 检测到攻击时发出警报 | True |
NOTIFY_ATTACK_MITIGATED | 攻击结束时发出警报 | True |
NOTIFY_ATTACK_ONGOING | 长期攻击的定期更新 | False |
ATTACK_MONITORING_INTERVAL | 检查间隔(秒)(10-300) | 30 |
🚧 路线图
未来版本的计划增强功能:
🔔 增强监控
- 区域变化检测 -在A10设备(API/MCP外部)中直接创建、修改或删除区域时进行监控并发出通知
- 当A10库存中出现/消失区域时发出实时警报 - 配置漂移检测(手动修改区域时) - 检测到外部变化时的对账建议
- 高级攻击分析 --具有模式识别的历史攻击数据
- 攻击频率趋势和热图 - 受攻击最多的服务和端口 - 用于异常检测的自动基线学习
⚡ 性能和规模
- 批处理区操作 -在单个API调用中创建/更新多个区域
- 区域分组 --按客户、环境或服务类型组织区域
- 异步后台任务 --针对长时间运行的快速集成
🔧 运营
- A10设备池管理 --支持多个A10设备,具有负载分布功能
- 配置备份/还原 --A10配置的自动快照
- 干运行模式 --在应用于生产之前预览更改
🤖 人工智能/自动化
- 事故响应手册 --常见场景的预定义MCP工作流程
- 自动缓解规则 --基于攻击模式的触发区域创建
- 自然语言查询 --用简单的英语询问有关攻击和区域的问题
想贡献吗?在上打开问题或PR !
📄 许可证
麻省理工学院
