---
title: "Prevent Http DDoS With Cloudflare - 黑五檔期 DDoS 防禦筆記"
description: "記錄黑五檔期電商網站遭受 DDoS 攻擊的實戰應對，說明如何在 Cloudflare WAF 設定白名單、黑名單、國家挑戰與限流規則成功防禦。"
canonical_url: "https://blog.markkulab.net/post/prevent-ddos-part2"
author: "Mark Ku"
author_url: "https://blog.markkulab.net/author/mark-ku"
site: "Mark Ku's Blog"
date_published: "2022-11-28 01:01:01 +0800"
category: "Security"
tags: ["ddos", "cloudflare", "waf", "security", "black friday", "ecommerce", "firewall"]
language: "zh-TW"
license: "CC BY 4.0"
license_url: "https://creativecommons.org/licenses/by/4.0/"
attribution: "轉載或引用請註明作者並附上原文連結"
---

# Prevent Http DDoS With Cloudflare - 黑五檔期 DDoS 防禦筆記

## 時空背景 - Background
我目前在一家的電子商務公司工作，公司的產品主要服務於美國、德國及加拿大，事情發生在黑色星期五前幾天，就有觀察到，網站經常受到 DDoS 攻擊，直到有一天我們的網站被打掛了，就開始做進一步的調查。

