Krishcalin/SIEM-Lite
GitHub: Krishcalin/SIEM-Lite
一款自托管的轻量级 SIEM 系统,专为解析、规范化、长期存储和检索 Palo Alto NGFW 与 CrowdStrike Falcon EDR 日志而设计。
Stars: 0 | Forks: 0
# 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, 安全信息与事件管理, 安全运营, 扫描框架, 搜索引擎爬取, 测试用例, 请求拦截, 逆向工具