bhavitavya-isukapati/cynews
GitHub: bhavitavya-isukapati/cynews
一个实时网络安全威胁情报与新闻聚合平台,将 50 多个信源的安全资讯、漏洞公告和威胁数据汇聚到统一的 SOC 风格仪表板中,帮助安全团队高效进行态势感知。
Stars: 0 | Forks: 0
# CyNews
**网络安全威胁情报与新闻聚合平台**
一个实时网络安全威胁情报仪表板,可聚合来自 50 多个来源的新闻、公告和威胁数据。采用深色、专业的 SOC 风格界面构建。
## 功能
- **实时仪表板** - 威胁概览,包含威胁等级仪表盘、统计卡片、严重程度分布图和实时活动流
- **50+ 订阅源** - 聚合来自 The Hacker News、BleepingComputer、Dark Reading、Krebs on Security、SANS ISC、CISA KEV 等数十个来源的信息
- **CERT-In 公告** - 专门的印度 CERT 公告页面,支持按严重程度过滤
- **威胁情报** - 威胁行为者档案、TTPs (MITRE ATT&CK)、IOC、恶意软件家族及活动追踪
- **CVE 公告** - CVSS 评分、受影响产品、供应商信息、补丁状态和临时解决方案
- **印度范围检测** - 通过 AI 驱动的分类,识别与印度相关的威胁及全球威胁,并包含州/行业检测
- **网络相关性过滤** - 自动从信息源中过滤掉非网络安全内容
- **导出与邮件** - 将公告导出为 HTML/CSV,并使用可自定义的模板生成邮件报告
- **WebSocket 实时更新** - 当有新威胁到达时提供实时推送通知
- **RSS 订阅源输出** - `/api/news/rss` 端点用于与其他工具集成
- **多工作区支持** - 跨工作区的基于产品的威胁匹配
- **全局搜索** - 同时搜索所有新闻、威胁和公告
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| **前端 (Frontend)** | React 19, Vite 7, TypeScript 5.9 |
| **样式 (Styling)** | Tailwind CSS v4, Radix UI, Framer Motion |
| **状态 (State)** | TanStack React Query, Zustand |
| **后端 (Backend)** | Express 5, Node.js 24 |
| **数据库 (Database)** | PostgreSQL, Drizzle ORM |
| **校验 (Validation)** | Zod v4, drizzle-zod |
| **API 代码生成** | Orval (基于 OpenAPI 规范) |
| **路由 (Routing)** | Wouter |
| **安全 (Security)** | Helmet, express-rate-limit, CORS, 输入清理 |
| **单体仓库 (Monorepo)** | pnpm workspaces |
## 项目结构
```
CyNews/
├── artifacts/
│ ├── api-server/ # Express API server (port 8080)
│ └── cyfy-news/ # React + Vite frontend
├── lib/
│ ├── api-spec/ # OpenAPI spec + Orval codegen
│ ├── api-client-react/ # Generated React Query hooks
│ ├── api-zod/ # Generated Zod schemas
│ ├── db/ # Drizzle ORM schema + connection
│ ├── feed-aggregator/ # RSS/API feed fetcher
│ ├── india-detector/ # India scope classifier
│ └── cyber-relevance-detector/ # Cyber content filter
├── scripts/ # Seed, reclassify, live-feed CLI
├── docker-compose.yml
├── Dockerfile
└── pnpm-workspace.yaml
```
## 快速开始
### 前置条件
- [Node.js 24+](https://nodejs.org/)
- [pnpm 9+](https://pnpm.io/installation)
- [Docker](https://docs.docker.com/get-docker/) (用于 PostgreSQL)
### 一键设置
```
git clone https://github.com/Demos6668/CyNews.git
cd CyNews
cp .env.example .env
pnpm run setup
pnpm dev
```
此操作将安装依赖,在 Docker 中启动 PostgreSQL,推送数据库结构,并启动 API 服务器 (`:8080`) 和前端 (`:5173`)。
### 手动设置(逐步)
```
# 1. Clone 和 install
git clone https://github.com/Demos6668/CyNews.git
cd CyNews
pnpm install
# 2. Configure 环境
cp .env.example .env
# 默认开箱即用 — 仅在需要时 edit
# 3. Start PostgreSQL
pnpm run db:up
# 4. Push database schema
pnpm run db:push:force
# 5. (Optional) 填充 demo 数据
pnpm --filter @workspace/scripts run seed
# 6. Start dev servers (API + frontend)
pnpm dev
```
在浏览器中打开 http://localhost:5173。API 服务器运行在 http://localhost:8080。
### Docker(生产环境)
```
cp .env.example .env
# Edit POSTGRES_PASSWORD 为一个用于 production 的强值
docker compose up -d
```
这将在容器中启动 PostgreSQL,构建并运行 API 服务器,以及提供前端服务。
### 实时订阅源
API 服务器会自动每 15 分钟运行一次订阅源调度器。要触发手动刷新:
```
curl -X POST http://localhost:8080/api/scheduler/refresh
```
或运行独立的订阅源脚本:
```
# 从所有 sources 一次性 fetch
pnpm --filter @workspace/scripts run live-feed
# 每 15 分钟 Continuous 更新
pnpm --filter @workspace/scripts run live-feed:watch
```
### 故障排除
| 问题 | 解决方案 |
|---------|----------|
| `database "cynews" does not exist` | 先运行 `pnpm run db:up` — Docker 会自动创建数据库 |
| 端口 5432 上出现 `connection refused` | 确保 Docker 正在运行:`docker ps` 应显示 `cynews-db-1` 容器 |
| 端口 5432 已被占用 | 本地 PostgreSQL 正在运行 — 停止它或在 `.env` 和 `docker-compose.yml` 中更改端口 |
| Schema 推送失败 | 在全新数据库上使用 `pnpm run db:push:force` 进行干净推送 |
| API 返回 500 错误 | 检查数据库是否包含数据表:运行 `pnpm run db:push:force` |
## API 端点
| 方法 | 路径 | 描述 |
|--------|------|-------------|
| GET | `/api/healthz` | 健康检查 |
| GET | `/api/dashboard/stats` | 仪表板统计 |
| GET | `/api/news` | 带过滤的分页新闻 |
| GET | `/api/news/:id` | 新闻详情 |
| GET | `/api/news/rss` | RSS 订阅源输出 |
| GET | `/api/news/bookmarked` | 已加书签的项目 |
| POST | `/api/news/:id/bookmark` | 切换书签 |
| GET | `/api/advisories` | 分页公告 |
| GET | `/api/advisories/cert-in` | CERT-In 公告 |
| GET | `/api/advisories/:id` | 公告详情 |
| GET | `/api/threats` | 分页威胁情报 |
| GET | `/api/threats/:id` | 威胁详情 |
| GET | `/api/threats/export` | 导出为 CSV/JSON |
| GET | `/api/search?q=` | 全局搜索 |
| GET | `/api/export/templates` | 邮件模板 |
| POST | `/api/export/preview` | 预览邮件导出 |
| POST | `/api/export/email` | 生成邮件导出 |
| WS | `/ws` | 实时更新 |
## 订阅来源
**新闻:** The Hacker News、BleepingComputer、Dark Reading、Krebs on Security、SecurityWeek、The Record、CyberScoop、SC Magazine、Infosecurity Magazine 等
**威胁情报:** Cisco Talos、Unit 42、Mandiant、Microsoft Security、Google TAG、CrowdStrike、SentinelOne、Recorded Future、Proofpoint、Kaspersky SecureList 等
**公告:** CISA KEV、CERT-In、NVD、US-CERT
**威胁信息源:** URLhaus、ThreatFox、Ransomware.live、Feodo Tracker
## 关键命令
```
pnpm dev # Start API + frontend dev servers
pnpm run setup # Full setup (install + DB + schema)
pnpm run db:up # Start PostgreSQL container
pnpm run db:push # Push DB schema (interactive)
pnpm run db:push:force # Push DB schema (no prompts)
pnpm run dev:api # Start API server only
pnpm run dev:frontend # Start frontend only
pnpm run typecheck # Full typecheck
pnpm run build # Build all packages
# 较不常见
pnpm --filter @workspace/api-spec run codegen # Regenerate API types
pnpm --filter @workspace/scripts run seed # Seed demo data
pnpm --filter @workspace/scripts run live-feed # Fetch real data
```
## 许可证
MIT
标签:AI分类, CERT-In, Cloudflare, CVE漏洞库, DAST, Express, GitHub, GNU通用公共许可证, GPT, HTTP/HTTPS抓包, IT安全, MITM代理, MITRE ATT&CK, Node.js, PostgreSQL, React, Syscalls, TypeScript, 入侵指标, 威胁情报, 威胁行为者, 安全仪表盘, 安全报告, 安全插件, 安全研发, 安全运营中心, 实时处理, 密码管理, 开发者工具, 态势感知, 恶意软件分析, 情报收集, 新闻聚合, 测试用例, 漏洞研究, 漏洞管理, 漏洞警报, 网络威胁, 网络安全, 网络情报, 网络映射, 自动化攻击, 请求拦截, 隐私保护