ionsec/Forti-DFIR
GitHub: ionsec/Forti-DFIR
Fortinet 日志解析工具,提供 CLI 与 Web 方式简化安全事件调查。
Stars: 1 | Forks: 1
# Forti-DFIR - IONSec Fortinet 日志解析工具
## 概述
**IONSec Forti-DFIR 日志解析工具** 是一个用于分析 Fortinet VPN 和防火墙日志的综合性解决方案。可作为命令行工具或现代化 Web 应用程序使用,它能够提取关键数据并导出为 CSV 格式,从而简化事件响应者的安全调查流程。
由 **IONSec 研究团队** 开发。
## 功能
- 🔍 **VPN 登录解析器**:提取成功的 VPN 登录详情。
- 📊 **防火墙日志聚合**:按目标 IP 汇总流量,过滤私有/本地地址。
- 📌 **VPN 会话关闭分析器**:提取特定用户的会话终止统计信息,包括发送字节数。
- 💻 **交互式 CLI 界面**:引导用户完成日志选择和解析选项。
- 🌐 **Web 应用程序**:现代化的 Web 界面,支持身份验证、文件上传和实时处理。
- 📂 **CSV 导出**:保存解析后的数据以便轻松分析。
- 📁 **多格式支持**:同时支持 Fortinet 日志格式和 CSV 文件。
- 🔒 **安全加固**:输入验证、速率限制、安全的身份验证。
- 🐳 **Docker 支持**:通过 Docker Compose 轻松部署。
- ☁️ **云端就绪**:支持一键部署到 Netlify 和 Vercel。
- 📖 **完整文档**:提供基于 Sphinx 的文档。
## 快速开始
### 选项 1:Web 应用程序(推荐)
```
# 克隆仓库
git clone https://github.com/ionsec/Forti-DFIR.git
cd Forti-DFIR
# 复制环境模板
cp .env.example .env
# 使用您的凭据编辑 .env(重要!)
# 使用 Docker 启动
cd web_app
docker-compose up
```
访问应用地址:http://localhost:3000
### 选项 2:命令行界面
```
# 克隆仓库
git clone https://github.com/ionsec/Forti-DFIR.git
cd Forti-DFIR
# 安装依赖
pip install pandas
# 运行 CLI
python log_parser.py
```
## 安装
### 先决条件
- Python **3.11+**(推荐)
- `pandas` 库
### CLI 安装
```
git clone https://github.com/ionsec/Forti-DFIR.git
cd Forti-DFIR
pip install pandas
python log_parser.py
```
### Web 应用程序安装
**选项 A - 使用 Docker(推荐):**
```
cd web_app
docker-compose up
```
**选项 B - 手动安装:**
```
# 后端
cd web_app/backend
python -m venv venv
source venv/bin/activate # Linux/macOS
# 或:venv\Scripts\activate # Windows
pip install -r requirements.txt
# 复制并配置环境
cp ../../.env.example .env
# 使用您的设置编辑 .env
# 启动 Redis(Celery 所必需)
redis-server
# 启动 Celery 工作进程(单独终端)
celery -A app.celery worker --loglevel=info
# 启动 Flask 服务器
python app.py
# 前端(单独终端)
cd ../frontend
npm install
npm start
```
## 配置
### 环境变量
从模板创建 `.env` 文件:
```
cp .env.example .env
```
**生产环境必需:**
| 变量 | 描述 |
|----------|-------------|
| `SECRET_KEY` | Flask 密钥(至少 32 个随机字符) |
| `JWT_SECRET_KEY` | JWT 签名密钥(至少 32 个随机字符) |
| `ADMIN_USER` | 初始管理员用户名 |
| `ADMIN_PASSWORD` | 初始管理员密码(至少 12 位,含大小写字母、数字和特殊字符) |
**生成安全密钥:**
```
python -c "import secrets; print(secrets.token_hex(32))"
```
## CLI 用法
运行 CLI 工具:
```
python log_parser.py
```
### 交互式菜单
```
1. Parse VPN logs
2. Parse and aggregate firewall logs
3. Parse VPN shutdown sessions for a user
4. Exit
```
### CLI 选项
| 选项 | 描述 |
|--------|-------------|
| `1` | 解析 VPN 日志 - 提取成功登录详情 |
| `2` | 解析防火墙日志 - 按目标 IP 聚合流量 |
| `3` | 解析 VPN 关闭 - 提取特定用户的会话数据 |
| `-help` | 显示使用说明 |
| `-v` | 显示版本 |
## Web 应用程序
访问 Web 界面:http://localhost:3000
### 功能
- **用户身份验证**:使用 JWT 令牌的 Secure 登录
- **文件上传**:支持 .txt、.log、.csv 文件的拖放上传
- **实时处理**:异步处理并带状态更新
- **结果预览**:在下载前查看解析后的数据
- **CSV 导出**:导出结果以便进一步分析
### 默认凭据
⚠️ **请立即在生产环境中更改这些默认值!**
- 用户名:`admin`
- 密码:`admin123`
通过环境变量设置自定义凭据:
```
export ADMIN_USER=your_username
export ADMIN_PASSWORD='YourStrongPassword123!'
```
## 输出格式
### VPN 日志输出
| 列 | 描述 |
|--------|-------------|
| date | 日志条目日期 |
| time | 日志条目时间 |
| user | VPN 用户名 |
| tunneltype | 隧道类型(例如 ssl-web) |
| remip | 远程 IP 地址 |
| reason | 登录原因/状态 |
| msg | 附加消息 |
### 防火墙日志输出
| 列 | 描述 |
|--------|-------------|
| dstip | 目标 IP(仅公共地址) |
| total_sentbyte | 发送字节总数 |
| size_mb | 以兆字节为单位的大小 |
### VPN 关闭输出
| 列 | 描述 |
|--------|-------------|
| date | 会话结束日期 |
| time | 会话结束时间 |
| user | VPN 用户名 |
| sentbyte | 发送字节数 |
| sent_bytes_in_MB | 以兆字节为单位的大小 |
## 安全
### 安全特性
- ✅ 输入验证和净化
- ✅ 速率限制(每分钟 5 次登录,每分钟 10 次解析)
- ✅ 安全密码哈希(scrypt)
- ✅ JWT 身份验证
- ✅ 安全标头(CSP、HSTS、X-Frame-Options)
- ✅ 文件类型验证
- ✅ 路径遍历防护
- ✅ 审计日志
### 生产环境检查清单
- [ ] 设置强 `SECRET_KEY` 和 `JWT_SECRET_KEY`
- [ ] 更改默认管理员凭据
- [ ] 设置 `FLASK_ENV=production`
- [ ] 设置 `DEBUG=False`
- [ ] 配置 HTTPS
- [ ] 设置适当的 CORS 源
## 文档
完整文档位于 `docs/` 目录中。
### 构建文档
```
cd docs
pip install sphinx sphinx-rtd-theme myst-parser
make html
# 打开 docs/build/html/index.html
```
### 文档内容
- 安装指南
- 快速开始
- CLI 用户指南
- Web 应用程序指南
- 安全指南
- API 参考
- 贡献指南
## 测试
运行测试套件:
```
pip install -r requirements-dev.txt
pytest
```
运行覆盖率测试:
```
pytest --cov=web_app/backend --cov-report=html
```
## 开发
### 代码质量
```
# 安装开发依赖
pip install -r requirements-dev.txt
# 运行 linter
ruff check .
# 格式化代码
black .
# 类型检查
mypy web_app/backend
```
### Git 钩子
```
pip install pre-commit
pre-commit install
pre-commit run --all-files
```
## 项目结构
```
Forti-DFIR/
├── log_parser.py # CLI tool
├── web_app/
│ ├── backend/
│ │ ├── app.py # Main Flask app
│ │ ├── simple_app.py # Simplified app
│ │ ├── config.py # Configuration
│ │ ├── log_parser_service.py
│ │ ├── csv_parser_service.py
│ │ ├── utils/ # Security utilities
│ │ └── requirements.txt
│ └── frontend/
│ └── src/
│ └── SimpleApp.js
├── docs/ # Sphinx documentation
├── tests/ # Unit tests
├── pyproject.toml # Project configuration
└── .env.example # Environment template
```
## 部署
### Docker 部署
```
cd web_app
docker-compose up -d
```
### 云端部署
详见 [web_app/DEPLOYMENT.md](web_app/DEPLOYMENT.md) 获取详细说明。
## 许可证
本项目由 IONSec 研究团队开发。
## 支持
- **问题反馈**:https://github.com/ionsec/Forti-DFIR/issues
- **文档**:请参考 `docs/` 目录
标签:AMSI绕过, API密钥检测, CLI, Docker, Fortinet, IP地址过滤, Netlify, OSV, Sphinx文档, Vercel, VPN, WiFi技术, 二进制发布, 云部署, 会话分析, 威胁检测, 安全认证, 安全调查, 安全防御评估, 开源工具, 搜索引擎查询, 数据聚合, 日志可视化, 日志解析, 私有地址过滤, 网络安全, 证书伪造, 请求拦截, 输入验证, 逆向工具, 防火墙, 隐私保护