Hayder-Rzaigui/cybernom-community
GitHub: Hayder-Rzaigui/cybernom-community
一个将威胁情报采集、关键字告警、M365 安全态势监控与内置认证整合为单一 Go 二进制文件的自托管 SOC 监控平台。
Stars: 3 | Forks: 0
# CyberNom 社区版
**一个免费、开源的威胁情报与安全监控平台 —— 单一二进制文件,除 Postgres 外无需其他外部服务。**
[](LICENSE)
[](go.mod)
[](migrations/0001_init.sql)
[](SECURITY.md)
[](#-cybernom-enterprise)
[](https://github.com/hayderrzaigui/cybernom-community/stargazers)
作者:**Hayder Rzaigui**
**问题所在:** SOC 团队最终不得不将威胁情报订阅阅读器、关键字告警器、M365 安全态势检查器以及覆盖在这一切之上的认证层拼凑在一起 —— 通常是三个独立且半成品的脚本,连登录界面都没有。CyberNom 将这整个技术栈整合在一个 Go 二进制文件中,并且从第一行代码起就实现了真正的身份验证。
**快速开始**(完整详情见下方的[安装说明](#installation)):
```
git clone https://github.com/hayderrzaigui/cybernom-community.git && cd CyberNom
cp .env.example .env # set CYBERNOM_JWT_SIGNING_KEY and CYBERNOM_DB_PASSWORD
cp config/config.yaml.example config/config.yaml
cd deployments && docker compose --env-file ../.env up -d --build
```
CyberNom 将两条产品线融合为一个坚固的单一二进制服务:
- **内部安全态势可见性** —— 通过严格的只读 Microsoft Graph 访问实现的 Microsoft 365 监控
- **外部威胁情报** —— 通过 Tor 访问的 RSS、JSON API、网站和 `.onion` 源,支持正则表达式/关键字告警
它的存在是为了修复这两个初始概念共有的弱点 —— **没有内置身份验证** —— 同时保留它们各自的优点:一方面是只读的最小权限 Graph 访问,另一方面是广泛的多源数据接入。
这是**社区版**:完整且开源的核心代码,免费且无限制,采用 MIT 许可证,并且支持在原生环境下直接使用普通的 `go build` 独立构建。
## 目录
- [高性能核心](#high-performance-core)
- [安装说明](#installation)
- [仪表盘](#dashboard)
- [配置](#configuration)
- [API 概览](#api-overview)
- [威胁模型](#threat-model)
- [社区版与企业版对比](#community-vs-enterprise)
- [CyberNom 企业版](#-cybernom-enterprise)
- [许可证](#license)
## 高性能核心
以下所有功能都集成在单一的 `cybernom` 二进制文件中 —— 除了 Postgres 和可选的 Tor 外,无需运行任何额外的服务。
| 类别 | 功能 |
|---|---|
| **数据接入** | RSS/Atom、通用 JSON API、普通网站抓取、通过 Tor 独家访问的 `.onion` 源 —— 包含 24 个预置订阅源 |
| **告警** | 支持精确匹配或正则表达式的关键字规则、严重级别、基于标签的过滤 |
| **正则表达式安全** | 基于 Go 的 RE2 引擎构建 —— 从结构上免疫灾难性回tracking (ReDoS),并辅以模式长度/输入长度/超时限制作为深度防御 |
| **仪表盘** | 内置于 `/dashboard` 的 Web UI —— 实时告警推送、严重级别分布、一键确认,无需单独部署前端 |
| **通知** | Discord webhook、Slack webhook、Telegram、电子邮件 (SMTP) —— 每个渠道均支持独立的最小严重级别阈值 |
| **M365 安全态势** | 只读 Microsoft Graph 采集器:安全警报、高风险登录 —— 写权限范围会在启动时被拒绝 |
| **身份验证** | 内置 JWT 访问/刷新 token、bcrypt 密码哈希、双角色 RBAC (`admin`/`viewer`)、在认证 endpoint 上实施基于 IP 和用户名的速率限制 |
| **合规性导出** | 导出 CSV 格式的警报和审计日志,JSON 格式的 SLA/MTTR 摘要报告 |
| **运维** | 结构化 JSON 日志记录并自动脱敏 secret、优雅关闭、健康/就绪探针、支持 Docker Compose 一键部署 |
**设计原则:** 每个外部订阅源都被视为对抗性输入;只有 CyberNom 进程及其配置是受信任的。请参阅 [`docs/THREAT_MODEL.md`](docs/THREAT_MODEL.md) 获取完整的分析,包括此版本防御的七种威胁类别(ReDoS、缺失身份验证、静态 secret、通过重定向导致的 SSRF、Graph 最小权限、onion 到 clearnet 的泄露以及注入)。
## 安装说明
### 原生安装(推荐)
需要 Go 1.22+ 和 Postgres 16+ 实例。
```
git clone https://github.com/hayderrzaigui/cybernom-community.git
cd CyberNom
go mod tidy
go mod download
psql "postgres://cybernom:yourpassword@localhost:5432/cybernom" -f migrations/0001_init.sql
psql "postgres://cybernom:yourpassword@localhost:5432/cybernom" -f migrations/0002_dashboard_metrics.sql
psql "postgres://cybernom:yourpassword@localhost:5432/cybernom" -f migrations/0003_feeds.sql
cp config/config.yaml.example config/config.yaml
export CYBERNOM_DB_PASSWORD="yourpassword"
export CYBERNOM_JWT_SIGNING_KEY="$(openssl rand -hex 32)"
go build -o bin/cybernom ./cmd/cybernom
./bin/cybernom -config config/config.yaml -log-pretty
```
无需构建标签 —— 普通 `go build` 即可生成社区版二进制文件。
### Docker
```
git clone https://github.com/hayderrzaigui/cybernom-community.git
cd CyberNom
# 1. 配置 secrets
cp .env.example .env
# 编辑 .env — 设置 CYBERNOM_JWT_SIGNING_KEY (openssl rand -hex 32) 和 CYBERNOM_DB_PASSWORD
mkdir -p secrets
echo -n "your-db-password-here" > secrets/db_password.txt
# 2. 配置 feeds/keywords/notifications
cp config/config.yaml.example config/config.yaml
# 根据需要编辑 config/config.yaml
# 3. 启动 stack (Postgres, Tor, CyberNom, nginx reverse proxy)
cd deployments
docker compose --env-file ../.env up -d --build
# 4. 验证
curl -k https://localhost:8443/healthz
```
### 创建您的第一个管理员用户
```
./bin/cybernom -config config/config.yaml -init-admin
```
## 仪表盘
打开 **`http://
标签:Go, Microsoft Graph, Postgres, Ruby工具, SOC监控, 威胁情报, 安全运营, 开发者工具, 扫描框架, 日志审计, 测试用例, 自托管, 请求拦截