Krishcalin/SIEM-Lite

GitHub: Krishcalin/SIEM-Lite

一款自托管的轻量级 SIEM 系统,专为解析、规范化、长期存储和检索 Palo Alto NGFW 与 CrowdStrike Falcon EDR 日志而设计。

Stars: 0 | Forks: 0

LogVault

# LogVault 一个自托管的**日志解析、索引和长期存储**系统,专为 **Palo Alto NGFW** 和 **CrowdStrike Falcon EDR** 日志设计。你需要手动从各个控制台导出日志,并 通过 Web UI 上传;LogVault 会解析并规范化这些日志,为它们建立索引以支持 全文 + 结构化搜索,并将其保留在 PostgreSQL 中**至少 3 年**。 ``` export logs upload (web) parse + normalize store (Postgres) ───────────► file ──────────────► auto-detect ─► common ─► month-partitioned PAN / Falcon format schema events + FTS index │ search ◄── filters + full-text ◄──┘ ``` ## 功能 - **四种解析器**,在上传时自动检测: - Palo Alto NGFW **CSV 导出** (Monitor ▸ Logs ▸ Export) - Palo Alto NGFW **syslog** (位置 payload;Traffic / Threat / System / Config) - CrowdStrike Falcon **CSV 导出** (detections / incidents) - CrowdStrike Falcon **JSON** (数组、单一对象、`{"resources":[…]}` 或 NDJSON / FDR) - **规范化**至统一的通用 schema(时间、供应商、类型、源/目的 IP+端口、用户、 主机、动作、严重程度、规则、字节、消息)—— **完整的原始记录会被保留** 在 `jsonb` 列中,因此不会丢失任何数据,且任何字段都保持可搜索。 - **PostgreSQL 存储**,按月进行 RANGE(范围)**分区**,带有 GIN 全文索引、`jsonb` GIN 索引以及通用字段上的 btree 索引。 - **Web UI**:仪表盘(数据量、分区、存储)、拖拽上传、搜索 (时间范围 + 供应商/类型/IP/用户/主机/严重程度/动作 + 全文)、事件详情 (美化的原始记录)、CSV 导出以及一个管理/保留策略页面。 - **3 年保留**策略:按月的分区使得清理成为一个低开销的分区 DROP 操作。该应用**绝不会清除低于 `RETENTION_YEARS` 的数据**;除非 设置 `AUTO_PURGE=true`,否则清理操作需手动执行。 - **幂等摄入**:每条记录都有一个去重哈希值,因此重新上传相同的 文件(或重叠的导出数据)不会产生重复记录。 ## 快速开始 (Docker) ``` cp .env.example .env # optional: adjust retention / limits docker compose up --build # starts Postgres + the app # 打开 http://localhost:8000 ``` 然后**上传**一个文件(可以试试 `samples/` 中的文件),接着进行**搜索**。 ## 快速开始(本地,不使用 Docker) ``` python -m venv .venv && . .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt # 指向你控制的 Postgres: export DB_DSN="postgresql://logvault:logvault@localhost:5432/logvault" # PowerShell: $env:DB_DSN=... uvicorn app.main:app --reload ``` schema(表、分区、索引)会在启动时自动创建。 ## 如何导出待上传的日志 | 来源 | 导出方式 | 上传类型 | |---|---|---| | Palo Alto NGFW | Monitor ▸ Logs ▸ (Traffic/Threat/URL/System/Config) ▸ **Export to CSV** | Palo Alto CSV (自动) | | Palo Alto NGFW | 来自你的收集器/转发器的 Syslog 文件 | Palo Alto syslog (自动) | | CrowdStrike Falcon | Endpoint security ▸ Detections / Incidents ▸ **Export** (CSV) | CrowdStrike CSV (自动) | | CrowdStrike Falcon | Event Search / API / FDR 导出 (JSON 或 NDJSON) | CrowdStrike JSON (自动) | 自动检测会检查文件头/内容;如果文件格式不明确,请在上传表单中 显式指定格式。 ## 配置 (`.env`) | 变量 | 默认值 | 含义 | |---|---|---| | `DB_DSN` | `postgresql://logvault:logvault@localhost:5432/logvault` | PostgreSQL 连接 | | `RETENTION_YEARS` | `3` | 保留底线;清理操作不能低于此值 | | `PAGE_SIZE` | `100` | 每页搜索结果数 | | `MAX_UPLOAD_MB` | `512` | 拒绝更大的上传 | | `AUTO_PURGE` | `false` | 如果为 true,则在启动时丢弃超过 `RETENTION_YEARS` 的分区 | ## 项目布局 ``` Log-Parser-Storage/ ├── docker-compose.yml # Postgres + app ├── Dockerfile ├── schema.sql # partitioned events table, FTS, indexes, batches ├── requirements.txt ├── app/ │ ├── main.py # FastAPI routes + UI │ ├── config.py │ ├── db.py # pool, partitions, insert, search, stats, purge │ ├── ingest.py # detect → parse → normalize → bulk insert │ ├── detect.py # format auto-detection │ ├── normalize.py # dedup hash + full-text blob │ ├── models.py # NormalizedEvent │ ├── util.py # tolerant time/IP/int coercion │ ├── parsers/ # paloalto_csv, paloalto_syslog, crowdstrike_csv, crowdstrike_json │ ├── templates/ # dashboard, upload, search, event, admin │ └── static/style.css ├── samples/ # one example file per format └── tests/test_parsers.py # parser + detection unit tests (no DB needed) ``` ## 测试 ``` pip install pytest python-dateutil PYTHONPATH=. python -m pytest tests/ -q # PowerShell: $env:PYTHONPATH="." ``` 测试会解析内置的样本,并断言规范化字段和 格式自动检测的正确性——它们不需要连接数据库。 ## 数据模型与保留说明 - `events` 表按 `BY RANGE (event_time)` 分区;分区按月创建 (`events_YYYYMM`) 并在摄入时按需生成。`events_default` 分区 会捕获超出范围的时间戳。时间范围搜索会修剪到相关的月份。 - 保留策略 = 丢弃早于截止日期的整个按月分区(瞬间 完成,无需逐行删除)。**Admin** 页面提供受保护的清理功能;底线是 `RETENTION_YEARS`。对于 3 年的保留期,你通常不需要清理——只有当你想 *停止*保留超过底线的数据时,才设置 `AUTO_PURGE=true`。 - 规模:已针对手动上传的数据量(数千万行)进行调优。如果需要极高的 摄入量,请分批处理较大的文件,添加只读副本,或将热点搜索转移到 OpenSearch。 ## 解析器准确性说明 - Palo Alto **CSV** 通过列标题进行映射(可兼容不同 PAN-OS 版本)。 - Palo Alto **syslog** 使用文档化的 Traffic/Threat/ System/Config 位置字段映射(PAN-OS 10/11 通用布局)。**完整的位置字段列表 会被保留**在 `raw.fields` 中,因此即使你的 PAN-OS 版本上的字段索引发生偏移,数据也会被保留并支持搜索,并且 `app/parsers/paloalto_syslog.py` 中的映射很容易调整。 - CrowdStrike CSV/JSON 会从多个候选名称中解析每个字段,以应对 detection、incident 或 FDR 等不同的数据结构。 ## 安全性 本系统适用于内部/分析人员使用的主机。系统本身没有内置身份验证——请将其部署 在你的 SSO/反向代理之后或受信任的网络中,并确保对 Postgres 数据卷 进行备份(它是你的 3 年存档数据)。
标签:EDR日志, NGFW日志, PostgreSQL, 安全信息与事件管理, 安全运营, 扫描框架, 搜索引擎爬取, 测试用例, 请求拦截, 逆向工具