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安全, 流量防护, 测试用例, 程序员工具, 自动化攻击, 自动化运维, 蓝队分析