用 Bash 脚本自动开关 Cloudflare DDoS 防护:基于 Introduction to Bash Scripting 的实战演练
2026/9/17 20:27:48 网站建设 项目流程

用 Bash 脚本自动开关 Cloudflare DDoS 防护:基于 Introduction to Bash Scripting 的实战演练

【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting

本篇技术指南以开源电子书Introduction to Bash Scripting(仓库路径 ebook/pt_br/content/019-working-with-cloudflare-api-with-bash.md)中的「Working with Cloudflare API with Bash」一章为主体,讲解如何用 Bash 脚本监控服务器 CPU 负载,并在遭遇攻击(CPU 飙升)时通过 Cloudflare API 自动启用"Under Attack"(DDoS 防护)模式、负载恢复后自动关闭。读完本文,你将掌握 Cloudflare API 鉴权要素、curl 调用方式、脚本落地与 crontab 定时调度的完整实战方案。

一、章节背景:为什么用 Cloudflare API + Bash

在真实生产环境中,许多个人站长和中小团队会把网站托管在云服务器(如 DigitalOcean Droplets)上,同时用 Cloudflare 作为 CDN 提供商。Cloudflare 的核心价值有两点:

  • 降低回源流量:用户请求由 Cloudflare 边缘节点就近响应,源站带宽压力大幅下降;
  • 隐藏源站 IP:源服务器真实 IP 被 CDN 屏蔽在背后,降低被直接攻击的风险。

本章作者特别强调,Cloudflare 免费提供的DDoS 防护是最实用的功能之一,曾多次在真实攻击中保护服务器。而 Cloudflare 提供了完善的 HTTP API,可以编程式地开启 / 关闭防护模式——这正是 Bash 脚本发挥作用的场景。

本章以"挑战(Challenge)"形式呈现:不直接给出完整脚本,而是要求读者先自己动手写一个能自动开关 DDoS 防护的脚本,再与参考实现对照。

二、前置条件:账号、密钥与 Zone ID

在编写脚本前,需要准备以下三样东西(原文档 中已列出):

  1. 一个 Cloudflare 账号(并已把网站接入 Cloudflare,即添加了 Zone);
  2. Cloudflare API Key:用于 API 鉴权的密钥;
  3. Cloudflare Zone ID:对应网站区域的唯一标识,Cloudflare 仪表盘中对应域名概览页可找到。

确认 curl 已安装

脚本通过 curl 调用 Cloudflare REST API,因此服务器上必须装有 curl。先用版本号验证:

curl --version

若未安装,按发行版选择安装命令:

  • RedHat / CentOS 系列:
yum install curl
  • Debian / Ubuntu 系列:
apt-get install curl

三、挑战需求:CPU 负载驱动的自动防护

本章的脚本需求非常明确,可以拆解为三条核心功能(原文档 原文):

  • 监控服务器 CPU 负载:定期读取系统负载,并与 vCPU 核数对比判断是否"过高";
  • CPU 飙升时自动启用防护:一旦检测到异常尖峰,立即调用 Cloudflare API,为指定 Zone 开启 DDoS 防护("I'm under attack" 模式);
  • 负载恢复后自动关闭:当 CPU 负载回归正常,再次调用 API 把安全级别恢复到正常模式。

设计思路的合理性在于:DDoS 攻击(如流量洪泛)通常会导致服务器 CPU 负载瞬间飙高;反过来,用负载作为攻击信号的"代理指标",无需额外监控服务即可实现一定程度的自动防御。

从实现角度,一个典型的判定逻辑是将系统负载平均值与 vCPU 核数比较:负载持续高于核数说明系统过载,脚本就触发防护开关。这也是本章选择"根据 vCPU 数量判断 CPU 使用率高低"(原文:if the CPU usage gets high based on the number vCPU)的原因。

四、参考脚本:下载、配置与授权

原文档作者准备了一份演示脚本protection.sh,用于对照学习。建议先自己动手写,写不出来再参考——这是本章刻意设置的练习节奏。

4.1 下载脚本

wget https://raw.githubusercontent.com/bobbyiliev/cloudflare-ddos-protection/main/protection.sh

4.2 编辑并填入 Cloudflare 凭据

用任意文本编辑器打开:

nano protection.sh

将文件顶部的三个占位变量替换成你自己的 Cloudflare 信息(注意原文档中变量名CF_CONE_ID系 Zone ID 的拼写,实际含义即CF_ZONE_ID):

