Viraj-005/sentinel-siem
GitHub: Viraj-005/sentinel-siem
一个容器化的实时 SIEM 平台,通过模拟日志的接收、GeoIP 富化、规则检测和可视化告警,提供完整的安全运营中心演示能力。
Stars: 0 | Forks: 0
# 🛡️ Sentinel-SIEM:本地威胁检测与运营中心仪表板
一个容器化的实时安全信息与事件管理 (SIEM) 平台,旨在接收模拟的网络日志,通过 GeoIP 地理定位和模拟威胁情报对其进行丰富,执行基于规则的威胁检测,并将实时警报流式传输到高保真、深色主题的“运营中心”仪表板。
该项目完全使用 **Docker Compose** 在本地运行,使其成为安全运营中心 (SOC) 模拟、日志接收管道和交互式数据可视化的理想展示方案。
## 🗺️ 系统架构
```
┌─────────────────────────┐
│ Log Simulator (Py) │
│ (Generates SSH/Nginx) │
└────────────┬────────────┘
│ writes to
▼
sample_logs/auth.log
sample_logs/nginx.log
│
▼ (File System Event Watcher)
┌─────────────────────────┐
│ FastAPI Backend │
│ (Log Tailer Thread) │
└────────────┬────────────┘
│
┌───────────────────────┴───────────────────────┐
▼ (Enrichment Engine) ▼ (Detection Engine)
┌───────────────────────┐ ┌───────────────────────┐
│ - Local MaxMind GeoIP │ │ - Brute Force Rule │
│ - Mock Threat Intel │ │ - Port Scan Rule │
└──────────┬────────────┘ │ - Geo-Anomaly Rule │
│ └──────────┬────────────┘
▼ ▼
┌───────────────────────┐ ┌───────────────────────┐
│ TimescaleDB │ │ WebSocket Gateway │
│ (Event Storage) │ │ (Real-Time Pushes) │
└───────────────────────┘ └──────────┬────────────┘
│
▼ (Live Stream)
┌───────────────────────┐
│ React Dashboard │
│ (Leaflet Map & Charts)│
└───────────────────────┘
```
## ✨ 核心功能
- **⚡ 实时日志接收**:在 FastAPI 中使用 Python 文件系统监视器 (`watchdog`) 实时跟踪正在写入的日志文件,模拟生产环境的日志收集器(如 FluentBit 或 Logstash)。
- **🌍 GeoIP 与威胁情报丰富**:自动解析源 IP 并将其转换为地理坐标(使用本地 MaxMind GeoLite2 数据库),同时针对威胁情报源进行检查。
- **🚨 基于规则的检测引擎**:根据关联规则评估事件以触发警报:
- **SSH 暴力破解**:检测特定时间窗口内的多次失败登录尝试。
- **端口扫描**:检测跨多个不同端口的连接尝试。
- **地理异常**:标记来自未经授权或意外国家/地区的连接。
- **📊 交互式运营仪表板**:一个极具视觉冲击力、深色主题的 React UI,包含:
- **威胁地图**:实时的 Leaflet.js 世界地图,显示从威胁发源地投射到本地 SOC 的连线。
- **实时日志流**:采用流式终端风格的已接收安全事件视口。
- **警报控制台**:按类别划分的高严重性警报,带有视觉提示和详情侧边栏。
- **分析图表**:实时更新的指标,包括高频违规 IP、国家/地区分布和时间序列数据量。
- **🐳 多容器编排**:完全使用 `docker-compose` 进行 Docker化,实现简单、可复现的设置。
## 🛠️ 技术栈
| 组件 | 使用的技术 |
| :--- | :--- |
| **前端** | React 18, TypeScript, Vite, Leaflet.js, Recharts, Lucide Icons, 受 Tailwind 启发的原生 CSS |
| **后端** | Python 3.11, FastAPI, SQLAlchemy (异步), Uvicorn, Watchdog, GeoIP2 |
| **数据库** | PostgreSQL 16(用于时序优化的 TimescaleDB 镜像) |
| **日志模拟** | Python, 随机事件生成器 |
| **容器化** | Docker, Docker Compose |
## 🚀 设置与安装
### 📋 前置条件
1. **Docker Desktop**:安装 [Windows 版 Docker Desktop](https://docs.docker.com/desktop/install/windows-install/) 并确保启用了 WSL2 后端。
2. **MaxMind GeoLite2 City 数据库**:
- 在 [MaxMind](https://www.maxmind.com/en/geolite2/signup) 注册一个免费帐户。
- 从您的帐户门户生成免费的许可证密钥。
- 下载 **GeoLite2-City** 二进制数据库文件 (`GeoLite2-City.mmdb`)。
- 在项目根目录下创建一个名为 `geoip_data/` 的文件夹,并将文件放入其中:
mini-SIEM/geoip_data/GeoLite2-City.mmdb
### ⚙️ 环境配置
在项目根目录下创建一个名为 `.env` 的文件(如果尚不存在),并添加您的环境配置:
```
MAXMIND_LICENSE_KEY=your_maxmind_license_key_here
POSTGRES_DB=siem_db
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres_secure_pass
DATABASE_URL=postgresql+asyncpg://postgres:postgres_secure_pass@db:5432/siem_db
```
### 🐳 启动应用程序
一旦数据库文件被放入 `geoip_data/` 并且您的 `.env` 文件已配置完毕,请在项目根目录下运行以下命令:
```
docker-compose up --build
```
Docker Compose 将拉取所需的镜像,构建自定义服务,并启动网络:
- **`db`**:使用我们的数据库模式初始化的 TimescaleDB 实例。
- **`backend`**:监听 `8000` 端口的 FastAPI 服务。自动开始跟踪日志。
- **`log_simulator`**:每 1-5 秒将伪造的 SSH/Nginx 日志行追加到 `sample_logs/` 的 Python 脚本。
- **`frontend`**:监听 `5173` 端口的 React 生产开发服务器。
## 🔍 验证服务
容器运行后,您可以访问以下界面:
| 服务 | 地址 | 用途 |
| :--- | :--- | :--- |
| **运营仪表板** | [http://localhost:5173](http://localhost:5173) | 用于实时威胁监控的主可视化控制台。 |
| **API Swagger UI** | [http://localhost:8000/docs](http://localhost:8000/docs) | 所有 REST endpoint 的交互式 OpenAPI 文档。 |
| **API 健康检查** | [http://localhost:8000/api/health](http://localhost:8000/api/health) | 返回用于验证数据库和服务连接状态的 JSON。 |
| **PostgreSQL 数据库** | `localhost:5432` | 标准的 PostgreSQL 连接节点(使用 DBeaver/pgAdmin 等客户端)。 |
## 🛡️ 检测规则参考
后端规则引擎将日志与三个核心关联配置文件进行匹配:
| 规则名称 | 触发条件 | 严重性 | 标记动作 |
| :--- | :--- | :--- | :--- |
| **SSH 暴力破解** | 同一源 IP 地址在 **2 分钟**的滑动窗口内出现 5 次或更多次失败登录尝试(`Failed password for...`)。 | **高 / 严重** | IP 被标记为可疑并派发警报。 |
| **端口扫描** | 单个源 IP 在 **1 分钟**的滑动窗口内连接到 **3 个或更多不同的目标端口**。 | **高** | 针对侦察探测发出警报。 |
| **地理异常** | 日志条目显示源 IP 映射到的国家/地区*位于*配置的本地区域之外(默认允许的国家/地区代码在后端配置中设置,例如 `LK` 或 `US`)。 | **中** | 捕获未经授权的跨境连接。 |
## 📈 API 参考摘要
### REST Endpoint
- `GET /api/events` - 获取分页的安全事件列表(支持按 `severity` 和 `flagged_only` 过滤)。
- `GET /api/alerts/active` - 获取已触发的活动检测规则列表。
- `GET /api/stats/top-ips` - 获取高频违规 IP 及其连接和警报计数。
- `GET /api/stats/top-countries` - 获取国家/地区分布统计数据。
- `GET /api/stats/events-over-time` - 获取时间序列事件聚合数据。
- `GET /api/health` - 检查数据库连接状态。
### WebSocket 网关
- `WS /ws/live-events` - 将实时事件更新和新生成的警报立即流式传输到已连接的前端客户端。
## 📂 项目结构
```
sentinel-siem/
├── docker-compose.yml # Container composition & volume definitions
├── .env # Local database & MaxMind credentials
├── README.md # This project guide
├── sample_logs/ # Shared directory containing raw log files
├── geoip_data/
│ └── GeoLite2-City.mmdb # MaxMind database (manually downloaded)
├── backend/
│ ├── Dockerfile # Backend container recipe
│ ├── requirements.txt # Python dependency manifest
│ └── app/
│ ├── main.py # FastAPI routing, Lifespan handles, and WebSockets
│ ├── models.py # SQLAlchemy database model structures
│ ├── database.py # Async database engine config
│ ├── schemas.py # Pydantic data schemas
│ ├── ingestion.py # Tailer & Parser logic matching regex groups
│ ├── enrichment.py # GeoIP resolution & Mock threat list lookup
│ ├── detection.py # Rules correlation engine (sliding logs state)
│ └── websocket_manager.py# Active client connections broadcaster
├── log_simulator/
│ ├── Dockerfile # Simulator container recipe
│ └── generate_events.py # Script generating fake auth & access events
└── frontend/
├── Dockerfile # Frontend container recipe
├── package.json # React & Vite packages
├── index.html # Core application entry
└── src/
├── App.tsx # Dashboard Layout, WebSocket state setup
├── types.ts # Type definitions for Events and Stats
├── index.css # Global colors and terminal custom styles
└── components/
├── WorldMap.tsx # Leaflet world map with marker arcs
├── LiveEventFeed.tsx# Live running terminal feed
├── AlertPanel.tsx # Active warnings/alerts console
└── StatsCharts.tsx # Interactive charts using Recharts
```
## 🔮 未来路线图(阶段 2 及以后)
- [ ] **真实日志接收**:通过真实主机上的 Winlogbeat、Syslog 或 Sysmon 代理配置接收。
- [ ] **AbuseIPDB 集成**:通过 AbuseIPDB API 的实时查询替换模拟的威胁情报文件。
- [ ] **Webhook 警报**:向 Slack、Discord 或 Microsoft Teams 频道发送即时的严重通知。
- [ ] **仪表板身份验证**:使用 OAuth2 或基于 JWT 的基本身份验证添加安全登录层。
- [ ] **数据库迁移**:设置 Alembic 以稳健地管理数据库 schema 更新。
- [ ] **Mitre ATT&CK 集成**:将检测到的事件直接映射到 ATT&CK 战术和技术。
## ⚖️ 许可证
该项目基于 MIT 许可证授权 - 随意将其用于个人、学术或作品集展示。
标签:AMSI绕过, AV绕过, Docker, FastAPI, SIEM平台, 威胁检测, 安全运营中心, 安全防御评估, 版权保护, 红队行动, 网络映射, 请求拦截, 逆向工具