HeheYash/siem-dashboard

GitHub: HeheYash/siem-dashboard

自托管 SIEM 仪表盘,集成 syslog 日志接入、声明式事件关联检测与实时告警可视化。

Stars: 1 | Forks: 0

# 🛡️ Sentryline **一个自托管的 SIEM 仪表盘 —— 集日志接入、事件关联和实时告警于一体。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/HeheYash/siem-dashboard/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue)](requirements.txt) [![FastAPI](https://img.shields.io/badge/backend-FastAPI-009688)](https://fastapi.tiangolo.com/) [![React](https://img.shields.io/badge/frontend-React%20%2B%20Vite-61DAFB)](frontend/package.json) [![Code style: flake8](https://img.shields.io/badge/lint-flake8-black)](.flake8) [功能](#features) · [截图](#screenshots) · [架构](#architecture) · [快速开始](#quickstart) · [检测规则](#how-detection-works) · [测试](#testing)
Sentryline 从多个来源接入日志,将其标准化为统一的事件 schema,通过声明式规则集进行关联,以捕捉真实的攻击模式(暴力破解、端口扫描、SQL 注入尝试、恶意软件检测),发出告警,并在实时仪表盘中直观呈现所有这些信息。 本项目作为作品集项目开发,旨在展示日志接入 pipeline、检测工程、带身份验证的 REST API 设计以及实时安全运营 UI —— 它并非生产级 SIEM(请参阅[范围](#scope--limitations))。 ## 截图 **概览** —— 一目了然地查看事件量、严重程度分布和最近的告警 ![概览仪表盘](https://raw.githubusercontent.com/HeheYash/siem-dashboard/main/screenshots/overview.png) **告警** —— 被关联引擎捕获的暴力破解攻击,按严重程度和风险评分排序 ![告警流](https://raw.githubusercontent.com/HeheYash/siem-dashboard/main/screenshots/alerts.png) **事件日志** —— 每一个标准化事件组成的可搜索、可过滤的流 ![事件日志](https://raw.githubusercontent.com/HeheYash/siem-dashboard/main/screenshots/events.png) ## 功能 | | | |---|---| | 🌐 **多源接入** | 实时 syslog 接收器(UDP + TCP)以及用于现有日志(`auth.log`、防火墙日志、IDS 转储)的文件上传 endpoint | | 🧩 **标准化** | 无论源格式如何,每一行日志都映射到一个 `Event` schema —— 时间戳、源/目标 IP、用户、事件类型、严重程度、消息 | | 🔎 **声明式关联引擎** | 检测逻辑位于 [`rules/correlation_rules.yaml`](rules/correlation_rules.yaml) 中 —— 添加或调整规则无需修改代码 | | 🔗 **序列感知检测** | 捕捉诸如“来自同一 IP 的 5 次失败登录*紧接着*一次成功”之类的模式 —— 这比仅凭失败尝试是强得多的暴力破解信号 | | 🔔 **疲劳感知告警** | 可配置的 webhook 通知(兼容 Slack),带有严重程度阈值,因此低优先级的告警不会在凌晨 3 点叫醒任何人 | | 🔐 **JWT 身份验证** | Bcrypt 密码哈希,基于角色的访问控制(admin 与 analyst) | | 📊 **实时仪表盘** | 事件量时间轴、严重程度分布、带有一键确认功能的工单式告警流、可搜索的事件日志 | | ✅ **经过测试 + CI 流水线** | 涵盖身份验证、日志接入和关联逻辑的 Pytest 套件;GitHub Actions 会在每次推送时跨 Python 3.11–3.13 运行它 | ## 架构 ``` syslog UDP/TCP ──┐ ├──▶ normalize_event() ──▶ Event (SQLite/Postgres) ──▶ correlation engine ──▶ Alert ──▶ webhook file upload ──────┘ │ (rules.yaml) ▼ FastAPI REST API ──▶ React dashboard ``` 完整的设计说明,包括为什么这样构建,以及一次单一的暴力破解攻击是如何在系统中端到端流转的:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。 ## 项目结构 ``` siem-dashboard/ ├── backend/ │ ├── main.py FastAPI app, REST endpoints, background correlation loop │ ├── models.py SQLAlchemy models: Event, Alert, User │ ├── schemas.py Pydantic request/response models │ ├── database.py DB engine/session setup (SQLite by default) │ ├── auth.py JWT auth, password hashing │ ├── ingestion.py Syslog UDP/TCP receiver, log file parser, normalization │ ├── correlation.py Rule engine that evaluates rules against stored events │ ├── alerting.py Webhook notification dispatch │ └── sample_data/ Generates realistic demo data + a planted attack scenario ├── frontend/ React (Vite) dashboard ├── tests/ Pytest suite (auth, ingestion, correlation) ├── rules/correlation_rules.yaml Declarative detection rules ├── docs/ARCHITECTURE.md System design writeup └── .github/workflows/ci.yml Lint + test + build, on every push ``` ## 快速开始 ### 后端 ``` git clone https://github.com/HeheYash/siem-dashboard.git cd siem-dashboard python3 -m venv .venv source .venv/bin/activate # .venv\Scripts\activate on Windows pip install -r requirements.txt # 用真实的示例事件 + 植入的 brute-force 攻击填充数据库 python3 -m backend.sample_data.generate_sample_logs # 启动 API(同时启动 syslog receiver 和 background correlation loop) uvicorn backend.main:app --reload --port 8000 ``` 首次运行时会创建 `siem.db` (SQLite) 和一个默认的 admin 用户: ``` username: admin password: change-me-now ``` 在你自己的机器以外的任何地方运行此命令之前,请设置 `SIEM_ADMIN_PASSWORD`。交互式 API 文档:`http://localhost:8000/docs`。 ### 前端 ``` cd frontend npm install npm run dev ``` 打开 `http://localhost:3000` 并使用上述 admin 凭据登录。仪表盘每 15 秒轮询一次 API;使用 **Run correlation** 按钮可按需触发检测流程,无需等待后台循环(默认每 30 秒一次)。 ### 接入真实日志 **Syslog** —— 将任何设备或 `rsyslog`/`syslog-ng` 配置指向此主机的 UDP 或 TCP 端口 `5140`(非特权端口;通过防火墙规则重映射到标准的 514 端口,或者以 root 身份运行并设置 `SIEM_SYSLOG_UDP_PORT`/`SIEM_SYSLOG_TCP_PORT`): ``` # 快速手动测试 logger -n localhost -P 5140 -T "Failed password for root from 203.0.113.5 port 4444 ssh2" ``` **文件上传** —— 带有日志文件和 `source_name` 查询参数的 `POST /ingest/file` 请求,或者使用仪表盘顶部栏中的 **Ingest log file** 按钮。 ## 配置 | 环境变量 | 默认值 | 用途 | |---|---|---| | `SIEM_DATABASE_URL` | `sqlite:///./siem.db` | SQLAlchemy DSN —— 在生产环境中替换为 Postgres | | `SIEM_SECRET_KEY` | dev key | JWT 签名密钥 —— 部署前**务必设置此项** | | `SIEM_ADMIN_PASSWORD` | `change-me-now` | 自动创建的 admin 用户的密码 | | `SIEM_CORRELATION_INTERVAL` | `30` | 后台关联处理之间的间隔秒数 | | `SIEM_SYSLOG_UDP_PORT` / `SIEM_SYSLOG_TCP_PORT` | `5140` | syslog 接收器端口 | | `SIEM_ALERT_WEBHOOK_URL` | unset | 用于通知的兼容 Slack 的入站 webhook | | `SIEM_NOTIFY_MIN_SEVERITY` | `high` | 触发 webhook 的最低严重程度(`low`/`medium`/`high`/`critical`) | | `SIEM_CORS_ORIGINS` | `http://localhost:3000` | 允许的前端来源,以逗号分隔 | ## 检测工作原理 规则位于 [`rules/correlation_rules.yaml`](rules/correlation_rules.yaml) 中,并按计时器定期评估。示例 —— 暴力破解成功规则: ``` - name: "Brute Force Followed By Success" description: "5+ failed logins from a source IP, followed by a successful login." group_by: source_ip match: event_type: auth_failure threshold: 5 window_seconds: 300 followed_by: event_type: auth_success window_seconds: 60 severity: critical risk_score: 90 ``` 此操作按 `source_ip` 对事件进行分组,等待在 5 分钟时间窗口内出现 5 次或更多 `auth_failure` 事件,然后检查*同一 IP* 是否在 60 秒内发生了 `auth_success`。如果发生,系统将发出严重告警,并引用每一个相关事件以便进行取证调查。 ## 测试 ``` pip install -r requirements-dev.txt pytest tests/ --cov=backend --cov-report=term-missing flake8 backend/ ``` 该套件涵盖了登录/身份验证失败路径、事件接入和标准化,以及最关键的部分 —— 验证关联引擎既能捕捉到真实的暴力破解序列,*又*不会对分散、不相关的失败尝试产生误报。该测试通过 [GitHub Actions](.github/workflows/ci.yml) 在每次推送时自动运行,覆盖 Python 3.11、3.12 和 3.13 版本,并进行前端生产构建检查。 ## 范围与限制 这是一个作品集/演示项目,而不是生产级 SIEM。真实的部署还需要:用于大容量接入的横向扩展能力(本项目使用单一的 SQLite/Postgres 实例)、用于大规模事件表的时间序列存储、身份验证上的速率限制和 refresh token,以及针对特定供应商日志格式的更广泛的解析器库(本项目使用正则表达式/关键词启发式方法,这对于 `sshd` 和 `iptables` 等常见格式很有效,但无法完美解析所有专有格式)。 ## 贡献 欢迎提交 Bug 报告和 PR —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 许可证 [MIT](LICENSE)
标签:AV绕过, CISA项目, FastAPI, React, Syscalls, 安全告警, 安全运营, 扫描框架, 插件系统, 时间线生成, 逆向工具