CF_CONE_ID=YOUR_CF_ZONE_ID CF_EMAIL_ADDRESS=YOUR_CF_EMAIL_ADDRESS CF_API_KEY=YOUR_CF_API_KEY

三个变量的作用:

变量说明
CF_CONE_ID目标网站的 Zone ID,决定 API 操作作用于哪个站点
CF_EMAIL_ADDRESSCloudflare 账号邮箱,API 鉴权所需
CF_API_KEYAPI 密钥,与邮箱一起用于身份验证

安全提示:API Key 等同于账号的部分操作权限,脚本中建议以环境变量或受限权限的 Token 方式注入,避免明文写入后随仓库泄露。

4.3 赋予可执行权限

chmod +x ~/protection.sh

五、定时调度:用两条 cron 实现 30 秒检查间隔

cron 最小粒度是 1 分钟,但 DDoS 防御需要更快的响应。原文档给出的技巧是用两条 cron 任务错开 30 秒

crontab -e

加入以下内容:

* * * * * /path-to-the-script/cloudflare/protection.sh * * * * * ( sleep 30 ; /path-to-the-script/cloudflare/protection.sh )

原理拆解:

  • 第一条在每分钟第 0 秒执行一次脚本;
  • 第二条同样在每分钟执行,但先用sleep 30阻塞 30 秒再运行脚本;
  • 两条任务合在一起,等效于每 30 秒检查一次服务器负载。

注意将/path-to-the-script/cloudflare/protection.sh替换为脚本实际存放的绝对路径(原文档明确提示了这一点)。

六、局限性与演进方向

原文档在结论部分非常坦诚地指出了该方案的两个关键边界

  1. 攻击导致服务器无响应时脚本可能无法触发:如果 DDoS 已经打满带宽或使系统卡死,本机 cron 与脚本根本来不及运行,防御就失效了;
  2. 更稳妥的方案是接入外部监控系统:例如 Nagios 这类独立于被攻击服务器的监控平台,由它根据统计指标远程触发脚本(或直接调用 Cloudflare API)。

因此,本文方案定位是"轻量、零成本、适合学习与个人站点"的过渡方案,而非面向高可用生产环境的最终答案。它最大的价值在于:把 Bash 脚本、cron 调度、外部 REST API 鉴权调用这几个能力串成了一个完整的自动化闭环。

七、仓库佐证:这本书如何保证脚本质量

本文所在仓库introduction-to-bash-scripting对书中所有 bash 代码块有严格的质量校验机制,这从侧面印证了本章脚本的可信度:

  • 仓库提供了 scripts/shellcheck-ebook.sh,它会从英文版各章节 markdown 文件中提取所有bash代码块,逐块运行 shellcheck 静态检查
  • 该脚本对教育场景做了针对性豁免(如SC2034变量未使用、SC2154变量未赋值等,因为片段教学需要跨示例定义变量),并自动跳过 crontab 语法行与故意展示的错误示例——这正是本章第 5 节两条 cron 任务不会被误报为 shellcheck 错误的原因(脚本第 33 行注释明确提到SC2211 - glob used as command (crontab syntax lines));
  • 检查未通过时脚本返回退出码 1 并输出具体告警,通过则提示All blocks pass shellcheck.,确保全书示例"可复制、可运行"。

此外,本章属于电子书的"实战章节"序列:前一章 018-working-with-json-in-bash-using-jq.md 已经演示了curl ... | jq解析 REST API JSON 响应的方法——处理 Cloudflare API 返回的 JSON 结果时同样可以沿用这一套路。电子书章节清单见 README.md,构建配置(书名、作者、样本页范围)见 ebook/pt_br/ibis.php。

八、总结

回顾本章核心要点:

  1. 准备工作:Cloudflare 账号、API Key、Zone ID,以及服务器上的 curl;
  2. 脚本逻辑:定期读取 CPU 负载并与 vCPU 核数比较,异常时通过 Cloudflare API 开启 "Under Attack" 防护,恢复后关闭;
  3. 落地方式wget下载参考脚本 → 填入凭据 →chmod +x→ 用两条 cron 错开 30 秒实现每 30 秒一轮检查;
  4. 认知边界:本机方案在服务器完全无响应时会失效,生产环境应结合 Nagios 等外部监控平台。

对学习者而言,动手实现本章脚本,等于完成了一次"Bash + 外部 REST API + 系统资源监控 + 定时任务"的综合训练——这正是 Bash 脚本自动化 SysOps / DevOps 日常工作的典型缩影。

【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询