[先前有寫一篇文章+](https://blog.markkulab.net/2022/01/16/prevent-ddos/) 也是有關防禦 DDoS 觀念，此篇將防禦規則實踐在 Cloudfalre WAF。

### 接著參考 Cloudflare 的安全報表，得知在12日，有著約 2000 萬個惡意請求發送到我們的網站。
![Cloudflare 防火牆事件總覽，顯示各國流量與時間趨勢](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/nANZAqj.png)  
![Cloudflare 總請求與防禦動作數據](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/pmtPE3Z.png)

### 同時站在網管人員角度思考，腦袋跑出很多疑惑 ? 為何會有單一IP可以有非常大的請求
![Cloudflare安全報表顯示DDoS攻擊來源IP與請求數](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/ZZcMKIn.png)

### 且為何有許多未運營的國家，對我們網站發出的大量請求。
![Cloudflare 前30天威脅國家請求數報表](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/fd3Hjn1.png)

### 雖然我們的 Cloudflare是企業版的，看起來靠預設的設定，Cloudflare 雖然擋掉大部份的DDoS，但攻擊的量太大，仍有漏網之魚，然後我花了很多時間學習 Cloudflare，查看 Cloudflalre 所有設置，並和我的老闆討論，接著我制定了一個防止DDoS的計劃，採用 Web 應用程序防火牆規則以在黑色星期五期間保護我們的生意，並取我們得美國老闆的許可。
![Cloudflare DDoS防禦規則表，包含節慶與最終手段](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/Gd5SfbS.png)

### 考量誤判而影響到生意，僅對大量請求的單一IP 進行封鎖，下圖為封鎖畫面。
![Cloudflare 阻擋 DDoS 攻擊的錯誤碼 1020 畫面](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/DhNvfeN.png)

### 避免誤判，並在加入 IP 黑名單前，會先用[abuseipdb](https://www.abuseipdb.com/check/34.121.210.98)查詢及回報可疑 IP。
![AbuseIPDB 查詢 IP 34.121.210.9](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/m3kgWmU.png)

### 其餘規則，避免誤判影響訂單，僅開啟人類驗證，驗證通過才能進入網站
![手機顯示hCaptcha人類驗證畫面](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/icKvFKYl.png)

![手機顯示要求點擊熱氣球圖片的人類驗證](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/ZrxS5ZUl.png)

## 接著，開始建立 WAF 規則 - Create Firewall rules
### 至Cloudflare 後台 > Secuity > WAF > Create firewall rule
![Cloudflare WAF防火牆規則頁面建立防火牆規則按鈕](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/W9JrIh1.png)

#### 規則1. 白名單- WhiteL ist
![Cloudflare WAF建立白名單規則允許已知與驗證機器人](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/jCN1Q5Q.png)

#### 規則2. 黑名單 - IP Block ( attacker )
![Cloudflare WAF 編輯防火牆規則，設定阻擋特定 IP 來源](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/CggFyEH.png)

#### 規則3. 國家挑戰 - Country challenge
![Cloudflare WAF 國家挑戰防火牆規則編輯畫面](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/CnZ7q6V.png)

#### 規則4. 指定IP挑戰 - IP Challenge( suspicious )
![Cloudflare WAF編輯IP挑戰規則介面](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/4dMWWvS.png)

#### 規則99. 機械人挑戰 - Automated ( last resort )
![Cloudflare WAF編輯防火牆規則，設定自動化機器人挑戰](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/b8SdAzv.png)

#### 規則99. 疑似機械人挑戰 - Likely automated ( last resort )
![Cloudflare WAF 編輯疑似機器人挑戰規則](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/1PDyWAK.png)

#### 規則99. 請求頻率限制 - Request Rate ( last resort )
![Cloudflare WAF 請求頻率限制規則設定頁面](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/7yXmDJ1.png)

#### 規則100. 僅運營國家能訪問 - Non-operating country
![Cloudflare WAF 編輯防火牆規則，阻擋非營運國家請求](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/ktMCQCe.png)

#### 另外可以調 DDOS 敏感度  (Security > Settings > DDos > Configure > Security Level > Medium
![Cloudflare DDoS L7 規則集敏感度設定為中等](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/20.png)

#### 若真的都抵擋不下來，可以啟用 I’m Under Attack mode，所有的使用者都會等待五秒才能進入網站，但使用完記得調整回原設定。 Security > Settings > DDos > Configure > Security Level > Enable I’m Under Attack mode
![Cloudflare DDoS 設定頁面，安全等級為 I'm Under Attack!](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/21.png)

## 效益 - Effective
從感恩節 - 黑五檔期(三天)，一共遇到 7 次 DDoS 攻擊，累積收到1300多萬惡意流量，最高一次攻擊瞬間收到300萬個請求，直到第五次攻擊後，網站跳停約30秒，從報表中發現攻擊型態轉變，從集中的 IP、 國家，從大量集中變成小量又分散的攻擊，最後決定透過 Cloudfalre 精準的械器學習結果規則做限制，在不影響生意下，除了單一 IP大量請求是直接封鎖，其他都是送他人類驗證，順利的度過今年的黑五檔期。的黑五很精彩，很多外部服務都出現異常狀況。

### 總共收到1363萬的請求
![Cloudflare防火牆事件總覽與DDoS攻擊曲線圖](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/RZijw3y.png)

### WAF 幫忙也阻擋了 500 多萬的請求
![Cloudflare WAF 規則動作與24小時活動](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/yLnNpgS.png)

### Bot 分析報表
![Cloudflare Bot 分析報表顯示請求總數與機器人分數分佈圖](https://blog.markkulab.net/content/markku/posts/prevent-ddos-part2/images/q9OEuh6.png)

---

## 關於本文與作者

本文出自 [Mark Ku's Blog](https://blog.markkulab.net/post/prevent-ddos-part2)

授權條款： [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) — 轉載或引用請註明作者並附上原文連結

### 關於作者

**[Mark Ku](https://blog.markkulab.net/author/mark-ku)** — Software Solution Provider

- 10+ 年資深軟體工程師，現為 AI 應用 Builder
- 專注大型平台架構設計，從北美電商到AI SaaS訂閱收費系統
- 結合 AI Agent 與自動化，打造高效可演進的產品技術基礎

### 作者開發的免費工具

以下工具皆可免費使用：

- [免費 PDF 簽名工具](https://blog.markkulab.net/tools/pdf-sign): 線上 PDF 簽名工具，瀏覽器內完成手繪、打字、上傳簽名，可拖曳放置、縮放、下載。所有處理都在你的裝置完成，檔案不會上傳。
- [VS Code Refactory](https://blog.markkulab.net/tools/refactory): Refactory 是一款 VS Code 重構擴充套件：34 個重構動作、37 條 code smell 檢查、Code Health 儀表板、18 種語言、534 支測試。懂你的專案慣例：介面放哪、DI 註冊寫在哪、'use client' 該不該加；還會用 git 修改頻率 × 複雜度排出「該先修哪個檔案」，並一鍵把壞味道交給你自己電腦上的 Claude Code 修。免費使用，原始碼不離開你的機器。
- [DB-Kit 資料庫管理工具](https://blog.markkulab.net/tools/db-kit): DB-Kit 是一個用 Tauri + Rust + React 打造的輕量跨平台資料庫管理工具，用單一一致的介面同時管理 MySQL、MariaDB、PostgreSQL、SQL Server、Oracle、SQLite、MongoDB、Redis、Kafka、Elasticsearch 與 RabbitMQ 十一種資料來源：連線密碼以 OS keychain 加密、SSH Tunnel、完整 CRUD、視覺化查詢建構器、多結果集同時顯示、跨連線資料傳輸與比對同步、Excel / CSV 匯入匯出、執行計畫視覺化、ER 圖、排程備份、SQL 壓力測試（p50～p99 延遲百分位）、15 條規則的 SQL 審查、Kafka 訊息瀏覽與監控告警；繁中 / 英文雙語介面，內建 AI 助手（自然語言生成 SQL、AI 審查與調校建議）與命令列工具 dbk。免費開源（MIT），提供 Windows / macOS / Linux 安裝檔。
- [VS Code Super Mermaid](https://blog.markkulab.net/tools/super-mermaid): Super Mermaid 是一款 VS Code 擴充套件：開箱即用的漂亮 Mermaid 圖表，自動上色、即時預覽、滑鼠平移縮放、PNG / SVG 高解析匯出，內建 21 種範本與多種主題。免費開源（MIT）。
- [React Super Mermaid](https://blog.markkulab.net/tools/react-super-mermaid): react-super-mermaid 是一個開源 React 元件庫：一行 <MermaidViewer> 即可渲染漂亮的 Mermaid 圖表，內建 colorful / sketch 主題、平移縮放、圖內搜尋、SVG / PNG 高解析匯出。輕量、SSR 安全、完整 TypeScript 型別。免費開源（MIT）。
- [Jira / Confluence Super Mermaid](https://blog.markkulab.net/tools/jira-super-mermaid): Atlassian Forge app：在 Jira issue 與 Confluence 內文直接寫 Mermaid 語法，畫流程圖、時序圖、狀態機與甘特圖。11 種圖表、SVG / PNG 匯出、明暗主題、完整中日韓文字支援。取得 Runs on Atlassian 資格：圖表存在你自己的站台，app 不呼叫任何第三方服務。免費，即將上架 Atlassian Marketplace。
- [Mermaid 線上預覽](https://blog.markkulab.net/tools/mermaid-preview): 在瀏覽器裡寫 Mermaid、即時看圖，整張圖表壓進網址就能分享。免註冊、不上傳伺服器，相容 mermaid.live 的分享連結。
- [React Intl Phone Number](https://blog.markkulab.net/tools/react-intl-phone-number): react-intl-phone-number 是一個開源 React 元件：framework-agnostic、不依賴 antd，提供 E.164 進出、可搜尋國旗 / 國碼下拉、可配置驗證等級（strict / mobile-strict / loose）、可主題化 CSS 與 i18n，電話邏輯由 google-libphonenumber 驅動。輕量、完整 TypeScript 型別。免費開源（MIT）。
- [Uptime Kuma Cluster](https://blog.markkulab.net/tools/uptime-kuma-cluster): 把單機版 Uptime Kuma 改造成高可用叢集：OpenResty + Lua 智慧負載平衡、MariaDB 共享狀態、健康檢查與自動 Failover，附叢集管理 REST API，一行 Docker Compose 啟動。免費開源（MIT）。
- [特教專案](https://blog.markkulab.net/education): 為特殊教育學生製作的學習教材

### 每日 Podcast

- [科技新鮮事](https://blog.markkulab.net/category/tech-news): 每日精選 AI 與科技趨勢，透過語音摘要快速掌握最新技術動態，涵蓋 AI 應用、軟體架構、DevOps 與工程實戰。 — RSS: https://blog.markkulab.net/feed.xml
- [AI股市蝦聊](https://blog.markkulab.net/category/ai-stock-chat): 每個交易日用 AI 分析台股盤勢，以雙人對話聊當天的盤中觀察與隔日預測。 — RSS: https://blog.markkulab.net/ai-stock-chat/feed.xml

### 電子報

[訂閱電子報](https://blog.markkulab.net/subscribe) — 第一時間收到新文章通知，無垃圾信、隨時可取消訂閱。
