iamrknain/flarestack
GitHub: iamrknain/flarestack
FlareStack 是一个构建于 Cloudflare 和 Vercel 之上的自动化流量滥用缓解系统,通过分析实时流量数据自动执行 WAF 规则来防护爬虫与恶意请求。
Stars: 1 | Forks: 0
# FlareStack
FlareStack 是一个专为 **Cloudflare** 和 **Vercel** 设计的安全自动化平台。它能够监控实时流量,自动执行 WAF 规则(IP 黑名单、Under Attack Mode、Bot Protection),并发送警报通知——所有这些都由一个以 PostgreSQL 为后端的独立 Next.js 应用程序驱动。
## 架构
FlareStack 是一个**单一的 Next.js 应用程序**——没有独立的 worker,没有 edge runtime,也没有 monorepo 包。所有内容都位于 `src/` 目录下。
```
src/
├── app/
│ ├── api/
│ │ ├── cron/
│ │ │ ├── cloudflare/ ← Cron trigger endpoint (JWT or cookie auth)
│ │ │ └── vercel/ ← Cron trigger endpoint
│ │ └── ingest/
│ │ └── vercel/ ← Log Drain webhook (HMAC-SHA1 verified)
│ ├── auth/ ← Sign in / sign up pages
│ └── dashboard/
│ ├── cloudflare/ ← Cloudflare zone & rule management
│ └── vercel/ ← Vercel project & rule management
├── components/ ← All UI components
├── cron/
│ ├── cloudflare/ ← CF rule engines (addIpToList, underAttackMode)
│ └── vercel/ ← Vercel rule engines (underAttackMode, botProtection)
├── db/
│ └── schema/ ← Drizzle/Postgres table definitions
├── lib/ ← Auth, email, logger, debug helpers
└── server/ ← Next.js server actions (cloudflare.ts, vercel.ts)
```
## 工作原理
### Cloudflare
cron 引擎直接查询 **Cloudflare 的 GraphQL Analytics API** 以获取实时流量数据——无需任何接入 pipeline。
```
POST /api/cron/cloudflare
→ runCloudflareCron(userId)
→ queries CF GraphQL for top IPs / zone traffic
→ applies rules (block IPs, toggle Under Attack Mode)
→ writes audit log
```
### Vercel
Vercel 没有公开的分析 API,因此流量数据是通过 **Log Drains** 接入的——Vercel 会将每个请求日志 POST 到我们的 webhook。
```
Vercel Log Drain → POST /api/ingest/vercel
→ verify x-vercel-signature (HMAC-SHA1)
→ aggregate into vercel_traffic_stats (per project, per minute)
POST /api/cron/vercel
→ runVercelCron(userId)
→ queries vercel_traffic_stats for recent totals
→ applies rules (toggle Attack Mode, Bot Protection)
→ writes audit log
```
请参阅 [`docs/vercel-log-drain.md`](docs/vercel-log-drain.md) 获取完整的设置详细信息。
## ⚙️ 本地开发
### 1. 安装依赖
```
npm install
```
### 2. 配置环境变量
```
cp .env.example .env
```
填写 `.env`:
| 变量 | 必需 | 描述 |
|----------|----------|-------------|
| `DATABASE_URL` | ✅ | PostgreSQL 连接字符串(Supabase、Neon、本地等) |
| `AUTH_SECRET` | ✅ | 用于签署会话 JWT 的随机密钥——`openssl rand -hex 32` |
| `RESEND_API_KEY` | ✅ | 用于邮件通知的 [Resend](https://resend.com) API key |
| `RESEND_FROM` | 可选 | 发件人地址(必须来自 Resend 验证的域名) |
| `NEXT_PUBLIC_APP_URL` | 可选 | 您的公开 URL(用于邮件链接)——默认为 `localhost:3000` |
| `VERCEL_LOG_DRAIN_SECRET` | 可选 | 仅在使用 Vercel Log Drain 集成时需要 |
### 3. 运行数据库迁移
```
npm run db:migrate
```
### 4. 启动开发服务器
```
npm run dev
```
**仪表盘**: [http://localhost:3000](http://localhost:3000)
## 🌐 生产部署
FlareStack 作为标准的 Next.js 应用程序部署——支持 Vercel、Railway、Fly.io 或任何 Node.js 宿主环境。
### 1. 在您的主机上设置环境变量
上表中的所有变量,请使用实际的生产环境值。
### 2. 对生产数据库运行迁移
```
DATABASE_URL= npm run db:migrate
```
### 3. 部署
```
# Vercel
vercel deploy --prod
# 或手动构建
npm run build
npm start
```
### 4. 配置 cron 触发器
将外部 cron 服务(Vercel Cron、GitHub Actions、cron-job.org)指向:
```
POST https://your-domain.com/api/cron/cloudflare
POST https://your-domain.com/api/cron/vercel
Authorization: Bearer
```
从**仪表盘 → 个人资料 → Cron Token**生成 bearer token。
建议频率:**每 1–5 分钟**。
### 5. 设置 Vercel Log Drain(仅限 Vercel 集成)
请参阅 [`docs/vercel-log-drain.md`](docs/vercel-log-drain.md) 获取完整的设置指南。
## 🛠️ CLI 命令
| 命令 | 操作 |
|:--------|:-------|
| `npm run dev` | 在 3000 端口启动 Next.js 开发服务器 |
| `npm run build` | 为生产环境构建 |
| `npm start` | 启动生产服务器 |
| `npm run lint` | 在整个代码库中运行 ESLint |
| `npm run db:generate` | 在 `src/db/schema/` 中更改 schema 后生成 Drizzle 迁移文件 |
| `npm run db:migrate` | 将待处理的迁移应用到数据库(使用 `DATABASE_URL`) |
| `npm run db:push` | 直接将 schema 更改推送到数据库(绕过迁移文件) |
| `npm run db:clean` | **擦除所有数据**——删除并重新创建 public schema(会提示确认) |
| `npm run simulate-traffic` | 运行流量模拟脚本(用于本地测试 cron 规则) |
| `npx drizzle-kit studio` | 打开 Drizzle Studio——可视化的 PostgreSQL 浏览器 |
标签:Cloudflare, DDoS防护, MITRE ATT&CK, OSV, Vercel, WAF, Web安全, 流量防护, 测试用例, 程序员工具, 自动化攻击, 自动化运维, 蓝队分析