Diyara03/stratos-bep
GitHub: Diyara03/stratos-bep
一个基于Django的多层次商业电子邮件保护系统,提供邮件摄取、威胁情报、评分判定与角色化仪表盘,解决邮件安全检测与可视化的教学与实战问题。
Stars: 0 | Forks: 0
# Stratos -- 商业电子邮件保护系统
Stratos 是一个多层次商业电子邮件保护(BEP)平台,通过三阶段检测管道分析每封传入邮件,并给出 **Clean**(正常)、**Suspicious**(可疑)或 **Malicious**(恶意)的判定。该系统作为威斯敏斯特国际大学塔什干分校(WIUT)本科毕业设计项目,基于 Group-IB 生产级 BEP 架构并针对学生规模进行适配。
## 功能特性
| 功能 | 详情 |
|---|---|
| **邮件摄取** | 带有浏览器 OAuth 设置的 Gmail API 连接器 |
| **预处理** | SPF / DKIM / DMARC 评分,白名单/黑名单 |
| **关键词检测** | 24 个钓鱼关键词,每个 +2 分,最高 +20 |
| **URL 分析** | URLhaus + VirusTotal 查询,基于 IP 的 URL 检测,短链接检测 |
| **附件扫描** | 与 MalwareBazaar 的 SHA-256 比对,13 种危险扩展名,双扩展名,MIME 不匹配 |
| **YARA 扫描** | 6 条自定义规则:VBA 宏、PE 可执行文件、JS 混淆、双扩展名、OLE、勒索软件 |
| **接收链分析** | 跳数异常、公网链中的私有 IP、时间戳错乱 |
| **威胁情报** | 通过 Celery Beat 每日同步 MalwareBazaar 与 URLhaus |
| **判定引擎** | 评分 0-100,可配置阈值(默认:清洁 <25,可疑 25-69,恶意 >=70) |
| **仪表盘** | 10 个页面,浅色主题,基于角色的访问控制(管理员 / 分析师 / 只读) |
| **系统设置** | 仅管理员可访问的 UI,用于配置 Gmail OAuth、API 密钥(加密)、检测阈值 |
| **REST API** | 5 个端点,DRF,支持会话 + Token 认证 |
| **导出** | CSV 邮件摘要、IOC 导出、JSON 威胁情报统计 |
| **测试** | 473 个测试,核心管道覆盖率 95%+ |
| **生产就绪** | Docker Compose + Caddy 反向代理 + gunicorn |
## 架构
```
Email --> PARSE --> PREPROCESS --> CHECK --> DECIDE --> ACT
|
Target: <30 seconds CLEAN / SUSPICIOUS / MALICIOUS
```
### 三阶段管道
| 阶段 | 组件 | 最高分 | 关键检查 |
|---|---|---|---|
| 1 | **预处理器** | ~65 | SPF/DKIM/DMARC 认证,黑名单(+40/+30),Reply-To 不匹配(+10),显示伪造(+10) |
| 2 | **检测器** | +125 | 关键词(最高 +20)、URL(最高 +40)、附件(最高 +50)、链路(最高 +15) |
| 3 | **决策器** | - | 聚合分数,应用阈值,已知恶意软件覆盖判定 |
### 判定阈值(可在设置界面配置)
| 分数 | 判定 | 动作 |
|---|---|---|
| 0-24 | 清洁 | 投递至收件箱 |
| 25-69 | 可疑 | 隔离并供分析师审查 |
| 70-100 | 恶意 | 自动拦截 |
## 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | Python 3.10+,Django 4.2,Django REST Framework |
| 数据库 | PostgreSQL 15 |
| 任务队列 | Redis 7 + Celery 5.3 |
| 邮件来源 | Gmail API(OAuth2 网页流程) |
| 威胁情报 | MalwareBazaar、URLhaus、VirusTotal、AbuseIPDB |
| 检测 | yara-python,python-magic |
| 前端 | Django 模板,Vanilla JS,Inter 字体 |
| 部署 | Docker Compose(6 个容器:django、postgres、redis、celery、celery-beat、caddy) |
| 安全 | Fernet 加密的 API 密钥、RBAC、whitenoise、gunicorn |
## 快速开始
### 选项 A:Docker(推荐)
```
git clone https://github.com/Diyara03/stratos-bep.git
cd stratos-bep
cp .env.example .env
# 编辑 .env:设置 SECRET_KEY、POSTGRES_PASSWORD、ALLOWED_HOSTS
# 开发
docker compose up -d
# 生产(使用 Caddy 反向代理 + gunicorn)
docker compose -f docker-compose.prod.yml up -d
```
### 选项 B:本地开发
```
python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows
pip install -r requirements.txt
python manage.py migrate
python manage.py demo_setup
python manage.py runserver
```
### 演示凭据
| 用户名 | 密码 | 角色 |
|---|---|---|
| admin | admin123 | 管理员(完全访问) |
| analyst | analyst123 | 分析师(审核与导出) |
| viewer | viewer123 | 只读用户(仅查看) |
运行 `python manage.py demo_setup` 可创建这些用户及 10 封示例邮件。
## 部署(赫兹云)
完整分步指南:[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)
```
# 在服务器上(Ubuntu 22.04)
apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sh
apt install -y docker-compose-plugin
cd /opt
git clone https://github.com/Diyara03/stratos-bep.git stratos
cd stratos
cp .env.example .env
nano .env # Set SECRET_KEY, POSTGRES_PASSWORD, ALLOWED_HOSTS
docker compose -f docker-compose.prod.yml up -d
docker compose -f docker-compose.prod.yml exec django python manage.py createsuperuser
```
访问地址 `http://YOUR_SERVER_IP`。通过 **设置**(管理员 > 设置)配置 Gmail 与 API 密钥。
## 系统设置(仅管理员)
部署完成后,可通过浏览器配置集成,无需 SSH:
| 设置项 | 操作 |
|---|---|
| **Gmail** | 上传 OAuth 凭证 JSON,点击“连接 Gmail 账户”,通过 Google 授权 |
| **VirusTotal** | 粘贴 API 密钥,点击测试,保存 |
| **AbuseIPDB** | 粘贴 API 密钥,点击测试,保存 |
| **阈值** | 调整清洁/恶意滑块,保存 |
| **获取频率** | 设置轮询频率(默认:10 秒) |
| **威胁情报同步** | 开启每日 MalwareBazaar 与 URLhaus 导入 |
API 密钥在存储时加密(Fernet AES-128-CBC)。
## 项目结构
```
stratos-bep/
accounts/ # User model with RBAC (Admin/Analyst/Viewer)
emails/ # Core app: models, services, views, settings
services/
preprocessor.py # SPF/DKIM/DMARC + whitelist/blacklist
checker.py # Keywords, URLs, attachments, chain
decider.py # Score aggregation + verdict
analyzer.py # Pipeline orchestrator
parser.py # Gmail message parser
gmail_connector.py
settings_views.py # System configuration UI
management/commands/
demo_setup.py # Create demo scenario
demo_teardown.py # Clean demo data
threat_intel/ # TI models + sync tasks
reports/ # Export + report models
stratos_server/ # Django project settings
templates/ # 11 HTML templates (light theme)
static/ # CSS + JS + favicon
tests/ # 473 tests across 19 files
docs/ # Architecture, deployment, admin guide, playbook
docker-compose.yml
docker-compose.prod.yml
Caddyfile
```
## 关键数据
| 指标 | 数值 |
|---|---|
| Django 模型 | 16 个,分布在 4 个应用 |
| 测试数量 | 473(全部通过) |
| 核心覆盖率 | 95%+ |
| 界面页数 | 10 |
| API 端点 | 5 |
| 设置端点 | 10 |
| 钓鱼关键词 | 24 |
| YARA 规则 | 6 |
| 危险扩展名 | 13 |
| Docker 服务 | 6(生产环境) |
## 截图
仪表盘、邮件详情、隔离区、威胁情报与设置页面的截图已部署在应用程序中。
## 管理命令
```
python manage.py demo_setup # Full demo scenario (10 emails, TI data, users)
python manage.py demo_setup --flush # Clear and recreate
python manage.py demo_teardown # Remove demo data, keep users
python manage.py sync_ti_feeds # Manual TI feed sync
python manage.py fetch_emails # Manual Gmail fetch
```
## API 端点
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | `/api/emails/` | 分页邮件列表(支持过滤) |
| GET | `/api/emails//` | 包含完整分析的邮件详情 |
| GET | `/api/quarantine/` | 隔离条目列表 |
| POST | `/api/quarantine//action/` | 释放 / 拦截 / 删除 |
| GET | `/api/dashboard/stats/` | 仪表盘统计 JSON |
所有端点均需认证(会话或 Token)。
## 学术背景
- **大学**:威斯敏斯特国际大学塔什干分校(WIUT)
- **学位**:文学学士(荣誉)商业信息系统
- **模块**:6BUIS007C-n(商业信息系统项目)
- **灵感来源**:Group-IB 商业电子邮件保护
## 许可证
本项目作为学术提交开发,版权归属于威斯敏斯特大学,符合 BISP 手册第 4 章附录 3 的规定。
标签:Ask搜索, BEP, Caddy, Celery Beat, Django, DKIM, DMARC, DNS信息、DNS暴力破解, Docker, Gmail API, Gunicorn, IOC导出, IP信誉, JSON威胁情报, MalwareBazaar, MIME类型检测, NIDS, OAuth, Python Web框架, RBAC, REST API, SHA-256, SPF, URLhaus, URL分析, VirusTotal, Web安全, YARA规则, 仪表盘, 前端轻主题, 单元测试, 双扩展名, 反向代理, 反钓鱼, 商业邮件保护, 威胁情报, 学生项目, 安全防御评估, 定时任务, 容器化, 开发者工具, 搜索引擎查询, 测试用例, 测试覆盖, 版权保护, 生产就绪, 电子邮件安全, 短链接检测, 网络测绘, 蓝队分析, 覆盖率, 角色权限控制, 跳数异常, 逆向工具, 邮件网关, 配置阈值, 附件扫描