miladhzzzz/nuclei-api
GitHub: miladhzzzz/nuclei-api
Nuclei API:AI增强的自动化漏洞扫描和模板管理平台
Stars: 3 | Forks: 1
# Nuclei API:自动化漏洞模板生成与扫描平台
## 概述
**Nuclei API** 是一个围绕 [Nuclei](https://nuclei.projectdiscovery.io/) 构建的先进、AI增强的自动化漏洞扫描和模板管理平台。它提供了一个REST API,用于运行扫描、管理模板以及编排一个管道,该管道可以获取新的漏洞,使用LLM生成检测模板,验证它们,并在需要时进行细化。该系统利用FastAPI、Celery、Redis、Docker和Ollama(LLM)来提供可扩展、智能和自动化的安全扫描。
## 关键特性
- **自动化CVE模板生成**:
从公共来源获取最新的漏洞(CVE),并使用LLM为每个漏洞生成Nuclei YAML模板。
- **模板验证与细化**:
通过在已知易受攻击的主机上运行模板来验证生成的模板。如果验证失败,则使用LLM细化模板并重试。
- **灵活的扫描API**:
公开端点以在目标(IP/域名)上运行Nuclei扫描,支持自定义模板、AI生成的模板和标准模板。
- **自定义模板扫描**:
通过base64编码的内容或文件上传上传并扫描您自己的Nuclei YAML模板。
- **AI驱动扫描**:
使用描述您想要检测的漏洞的自然语言提示生成和运行自定义模板。
- **MCP(模型上下文协议)集成**:
与可发现工具和标准化的工具调用接口完全集成LLM/代理,用于AI驱动的安全工作流程。
- **异步管道**:
使用Celery进行分布式、异步任务编排(获取、生成、验证、细化)。
- **指标与缓存**:
使用Redis缓存漏洞数据并跟踪管道指标。
- **容器化扫描**:
在Docker容器中运行Nuclei扫描以实现隔离和资源控制。
- **实时日志流**:
直接从运行的Docker容器中流式传输扫描日志。
- **现代Web UI**:
Next.js前端与TypeScript、Tailwind CSS和Radix UI组件相结合,提供专业的用户体验。
- **可扩展与模块化**:
具有面向服务的架构的Docker、Nuclei、指纹识别和模板的模块化控制器。
- **生产就绪的Docker设置**:
多阶段构建、优化镜像和全面的Docker Compose配置,易于部署。
## 架构
```
flowchart TD
subgraph User
A1[API Client / UI / LLM Agent]
end
subgraph API
B1[FastAPI App]
B2[NucleiRoutes]
B3[PipelineRoutes]
B4[MCP Routes]
end
subgraph ServiceLayer
S1[ScanService]
S2[TemplateService]
end
subgraph Celery
C1[fetch_vulnerabilities]
C2[process_vulnerabilities]
C3[generate_nuclei_template]
C4[store_templates]
C5[validate_template]
C6[refine_nuclei_template]
C7[run_scan]
C8[run_ai_scan]
end
subgraph Infra
D1[Ollama LLM]
D2[Redis]
D3[Docker Engine]
D4[Nuclei Scanner]
D5[FileSystem]
end
A1--REST/MCP-->B1
B1--routes-->B2
B1--routes-->B3
B1--routes-->B4
B2--calls-->S1
B2--calls-->S2
B3--calls-->S1
B3--calls-->S2
B4--calls-->S1
B4--calls-->S2
S1--orchestrates-->Celery
S2--orchestrates-->Celery
C1--uses-->D2
C2--uses-->D1
C3--uses-->D1
C4--stores-->D5
C5--runs-->D4
C5--in-->D3
C5--metrics-->D2
C6--uses-->D1
C7--runs-->D4
C8--runs-->D4
D4--runs in-->D3
```
### 描述
- **用户/代理**:通过REST或MCP端点(用于LLM/代理集成)交互。
- **API层**:模块化FastAPI路由器:
- `NucleiRoutes`(扫描、模板管理)
- `PipelineRoutes`(管道/指标)
- `MCP Routes`(LLM/代理工具清单和工具调用)
- **服务层**:`ScanService`、`TemplateService`封装业务逻辑,编排Celery管道,并与控制器交互。
- **Celery任务**:处理异步、分布式工作(获取、生成、验证、扫描、细化)。
- **控制器**:Docker、Nuclei等无状态适配器(为简洁起见,图中未显示)。
- **模型**:所有API和内部数据的Pydantic模型。
- **基础设施**:Redis(缓存/指标)、Docker(隔离)、Ollama LLM(模板生成/细化)、Nuclei(扫描)、FileSystem(模板存储)。
### API结构
- `app/api/NucleiRoutes.py` — 主要扫描/模板端点
- `app/api/PipelineRoutes.py` — 管道/指标端点
- `app/api/mcp_routes.py` — MCP端点,用于LLM/代理集成
- `app/services/` — 业务逻辑
- `app/models/` — Pydantic模型
- `app/celery_tasks/` — Celery任务定义
- `app/controllers/` — 外部系统适配器
## 管道流程
```
flowchart TD
A[fetch_vulnerabilities] --> B[process_vulnerabilities]
B --> C[generate_nuclei_templates_group]
C --> D[store_templates]
D --> E[validate_templates_callback_group]
E --> F[validate_template_per_template]
F --fail--> G[refine_nuclei_template]
G --> H[store_refined_template]
H --> F
F --success--> I[Done]
```
## 安装说明
### 前置条件
- **Python 3.8+**
- **Docker & Docker Compose**
- **Redis**
- **Ollama(或兼容的LLM API)**
- **Node.js 18+ & pnpm**(用于前端开发)
- **make**
### 克隆仓库
```
git clone
cd nuclei-api
```
### 使用Makefile快速开始
```
# 显示所有可用命令
make help
# 安装后端依赖
make install
# 启动全栈(Docker Compose)
make compose-up
# 跟踪日志
make compose-logs
# 停止栈
make compose-down
```
## Docker部署
### 生产部署
```
# 构建并启动所有服务
make compose-up
# 查看日志
make compose-logs
# 如有需要扩展服务
docker compose -f docker-compose.yml up -d --scale celery_worker=3
```
### 包含的服务
Docker Compose设置包括以下服务:
- **nuclei-api**(端口8000):主要FastAPI应用程序
- **redis**(端口6379):Celery的缓存和消息代理
- **celery_worker**:后台任务处理,用于扫描和模板生成
- **celery_beat**:任务调度器,用于自动生成模板
- **flower**(端口5555):Celery监控和任务管理UI
- **ollama**(端口11434):LLM服务,用于模板生成和细化
- **open-webui**(端口3331):Ollama模型管理的Web界面
- **nuclei-fingerprint**(端口3330):操作系统指纹识别服务
- **loki**(端口3100):日志聚合和监控
### 阶段环境
```
# 使用预发布配置
docker compose -f docker-compose.staging.yaml up -d
```
### 服务管理
```
# 查看服务状态
make compose-ps
# 查看特定服务的日志
docker compose -f docker-compose.yml logs -f nuclei-api
# 重启特定服务
docker compose -f docker-compose.yml restart celery_worker
# 在高负载时扩展工作者
docker compose -f docker-compose.yml up -d --scale celery_worker=5
```
### 选项2:开发设置
#### 安装Python依赖项
```
make install
```
#### 克隆Nuclei模板
```
make templates-clone
```
#### 启动Redis和Ollama
```
docker compose -f docker-compose.yml up -d redis ollama
```
#### 运行API
```
make run-api
```
#### 运行Celery Worker和Beat
```
make run-worker
make run-beat
```
#### 运行前端(可选)
```
make install-frontend
pnpm --dir frontend dev
```
本地API(uvicorn)在 `http://localhost:8080` 上运行。
Docker Compose公开API在 `http://localhost:8000` 上。
前端在 `http://localhost:3000` 上运行。
## 使用示例
### 1. **触发自动化模板生成管道**
```
curl -X GET http://localhost:8080/nuclei/templates/generate
```
这将获取新的CVE,使用LLM生成模板,存储并验证它们。
### 2. **运行扫描(API**)
#### 基本扫描
```
curl -X POST \
-H "Content-Type: application/json" \
-d '{ "target": "https://example.com", "scan_type": "standard", "templates": ["cves/"] }' \
http://localhost:8080/nuclei/scans
```
#### AI扫描
```
curl -X POST \
-H "Content-Type: application/json" \
-d '{ "target": "https://example.com", "prompt": "Scan for SQLi" }' \
http://localhost:8080/nuclei/scans/ai
```
#### 获取扫描日志
```
curl http://localhost:8080/nuclei/containers/nuclei_scan_123456/logs
```
## API端点
### 健康检查
- **GET /**
返回 `{ "ping": "pong!" }`
### 运行扫描
- **POST /nuclei/scans**
请求:
{
"target": "https://example.com",
"scan_type": "standard",
"templates": ["cves/"] // 可选
}
响应:
返回异步扫描执行的任务ID。
### 运行AI扫描
- **POST /nuclei/scans/ai**
请求:
{
"target": "https://example.com",
"prompt": "生成一个用于XSS的模板"
}
### 兼容性扫描端点(向后兼容)
- **POST /nuclei/scan**
为旧客户端保留的旧别名。
### 获取任务状态
- **GET /nuclei/tasks/{task_id}**
获取Celery任务和扫描容器的状态/结果。
### 获取容器日志
- **GET /nuclei/containers/{container_id}/logs**
从运行的扫描容器中流式传输日志。
### 获取容器状态
- **GET /nuclei/containers/{container_name}/status**
返回容器的运行/退出/错误状态。
### 指纹目标
- **POST /nuclei/fingerprints**
排队独立目标指纹识别。
### 上传自定义模板
- **POST /nuclei/templates/upload**
上传并验证自定义Nuclei模板文件。
### 验证模板内容
- **POST /nuclei/templates/validate**
异步验证模板内容。
### 触发模板生成管道
- **GET /nuclei/templates/generate**
启动完整的CVE到模板管道。
### Prometheus指标
- **GET /metrics**
Prometheus兼容的指标端点,用于监控和警报。
返回包括以下指标的指标:
- HTTP请求计数、持续时间和大小的指标
- Celery任务执行指标
- Nuclei扫描性能和结果
- 模板生成和验证统计信息
- 系统资源使用情况(CPU、内存、磁盘)
- Redis操作和内存使用
- 自定义业务指标(活动扫描、可用的模板)
- **GET /health**
带有基本指标和服务状态的健康检查端点。
返回:
{
"status": "healthy",
"timestamp": 1234567890.123,
"services": {
"redis": "healthy",
"system": "healthy",
"api": "healthy"
},
"metrics": {
"active_scans": 5,
"cpu_usage": 45.2,
"memory_usage": 1073741824,
"redis_memory": 52428800
}
}
### Prometheus配置
将以下内容添加到您的 `prometheus.yml`:
```
scrape_configs:
- job_name: 'nuclei-api'
static_configs:
- targets: ['localhost:8000']
metrics_path: '/metrics'
scrape_interval: 15s
```
## MCP(模型上下文协议)端点
API通过模型上下文协议(MCP)公开端点,用于LLM/代理集成:
- **GET /v1/tools**
返回所有可用工具(API操作)及其参数模式清单,用于代理/LLM发现。
- **POST /v1/tool-calls**
允许代理或LLM通过名称调用任何支持的工具,将参数作为JSON对象传递。返回结果或错误。
**示例:**
```
curl -X POST \
-H "Content-Type: application/json" \
-d '{ "tool_name": "nuclei_scan", "arguments": { "target": "https://example.com" } }' \
http://localhost:8080/v1/tool-calls
```
MCP端点在 `app/api/mcp_routes.py` 中实现,并在 `main.py` 中注册。
### 监控与调试
- **Flower仪表板**:`http://localhost:5555` - 监控Celery任务和工作进程
- **Open WebUI**:`http://localhost:3331` - 管理Ollama模型和聊天
- **Loki日志**:`http://localhost:3100` - 集中日志
- **API文档**:`http://localhost:8000/docs` - 交互式API文档
- **Grafana仪表板**:`http://localhost:3000` - 综合监控仪表板(admin/admin)
- **Prometheus**:`http://localhost:9090` - 指标收集和查询
### Grafana仪表板功能
Nuclei API仪表板提供以下面板的综合监控:
#### **API性能**
- HTTP请求速率和持续时间
- 响应大小和错误率
- API端点使用模式
#### **Celery任务监控**
- 任务执行速率和持续时间
- 队列大小和工作进程状态
- 任务成功/失败率
#### **Nuclei扫描指标**
- 扫描执行速率和持续时间
- 漏洞发现跟踪
- 模板使用统计信息
#### **模板管道**
- 模板生成和验证速率
- 管道执行统计信息
- CVE的成功/失败率
#### **系统资源**
- CPU、内存和磁盘使用情况
- Redis内存和连接指标
- Docker容器统计信息
#### **业务指标**
- 活动扫描计数
- 可用的模板类型
- 错误率和系统健康
### 仪表板设置
1. **访问Grafana**:导航到 `http://localhost:3000`
2. **登录**:使用 `admin/admin`(在生产中更改)
3. **仪表板**:Nuclei API仪表板自动加载
4. **自定义**:修改面板、添加警报或创建新的仪表板
### 警报设置
在Grafana中配置以下警报:
- 高错误率(>5%持续5分钟)
- Celery工作进程计数低(<1持续5分钟)
- 系统资源使用率高(>80% CPU/内存)
- 扫描失败(>10%失败率)
## API结构 & 组织
- **app/api/NucleiRoutes.py**:主要Nuclei扫描/模板API端点
- **app/api/PipelineRoutes.py**:管道和指标端点
- **app/api/mcp_routes.py**:MCP端点,用于LLM/代理集成
- **app/services/**:业务逻辑和编排
- **app/models/**:用于请求/响应验证的Pydantic模型
- **app/celery_tasks/**:Celery任务定义
- **app/controllers/**:外部系统(Docker、Nuclei等)的无状态控制器
Routers在 `main.py` 中使用新的导入路径导入并注册(例如,`from app.api.NucleiRoutes import router as nuclei_router`)。
## 指标 & 监控
- **Redis** 用于缓存漏洞数据并跟踪管道指标(生成的模板、验证、细化、失败等)。
- **Sentry** 集成可用于错误监控(通过环境配置)。
- **管道指标**:跟踪模板生成成功率、验证尝试和扫描性能。
- **实时仪表板**:通过Web界面监控系统健康和性能。
## 扩展 & 定制
- 通过编辑 `fetch_vulnerabilities` 任务添加新的漏洞来源。
- 通过配置更改LLM模型或端点。
- 集成您自己的UI或直接使用提供的API。
- 通过扩展工具清单和处理程序添加新的MCP工具。
- 通过修改服务层自定义扫描工作流程。
- 通过添加新组件和页面扩展前端。
## 贡献
欢迎贡献!请为错误修复、新功能或改进打开问题或拉取请求。
### 开发指南
1. **代码风格**:遵循PEP 8(Python)和ESLint(TypeScript)。
2. **测试**:为新功能和API端点添加测试。
3. **文档**:更新README并添加新函数的docstrings。
4. **Docker**:确保更改与提供的Docker设置兼容。
## 许可证
[MIT](LICENSE) 或如仓库中指定。
## 联系
有关更多详细信息或支持,请联系开发团队。
标签:AI增强, AI风险缓解, AV绕过, Celery, CVE模板, Docker, FastAPI, Google, LLM, LLM评估, NIDS, Nuclei, Ollama, Redis, Unmanaged PE, 安全防御评估, 容器化, 异步处理, 搜索引擎查询, 日志流, 模板管理, 模板验证, 缓存, 自动化攻击, 请求拦截