Learnlife001/cyberrecon
GitHub: Learnlife001/cyberrecon
CyberRecon 是一个基于 FastAPI、Celery 和 Next.js 构建的全栈异步 Web 侦察与漏洞扫描平台,用于自动化执行授权范围内的目标信息收集与安全评估。
Stars: 0 | Forks: 0
# CyberRecon
CyberRecon 是一个全栈异步侦察平台,专为安全学习和授权评估而设计。它结合了 Next.js 运维仪表板、FastAPI、持久化的 Redis/Celery 任务队列、PostgreSQL 持久化存储以及容器化部署。
## 演示内容
- 自动化 DNS、WHOIS、IP、子域名、端口和技术发现
- 具有排队中、运行中、已完成和失败状态的持久化后台任务
- PostgreSQL 中的持久化扫描历史和结构化结果
- API key 认证、速率限制、CORS 控制和目标验证
- 防止扫描私有、环回、链路本地和保留网络
- Docker 化的 API、worker、PostgreSQL 和 Redis 服务
- 自动化的后端测试、前端检查、依赖审计和容器构建
## 架构
```
flowchart LR
U[Analyst] --> UI[Next.js dashboard]
UI -->|X-API-Key| API[FastAPI API]
API --> DB[(PostgreSQL)]
API --> Q[(Redis queue)]
Q --> W[Celery worker]
W --> R[Recon modules]
R --> DNS[DNS / WHOIS / IP APIs]
R --> NMAP[Nmap]
W --> DB
UI -->|poll job status| API
```
API 负责验证并将每个请求放入队列。一个独立的 Celery worker 执行侦察任务并将其结果存储在 PostgreSQL 中,因此 API 重启不会静默丢弃已排队的任务。仪表板会轮询 API 并渲染当前状态、情报面板和扫描历史。
## 技术栈
| 层级 | 技术 |
| --- | --- |
| 前端 | Next.js, React, TypeScript, Tailwind CSS |
| API | Python, FastAPI, SQLAlchemy, Uvicorn |
| 任务 | Celery, Redis |
| 数据 | PostgreSQL |
| 侦察 | Nmap, DNS, WHOIS, IP 情报 |
| 交付 | Docker Compose, GitHub Actions |
## 在本地运行生产级技术栈
前提条件:Docker Desktop 和 Docker Compose。
```
git clone https://github.com/Learnlife001/cyberrecon.git
cd cyberrecon
Copy-Item .env.example .env
```
为 `.env` 中的 `SCAN_API_KEY` 生成一个较长的随机值,然后启动服务:
```
docker compose up --build -d
docker compose ps
```
API 可通过 `http://localhost:8000` 访问,交互式文档位于 `http://localhost:8000/docs`。单独配置前端:
```
Set-Location frontend
Copy-Item .env.example .env.local
npm install
npm run dev
```
打开 `http://localhost:3000`,在仪表板设置中输入相同的 API key,并提交一个授权的公共域名。
如果 8000 端口已被占用,请在 `.env` 中设置 `API_PORT`,例如 `API_PORT=8002`。
## 配置
根目录下的 `.env.example` 记录了所有后端设置。重要的生产环境配置包括:
| 变量 | 用途 |
| --- | --- |
| `DATABASE_URL` | PostgreSQL 连接字符串 |
| `REDIS_URL` | Celery 使用的 Redis broker |
| `TASK_QUEUE_MODE` | 使用 `celery` 进行持久化任务,或使用 `inprocess` 用于开发 |
| `SCAN_API_KEY` | `X-API-Key` 请求头中所需的密钥 |
| `ALLOWED_ORIGINS` | 逗号分隔的受信任前端源 |
| `SCAN_RATE_LIMIT` | 每个速率窗口内的最大扫描提交次数 |
| `NMAP_PATH` | 可选的 Nmap 可执行文件显式路径 |
密钥从环境中加载,严禁提交。`.env` 文件已被排除在 Git 和 Docker 构建上下文之外。
## API 工作流
1. `POST /scan` 验证目标并返回任务标识符。
2. Redis 持久化保存任务,直到 Celery worker 接收。
3. `GET /results/{job_id}` 报告 `queued`、`running`、`completed` 或 `failed` 状态。
4. `GET /scans` 返回持久化的扫描历史。
5. `GET /health` 报告数据库健康状态和配置的队列模式。
受保护的端点需要:
```
X-API-Key: your-configured-key
```
## 安全控制
- 域名在扫描前会进行标准化和解析。
- 解析到非公共地址范围的目标将被拒绝。
- 扫描端点需要 constant-time API key 验证。
- 扫描创建受客户端地址的速率限制。
- CORS 通过配置的源进行限制。
- 容器以非特权应用程序用户身份运行。
- CI 运行单元测试、Bandit、pip-audit、前端 lint/构建/审计以及 Docker 构建。
这些控制措施减少了意外误用;它们并不能将应用程序变成多租户的商业扫描服务。生产环境使用应添加集中式身份认证、分布式速率限制、审计日志、监控和显式授权记录。
## 开发检查
```
.\.venv\Scripts\python.exe -m unittest discover -s tests -v
.\.venv\Scripts\python.exe -m compileall -q api_server.py worker.py modules
Set-Location frontend
npm run lint
npm run build
```
## 作品集亮点
- 设计了弹性的异步扫描工作流,而不是在请求处理程序中运行漫长的侦察任务。
- 在身份认证、公共目标验证、速率限制、密钥和容器权限周围实施了安全边界。
- 集成了响应式安全运维界面,具备持久化的情报和任务状态跟踪。
## 作者
Chigozie Okuma — [GitHub](https://github.com/Learnlife001) · [LinkedIn](https://www.linkedin.com/in/cjokuma23/) · [作品集](https://learnlife-portfolio.vercel.app/)
标签:AV绕过, CTI, FastAPI, GitHub, Web侦察, 实时处理, 密码管理, 异步任务队列, 插件系统, 搜索引擎查询, 测试用例, 版权保护, 逆向工具