【项目案例】多 Cloudflare 账号管理系统:一个后台管所有域名和解析
「项目案例」系列:我做过的定制项目,写清楚客户要什么、解决了什么问题。这类项目不提供源码,文中截图都是演示数据(虚构的域名和账号),不涉及任何客户信息。有类似需求可以直接联系我,文末有方式。
客户的需求
客户手上有多个 Cloudflare 账号,分给不同的人或团队使用。日常的麻烦集中在这几件事:
- 要改一条 DNS 解析,得先找到对应的账号、登录、再进去找域名,账号一多就很容易登错、改错;
- 想让同事自己改解析,又不想把整个 Cloudflare 账号的登录权限交出去;
- 域名一旦被误删,后果很严重,希望有人动了就能马上知道;
- 管理入口放在公网,必须足够安全,不能被人扫到就试密码。
我做的东西
一个自己服务器上运行的 Web 后台,把多个 Cloudflare 账号集中管理。登录页很简单,也明确提示了输错密码会被封 IP:

图:登录页(演示环境)。
管理员和普通账号分开
- 管理员:建账号、给每个账号填上对应的 Cloudflare API Token,并且能在页面上切换“当前管理的账户”,查看和操作任意一个账号下的域名;
- 普通账号:登录后只能看到并管理自己那个 Cloudflare 账号的域名,后端会直接拒绝访问别的账号的请求,不是只在页面上藏起来。

图:账户管理页。Token 只显示末 4 位,不会回显完整内容。
域名和 DNS 在一个页面里管

图:域名列表。
- 域名列表(自动处理分页)、添加域名、删除域名;新添加的域名会直接显示要去注册商处改成的名称服务器;
- DNS 记录的增删改查,支持常见的 A、AAAA、CNAME、MX、TXT、SRV、CAA 等类型,可以开关“已代理”,也能按类型、名称、内容搜索;
- 填 TXT 记录时会自动补上引号,少一个常见的低级错误。

图:DNS 记录页(域名是虚构的 example 域名)。
关键操作会发 Telegram 提醒
在“通知设置”里填一个 Telegram 机器人,下面这些事情发生时会立刻收到消息:
- 有人登录失败(带账户名、IP、剩余尝试次数);
- 某个 IP 因为连续输错密码被封禁;
- 有账号修改了密码;
- 有域名被删除(写明域名、哪个账号、谁操作的、从哪个 IP)。

图:通知设置页。
安全方面做了什么
因为这个后台能直接改别人的 DNS,我在安全上多花了功夫:
- 防暴力破解:密码连续输错达到设定次数(默认 2 次)就封 IP,默认永久封禁,需要管理员手动解封;封禁时长和次数都能改。管理员页面里能看到被封的 IP,命令行也能解封。
- 密码不存明文:登录密码用 scrypt 加盐哈希保存。
- 会话和请求校验:登录有效期有限(默认 8 小时),默认绑定登录 IP;所有会改动数据的请求都要带 CSRF 令牌并校验来源;接口文档页是关掉的,不暴露接口清单。
- 只放行需要的字段:提交 DNS 记录时,后端会校验类型、名称、内容长度、TTL,只把已知字段转给 Cloudflare,不会把前端传来的任意内容原样转发。
- 部署在反向代理后面:配了 nginx 的限速(登录接口和普通接口分开限),并且能把 Cloudflare 的 IP 段还原成访客真实 IP,封禁才不会误伤;脚本能定期更新 Cloudflare 的 IP 段。
- 配置检查:启动前先检查配置(比如管理员密码太弱、格式不对),有问题直接拒绝启动,而不是带病上线。
解决了什么问题
| 以前 | 现在 |
|---|---|
| 多个账号来回登录、切换,容易改错 | 一个入口,管理员切换账号即可 |
| 想让同事改解析,只能给账号密码 | 给他一个只能管自己域名的账号 |
| 域名被删了过一阵才发现 | 删除当下就收到 Telegram 消息 |
| 管理页暴露公网,担心被撞库 | 输错封 IP + 限速 + 来源校验 |
技术栈和交付
后端是 Python(FastAPI),前端是原生页面,没有数据库,账号数据保存在服务器的数据目录里。交付时包括:程序、nginx 配置、Cloudflare IP 段更新脚本,以及一个带菜单的管理脚本(启动、停止、重启、检查配置、查看日志、查看和解封 IP)。我会帮你部署到你自己的服务器上,数据完全在你手里。
想要类似的系统?
这个项目不提供源码,但同类的管理后台我可以按你的需求来做:多账号权限、操作提醒、对接你自己的 API 都行。
- 官网留言:kuaibuild.com(说一句想做什么就够)
- Telegram:
@kuaibuild
想要类似的东西?网站、Telegram 机器人、运维工具,说说你的需求。
发布需求有想法或问题?去留言板留言 →