Ward-Software-Defined-Systems/UniFI-Network-SIEM

GitHub: Ward-Software-Defined-Systems/UniFI-Network-SIEM

面向 UniFi 网络的一体化 SIEM 解决方案,集成 syslog 采集、威胁情报增强和 AI 驱动的威胁调查功能。

Stars: 3 | Forks: 0

# UniFi Network SIEM ![AI Powered](https://img.shields.io/badge/AI-Powered_Threat_Hunting-blueviolet?style=flat-square&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xMiAyYTEwIDEwIDAgMSAwIDAgMjAgMTAgMTAgMCAwIDAgMC0yMHoiLz48cGF0aCBkPSJNMTIgOHY0bDMgMyIvPjwvc3ZnPg==) ![License](https://img.shields.io/badge/License-Apache_2.0-blue?style=flat-square) ![Node.js](https://img.shields.io/badge/Node.js-18+-green?style=flat-square) 一个独立的、**AI 驱动**的 Node.js 应用程序,用于从 UniFi 控制台和网关收集 syslog,解析所有事件类型,将其存储在 SQLite 中,并提供内置 AI 威胁搜寻功能的实时安全仪表板。 ## 功能特性 - **Syslog 收集器** — 用于 UniFi Traffic Logging 和 Activity Logging (CEF) 的 UDP 监听器 - **11 种事件类型解析器** — firewall(防火墙)、threat(威胁)、DHCP、DNS、DNS filter(DNS 过滤/CoreDNS 广告拦截)、Wi-Fi、admin(管理员)、device(设备)、client(客户端)、VPN、system(系统) - **实时数据流** — 基于 WebSocket 的事件表,带有类型/操作徽章、搜索和暂停功能 - **仪表板** — 统计卡片、事件时间轴图表、Top 拦截、Top 威胁、Top 端口、Top 客户端、Top 来源、Top 目标;带有进度条的渐进式加载 - **实时地图** — 基于 Leaflet 的世界地图,显示地理位置增强的流量,带有颜色编码的标记(正常/拦截/威胁)、流向线和统计叠加层 - **刷新控制** — 仪表板、实时地图和威胁情报均包含手动刷新、暂停/恢复和可选的自动刷新率(1分钟、2分钟、5分钟)。默认为暂停状态以减少大数据集的负载 — 对于远程数据库后端(例如通过 VPN 的 WardSONDB)特别有用,因为并发查询可能开销很大 - **GeoIP 与威胁情报增强** — 使用 MaxMind GeoLite2 进行地理位置定位,AbuseIPDB 进行威胁评分,反向 DNS — 全部异步并带有缓存 - **国旗与滥用徽章** — 🇺🇸 外部 IP 上的表情符号国旗与国家代码;所有视图中带有颜色编码的滥用评分徽章 - **威胁情报** — 包含滥用评分、事件计数和位置的增强 IP 可排序/可过滤表格;时间周期过滤的摘要卡片与历史总计并列 - **威胁搜寻** — AI 驱动的威胁行为者调查。输入任意 IP 即可获得完整档案:本地 SIEM 活动(事件、端口、时间轴、IDS 签名、相关 /24 IP)、外部情报(rDNS、WHOIS/ASN),以及结构化的 AI 威胁评估(支持 PDF 导出)。支持 Anthropic (Opus 4.6)、OpenAI (GPT-5.4) 和 Google (Gemini 3.1 Pro),并提供页面内 API 密钥管理。*目前仅使用 Anthropic 进行了测试 — OpenAI 和 Google 集成已实现但未经测试。* - **默认启用 HTTPS** — 自动生成的自签名 TLS 证书 - **可插拔存储后端** — SQLite(内置默认)、WardSONDB (Beta)、OpenSearch (Beta — 即将推出) - **SQLite 存储** — WAL 模式、批量插入、自动保留清理、工作线程增强 - **零外部服务** — 一切都在一个进程中运行 ## 截图 ### 仪表板 ![Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/524f3dce48224414.png) ### 实时地图 ![Live Map](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/01a448f33b224420.png) ### 威胁情报 ![Threat Intel](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d619bc3917224426.png) ### 威胁搜寻 ![Threat Hunt Beta](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e31bae9652224430.png) ### 实时流 ![Live Stream](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cac6520ddb224434.png) ### 设置 ![Settings](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b28c56f0dc224438.png) ## 快速开始 ### 前置条件 - Node.js v18+ - macOS、Linux 或 Windows(任何支持 Node.js 和 `better-sqlite3` 的平台) ### 安装 ``` # Backend npm install # Frontend cd frontend && npm install && cd .. # Configure cp .env.example .env # 如果需要,编辑 .env(默认设置适用于大多数安装) ``` ### 运行 ``` # Production(服务构建的 frontend) cd frontend && npm run build && cd .. npm start # Development(两个终端) npm run dev # Backend with auto-reload (port 3000) cd frontend && npm run dev # Vite HMR (port 5173) ``` 在浏览器中打开 https://localhost:3000。首次访问时请接受自签名证书警告。 ### 使用伪造的 syslog 进行测试 ``` node scripts/test-syslog.js # 默认发送 10 msgs/sec。设置 RATE=100 以增加流量。 ``` ## UniFi 控制台配置 为了获得完整功能,应配置 UniFi 控制台上的三个日志记录源。它们共享同一个 UDP 端口 — 解析器会自动检测格式。 ### 来源 1:Traffic Logging / Syslog(防火墙、IDS、DHCP、Wi-Fi) 1. **Settings > Policy Engine** — 对于每条防火墙规则,Edit > Advanced > **Enable Syslog Logging** 2. **Settings > CyberSecure > Traffic Logging**: - Flow Logging: **All Traffic**(或选择 Blocked Only 以减少数据量) - Activity Logging (Syslog): Enable **SIEM Server** - Server Address: `` - Port: `5514` - Categories: 启用所有所需选项(Firewall Default Policy, Security Detections 等) ### 来源 2:Activity Logging / CEF(管理员、设备、客户端事件) 1. **Settings > Control Plane > Integrations > Activity Logging**: - Enable **SIEM Server** - Server Address: `` - Port: `5514` - Categories: 启用 Clients, Devices, Security Detections, Triggers, VPN, Critical ### 来源 3:Debug Logs(详细的 DHCP、系统进程) 1. **Settings > CyberSecure > Traffic Logging**: - Enable **Debug Logs** - 这将启用详细的 `dnsmasq-dhcp` 租约事件、`ubios-udapi-server` 消息以及来自网关的其他系统进程日志 - 如果没有此项,DHCP 事件和许多系统级消息将不会被转发 ### 来源 4:Netconsole(内核级日志) 1. **Settings > CyberSecure > Traffic Logging**: - Enable **Netconsole** - Server Address: `` - Port: `5514` - 提供内核级消息,包括防火墙规则命中和低层网络事件 ## 事件类型 | 类型 | 来源 | 描述 | |---|---|---| | `firewall` | Traffic Logging | 防火墙允许/拦截决策 | | `threat` | Traffic Logging / CEF | IDS/IPS 警报 和 CEF 威胁检测 | | `dhcp` | Traffic Logging | DHCP 租约事件(dnsmasq + 交换机中继) | | `dns` | Traffic Logging | DNS 查询/回复(如果启用了日志记录) | | `dns_filter` | Traffic Logging | CoreDNS 广告拦截和内容过滤拦截 | | `wifi` | Traffic Logging | Wi-Fi 客户端关联/解除关联 | | `admin` | CEF | 管理员登录、配置更改 | | `device` | CEF | 设备采用、重启、固件 | | `client` | CEF | 客户端连接/断开、漫游 | | `vpn` | CEF / Traffic Logging | VPN 隧道 up/down 事件 | | `system` | Either | 未分类消息的统称 | ## API | 端点 | 描述 | |---|---| | `GET /api/events` | 查询带有过滤器的事件(类型、操作、IP、端口、搜索、分页) | | `GET /api/events/:id` | 单个事件详情 | | `GET /api/stats/overview` | 按类型和操作的汇总计数 | | `GET /api/stats/timeline` | 用于图表的时间分桶事件计数 | | `GET /api/stats/top-talkers` | Top 源或目标 IP | | `GET /api/stats/top-blocked` | Top 被拦截 IP(源或目标方向,exclude_private) | | `GET /api/stats/top-ports` | Top 目标端口 | | `GET /api/stats/top-clients` | 跨事件类型的 Top 客户端(按 MAC) | | `GET /api/stats/top-threats` | Top IDS/IPS 签名 | | `GET /api/stats/threat-intel` | 带有滥用评分和事件计数的增强 IP | | `GET /api/stats/geo-events` | 用于地图的带有地理坐标的聚合 IP | | `GET /api/stats/recent-geo-events` | 用于流向线的带有地理数据的近期事件 | | `GET /api/health` | 系统健康状况、事件计数、DB 大小 | | `GET /api/settings` | 应用设置(敏感值已脱敏) | | `PUT /api/settings` | 更新设置(AbuseIPDB key 等) | | `POST /api/settings/reset-db` | 清除所有事件和增强缓存 | | `GET /api/threat-hunt/settings` | Threat Hunt AI 提供商设置 | | `PUT /api/threat-hunt/settings` | 更新 AI 提供商/密钥 | | `POST /api/threat-hunt/investigate` | 对 IP 运行 AI 驱动的威胁调查 | | `WSS /ws/events` | 带有过滤功能的实时事件流 | ## 配置 | 变量 | 默认值 | 描述 | |---|---|---| | `SYSLOG_PORT` | 5514 | syslog 监听器的 UDP 端口 | | `HTTP_PORT` | 3000 | Web 仪表板端口 | | `DB_PATH` | ./data/events.db | SQLite 数据库路径 | | `RETENTION_DAYS` | 60 | 自动删除早于此天数的事件 | | `LOG_LEVEL` | info | 日志级别 | | `GEOIP_DB_PATH` | ./data/GeoLite2-City.mmdb | MaxMind GeoLite2 数据库路径 | | `ABUSEIPDB_API_KEY` | *(empty)* | AbuseIPDB API key(免费层:1000次/天) | | `ABUSEIPDB_CACHE_HOURS` | 24 | 滥用评分的缓存时长 | | `RDNS_ENABLED` | false | 启用反向 DNS 查询 | | `LOG_RAW_MESSAGES` | false | 在 DB 中存储原始 syslog 文本 | | `INSERT_BATCH_SIZE` | 50 | 批量插入阈值 | | `INSERT_BATCH_INTERVAL_MS` | 500 | 批量插入刷新间隔 | ## 项目结构 ``` src/ index.js # Entry point config.js # Environment config collector/ syslog-server.js # UDP listener parsers/ index.js # Format detection & routing syslog-header.js # Header parser (4 formats) firewall.js # iptables parser ids.js # Suricata IDS parser dhcp.js # dnsmasq-dhcp parser dhcp-relay.js # Switch DHCP relay parser dns.js # dnsmasq DNS parser coredns.js # CoreDNS ad-block/content filter wifi.js # hostapd parser cef.js # CEF (Activity Logging) parser system.js # Catch-all parser db/ database.js # SQLite connection & schema events.js # Event CRUD & batch insert retention.js # Periodic cleanup backends/ interface.js # StorageBackend base class index.js # Backend registry & factory sqlite.js # SQLite backend (default) wardsondb.js # WardSONDB backend (Beta) opensearch.js # OpenSearch backend (Beta — Coming Soon) api/ server.js # Express + static serving websocket.js # WebSocket live stream routes/ # REST API routes utils/ # IP utils, port names, constants enrichment/ geoip.js # MaxMind GeoLite2 lookup abuseipdb.js # AbuseIPDB API client rdns.js # Reverse DNS lookup enrichment-queue.js # Async enrichment coordinator enrichment-worker.js # Worker thread for UPDATE operations db/cache.js # IP enrichment cache frontend/ # React + Vite + Tailwind src/ components/ live/ # Live stream view dashboard/ # Analytics dashboard map/ # Live Map (Leaflet) intel/ # Threat Intel view hunt/ # Threat Hunt (Beta) — AI investigation shared/ # Badges, selectors hooks/ # WebSocket & query hooks lib/ # API client, formatters scripts/ test-syslog.js # Test message generator ``` ## 增强设置(可选) ### GeoIP(启用实时地图) 1. 在 [MaxMind](https://www.maxmind.com/en/geolite2/signup) 注册(免费) 2. 下载 `GeoLite2-City.mmdb` 3. 放置在 `./data/GeoLite2-City.mmdb` ### AbuseIPDB(威胁评分) 1. 在 [abuseipdb.com](https://www.abuseipdb.com) 获取免费的 API key(每日 1000 次查询) 2. 在 `.env` 中设置 `ABUSEIPDB_API_KEY`,或通过 Settings 页面保存(无需重启) 3. 如果达到每日限制,查询将自动退避 1 小时 ## 安全性 该应用默认运行 HTTPS,并使用自动生成的自签名证书。以下是其余的安全注意事项。 | 关注点 | 严重性 | 描述 | |---|---|---| | 无身份验证 | **Medium** | Web UI、API 和数据库重置对任何能够访问 3000 端口的人开放。在受信任的家庭网络中,这是可接受的。如果暴露在局域网之外,请将其置于带有身份验证的反向代理之后(使用 basic auth 或 mTLS 的 nginx/Caddy)。 | | Syslog 欺骗 | **Low** | UDP syslog 监听器接受来自网络上任何来源的消息。局域网上的设备可以发送精心构造的 syslog 以注入虚假事件。UDP 在设计上没有身份验证 — 这是 syslog 固有的特性。 | | 无身份验证的数据库重置 | **Low** | `POST /api/settings/reset-db` 端点不需要凭据。通过仅限网络访问的限制和 UI 中的两次点击确认来缓解。 | | TLS 证书信任 | **Info** | 自签名证书将触发浏览器警告。对于生产环境,请使用来自受信任 CA 或您自己内部 CA 的证书替换 `data/server.key` 和 `data/server.cert`。 | **已知公告:** - **esbuild ≤ 0.24.2 (moderate)** — 允许任何网站向 Vite server 发送请求并读取响应 ([GHSA-67mh-4wv8-2f99](https://github.com/advisories/GHSA-67mh-4wv8-2f99))。这是一个仅用于前端开发的开发依赖项 — 它不影响生产构建或已部署的 SIEM。修复需要将 Vite 升级到 7.x(破坏性更改)。 **已缓解:** - **SQL injection** — 所有查询均使用参数化预处理语句 - **XSS** — React 自动转义所有渲染内容,包括不受信任的 syslog 数据 - **API key 泄露** — AbuseIPDB key 在 API 响应中已脱敏(仅显示最后 4 个字符) - **传输安全** — 默认启用 HTTPS/WSS,并带有自动生成的 TLS 证书 - **解析器崩溃** — 所有解析器均包装在 try/catch 中,并回退到 system 解析器 - **AbuseIPDB 速率限制** — 达到每日限制时自动退避 1 小时 ## 已知问题 | 问题 | 状态 | 描述 | |---|---|---| | AbuseIPDB 评分未填充 | **Fixed** | AbuseIPDB API 字段名为 `abuseConfidenceScore` 但代码引用的是 `abuseConfidencePercentage` — 评分始终为 `null`。已在 commit `11607e4` 中修复。还添加了针对缺少滥用评分的缓存 IP 的重新排队逻辑。 | | 数据库重置导致大数据集 CPU 占用过高 | **Fixed** | 使用 "Initialize Database" 之前会对数百万行运行 `DELETE` + `VACUUM`,导致 CPU 在 10 分钟以上保持 100%。通过切换到 `DROP TABLE` + 重建 schema 修复,无论数据库大小如何都是即时的。已在 commit `11607e4` 中修复。 | | 增强回填导致 CPU 100% 占用 | **Fixed** | 回填 UPDATE 查询通过同步 `better-sqlite3` 调用阻塞了主 Node.js 事件循环,导致 CPU 持续 99% 达 4 小时以上。通过将所有增强 UPDATE 移至专用的 `worker_threads` Worker(拥有自己的 DB 连接)修复。6,600+ 个 IP 的回填现在在约 1.5 分钟内完成,主线程 CPU 占用为 0%。已在 commit `ca0f8ea` 中修复。 | ## Roadmap - [x] 表格中 IP 上的滥用评分徽章 - [x] 外部 IP 上的国旗 - [ ] Threat Hunting 视图 — AI 驱动的调查工作区,用于分析威胁行为者(IP 时间轴、关联事件、地理历史、滥用报告、相关 IP)。与 Gemini、OpenAI 或 Anthropic API 集成,用于自动化威胁分析和自然语言调查查询 - [ ] CSV 导出 - [ ] 深色/浅色模式切换 - [x] 性能优化 — 增强回填移至工作线程以实现非阻塞操作 - [x] 存储后端抽象 — 可从 Settings 中选择的可插拔数据库引擎 - [x] WardSONDB 集成 — 高性能基于 Rust 的 JSON 文档数据库,具有延迟索引创建和写入压力检测 - [ ] OpenSearch 集成 — 企业级搜索和分析引擎,具有内置 SIEM 功能 - [x] 查询性能优化 — 通过 WardSONDB 在 3.45M+ 事件下实现位图扫描加速和复合范围扫描 - [ ] macOS 自动启动的 launchd plist
标签:AbuseIPDB, AI 安全, AMSI绕过, CISA项目, GeoIP, GNU通用公共许可证, HTTP/HTTPS抓包, IP 地址批量处理, MITM代理, Node.js, PE 加载器, SQLite, Syslog 收集器, UBNT, UniFi, WebSocket, 依赖分析, 威胁检测, 安全可视化, 实时仪表盘, 密码管理, 态势感知, 日志解析, 网络安全, 网络流量分析, 自定义脚本, 证书伪造, 防火墙日志, 隐私保护