用 Bash 脚本自动开关 Cloudflare DDoS 防护:基于 Introduction to Bash Scripting 的实战演练
用 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 AttackDDoS 防护模式、负载恢复后自动关闭。读完本文你将掌握 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在编写脚本前需要准备以下三样东西原文档 中已列出一个 Cloudflare 账号并已把网站接入 Cloudflare即添加了 ZoneCloudflare API Key用于 API 鉴权的密钥Cloudflare Zone ID对应网站区域的唯一标识Cloudflare 仪表盘中对应域名概览页可找到。确认 curl 已安装脚本通过 curl 调用 Cloudflare REST API因此服务器上必须装有 curl。先用版本号验证curl --version若未安装按发行版选择安装命令RedHat / CentOS 系列yum install curlDebian / Ubuntu 系列apt-get install curl三、挑战需求CPU 负载驱动的自动防护本章的脚本需求非常明确可以拆解为三条核心功能原文档 原文监控服务器 CPU 负载定期读取系统负载并与 vCPU 核数对比判断是否过高CPU 飙升时自动启用防护一旦检测到异常尖峰立即调用 Cloudflare API为指定 Zone 开启 DDoS 防护Im 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.sh4.2 编辑并填入 Cloudflare 凭据用任意文本编辑器打开nano protection.sh将文件顶部的三个占位变量替换成你自己的 Cloudflare 信息注意原文档中变量名CF_CONE_ID系 Zone ID 的拼写实际含义即CF_ZONE_IDCF_CONE_IDYOUR_CF_ZONE_ID CF_EMAIL_ADDRESSYOUR_CF_EMAIL_ADDRESS CF_API_KEYYOUR_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替换为脚本实际存放的绝对路径原文档明确提示了这一点。六、局限性与演进方向原文档在结论部分非常坦诚地指出了该方案的两个关键边界攻击导致服务器无响应时脚本可能无法触发如果 DDoS 已经打满带宽或使系统卡死本机 cron 与脚本根本来不及运行防御就失效了更稳妥的方案是接入外部监控系统例如 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。八、总结回顾本章核心要点准备工作Cloudflare 账号、API Key、Zone ID以及服务器上的 curl脚本逻辑定期读取 CPU 负载并与 vCPU 核数比较异常时通过 Cloudflare API 开启 Under Attack 防护恢复后关闭落地方式wget下载参考脚本 → 填入凭据 →chmod x→ 用两条 cron 错开 30 秒实现每 30 秒一轮检查认知边界本机方案在服务器完全无响应时会失效生产环境应结合 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),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →