返回首頁DDoS 防護

DDoS 測試指南:如何合法檢測網站的 DDoS 防禦能力(2025)

26 min 分鐘閱讀

DDoS 測試指南:如何合法檢測網站的 DDoS 防禦能力(2025)

DDoS 測試指南:如何合法檢測網站的 DDoS 防禦能力(2025)

你花了大量資源部署 DDoS 防護方案,但真的有效嗎?許多企業直到遭受攻擊時才發現,原以為完善的防禦其實存在嚴重漏洞。DDoS 測試是唯一能在真實攻擊發生前驗證防禦能力的方法。

本指南將介紹如何合法進行 DDoS 測試、常用的壓力測試工具、專業測試服務,以及如何根據測試結果優化防禦架構。無論你是自行測試還是尋求專業協助,這些知識都能幫助你確保防禦真正有效。

延伸閱讀:完整 DDoS 防護知識請參考 DDoS 攻擊與防護完整指南


為什麼需要 DDoS 測試?

驗證防禦機制是否真正有效

DDoS 防護不是裝了就有效。設定錯誤、規則衝突、容量不足等問題都可能讓防禦形同虛設。實際測試能揭露這些隱藏問題:

常見的防禦失效原因:

  • 設定錯誤:WAF 規則過於寬鬆或與應用程式衝突
  • 容量不足:防護容量低於可能遭受的攻擊規模
  • 盲區存在:某些攻擊類型未被涵蓋(如 L7 攻擊)
  • 回應太慢:防禦啟動時間過長,攻擊已造成損害
  • 誤判嚴重:合法流量被擋,影響正常使用者

只有透過測試,才能在真實攻擊發生前發現並修復這些問題。

了解系統的承載上限

DDoS 測試能幫助你了解系統的真實極限:

需要了解的指標為何重要
最大承載 RPS知道系統能處理多少請求
崩潰臨界點了解何時會開始失效
恢復時間攻擊停止後多久恢復正常
瓶頸位置網路、應用程式還是資料庫先到達極限

這些數據能幫助你做出更好的容量規劃決策。

符合合規與稽核要求

許多產業法規與資安標準要求定期進行 DDoS 防禦測試:

  • 金融業:金管會資安規範要求定期資安演練
  • ISO 27001:要求測試資訊安全控制措施的有效性
  • PCI DSS:要求測試網路安全控制措施
  • 政府機關:資通安全管理法要求定期稽核

定期測試並保留紀錄,是符合合規要求的重要環節。


合法 DDoS 測試的注意事項

法律風險與責任

DDoS 測試必須謹慎進行,否則可能觸犯法律:

台灣相關法規:

  • 刑法第 360 條:妨害電腦使用罪,最高可處 5 年有期徒刑
  • 刑法第 358 條:無故入侵電腦罪
  • 刑法第 359 條:無故取得、刪除或變更他人電磁紀錄

合法測試的關鍵原則:

  1. 只能測試自己擁有或有書面授權的系統
  2. 測試前必須通知所有相關方(ISP、雲端供應商、託管商)
  3. 限制測試範圍,避免影響共用基礎設施
  4. 保留完整測試紀錄與授權文件

⚠️ 警告:未經授權對他人系統進行 DDoS 測試,即使是「安全研究」目的,仍屬違法行為。

測試前的準備工作

完整的測試準備清單:

1. 取得書面授權

測試授權書應包含:
- 測試目標系統的明確範圍
- 測試時間窗口
- 最大測試流量限制
- 緊急聯絡人資訊
- 雙方責任歸屬
- 相關方簽章

2. 通知相關方

需通知對象通知內容建議提前時間
ISP測試時間、預期流量1-2 週
雲端供應商測試計畫書1-2 週
資安團隊完整測試方案提前討論
維運團隊時間與影響評估1 週
管理層風險與價值說明需核准

3. 準備應變計畫

  • 緊急停止機制:如何立即終止測試
  • 回滾方案:測試造成問題時的恢復步驟
  • 通訊管道:測試期間的即時溝通方式

測試環境 vs 正式環境

面向測試環境正式環境
風險
真實性可能與正式環境有差異最真實的結果
成本需額外建置無額外成本
影響範圍僅測試環境可能影響真實使用者
建議時機初期測試、高風險測試最終驗證、低風險測試

最佳實務:

  1. 先在測試環境進行初步測試
  2. 確認測試方法安全後,再於正式環境的維護時段進行
  3. 正式環境測試應選擇流量低峰時段
  4. 隨時準備中止測試

壓力測試工具介紹

Apache JMeter

JMeter 是最普及的開源負載測試工具,適合 L7 應用層測試:

適用場景:

  • HTTP/HTTPS 請求測試
  • API 端點壓力測試
  • Web 應用程式效能測試

基本使用範例:

# 安裝 JMeter(macOS)
brew install jmeter

# 命令列執行測試
jmeter -n -t test-plan.jmx -l results.jtl -e -o report/

簡易測試計畫配置:


<ThreadGroup>
  <stringProp name="ThreadGroup.num_threads">100</stringProp>
  <stringProp name="ThreadGroup.ramp_time">60</stringProp>
  <stringProp name="ThreadGroup.duration">300</stringProp>
</ThreadGroup>

優缺點:

優點缺點
完全免費開源圖形介面較耗資源
功能完整學習曲線中等
社群資源豐富大規模測試需分散式部署
支援多種協定測試腳本維護成本

Gatling

Gatling 是以 Scala 撰寫的高效能測試工具,特別適合開發團隊:

特色:

  • 測試腳本即程式碼(Test as Code)
  • 非同步架構,效能優異
  • 自動產生精美報告

基本測試腳本:

class BasicSimulation extends Simulation {
  val httpProtocol = http
    .baseUrl("https://your-website.com")
    .acceptHeader("text/html")

  val scn = scenario("Basic Load Test")
    .exec(http("Home Page").get("/"))
    .pause(1)
    .exec(http("API Call").get("/api/status"))

  setUp(
    scn.inject(
      rampUsers(100).during(60),
      constantUsersPerSec(20).during(300)
    )
  ).protocols(httpProtocol)
}

優缺點:

優點缺點
效能極佳需要 Scala 知識
報告精美學習曲線較高
CI/CD 整合友善企業版功能需付費
程式碼即測試非技術人員較難使用

Locust

Locust 是 Python 開發者的首選,用 Python 撰寫測試腳本:

基本測試腳本:

from locust import HttpUser, task, between

class WebsiteUser(HttpUser):
    wait_time = between(1, 3)

    @task(3)
    def view_homepage(self):
        self.client.get("/")

    @task(1)
    def view_api(self):
        self.client.get("/api/status")

    def on_start(self):
        # 模擬使用者登入
        self.client.post("/login", json={
            "username": "test",
            "password": "test"
        })

執行測試:

# 啟動 Locust
locust -f locustfile.py --host=https://your-website.com

# 無頭模式執行
locust -f locustfile.py --host=https://your-website.com \
  --users 1000 --spawn-rate 50 --run-time 5m --headless

LoadRunner(企業級)

Micro Focus LoadRunner 是企業級負載測試解決方案:

特色:

  • 支援超過 50 種協定
  • 專業級分析報告
  • 企業級技術支援
  • 完整的測試管理功能

適用場景:

  • 大型企業複雜系統測試
  • 需要專業報告的合規稽核
  • 多協定混合測試

工具比較表

工具費用學習曲線適合場景L7 測試分散式測試
JMeter免費中等通用壓力測試✅ 需設定
Gatling免費/付費較高開發團隊✅ 企業版
Locust免費中等Python 團隊✅ 內建
LoadRunner付費較高企業級測試✅ 完整
k6免費/付費現代 Web 應用✅ Cloud

建議:先了解攻擊手法才能設計有效測試,請見 DDoS 攻擊類型完整解析


專業 DDoS 模擬測試服務

為何需要專業測試服務?

自建測試能力有其限制:

自建測試限制專業服務優勢
難以產生大規模流量可產生數十 Gbps 攻擊流量
只能測試基本攻擊類型模擬真實的複雜攻擊
缺乏專業分析能力提供深度分析報告
需要自行維護工具專業團隊操作
可能影響正式環境可控的測試環境

適合使用專業服務的情境:

  • 企業級 DDoS 防護驗證
  • 合規稽核要求的正式測試
  • 需要模擬大規模真實攻擊
  • 缺乏內部測試專業人力

常見 DDoS 測試服務商

1. NCC Group

  • 全球知名資安測試公司
  • 提供完整的 DDoS 模擬測試
  • 包含詳細的弱點分析報告

2. Rapid7

  • 提供 DDoS 彈性測試服務
  • 整合弱點掃描與滲透測試
  • 完整的修復建議

3. Redbot Security

  • 專注於 DDoS 測試
  • 可客製化攻擊情境
  • 提供即時監控與分析

4. 本地資安廠商

  • 台灣有多家資安公司提供 DDoS 測試服務
  • 優點:在地支援、了解本地法規
  • 建議透過公協會或客戶推薦選擇

測試服務選擇考量

考量因素評估重點
測試能力可產生的攻擊類型與規模
專業認證CREST、OSCP 等資安認證
過往經驗同產業客戶案例
報告品質報告是否符合合規需求
保密性資料處理與保密措施
價格透明報價是否清楚明確
後續支援是否提供修復諮詢

想進行專業的 DDoS 測試? 專業的 DDoS 測試需要經驗豐富的資安團隊。預約資安評估,讓我們協助你規劃完整的測試方案。


測試結果分析與報告

關鍵效能指標(KPI)

DDoS 測試需要關注以下指標:

1. 可用性指標

指標說明目標值
正常運作時間測試期間服務可用比例> 99%
錯誤率HTTP 5xx 錯誤比例< 1%
服務降級時間效能明顯下降的時間最小化

2. 效能指標

指標說明典型閾值
回應時間請求到回應的時間< 200ms
吞吐量每秒處理的請求數依系統設計
並發連線數同時處理的連線數依系統設計

3. 防禦指標

指標說明評估重點
偵測時間發現攻擊的時間< 30 秒
緩解時間開始阻擋攻擊的時間< 60 秒
誤判率合法流量被阻擋的比例< 0.1%
阻擋率惡意流量被阻擋的比例> 99%

如何判讀測試結果

成功的防禦測試應該呈現:

攻擊開始 → 短暫效能下降 → 防禦啟動 → 效能恢復正常
   |           |              |           |
   0s         10s           30s         60s

需要關注的警訊:

  • 偵測時間超過 1 分鐘
  • 效能下降期間超過 5 分鐘
  • 誤判導致大量合法使用者被阻擋
  • 防禦啟動後效能仍持續下降

測試報告範本

完整的測試報告應包含:

# DDoS 防禦能力測試報告

## 1. 測試概要
- 測試日期:2025-01-15
- 測試目標:production.example.com
- 測試時長:4 小時
- 授權文件:附錄 A

## 2. 測試情境
| 測試項目 | 攻擊類型 | 流量規模 | 持續時間 |
|---------|---------|---------|---------|
| 測試 1 | HTTP Flood | 10,000 RPS | 30 分鐘 |
| 測試 2 | Slowloris | 5,000 連線 | 30 分鐘 |
| 測試 3 | 混合攻擊 | 複合型 | 60 分鐘 |

## 3. 測試結果摘要
- 整體評等:B+
- 主要發現:L7 攻擊防禦有改善空間

## 4. 詳細分析
[各項測試的詳細數據與圖表]

## 5. 發現問題
| 編號 | 問題描述 | 風險等級 | 建議修復方式 |
|-----|---------|---------|-------------|
| 1 | Rate limiting 閾值過高 | 中 | 調整至 100 RPS |
| 2 | Slowloris 偵測延遲 | 高 | 啟用連線逾時 |

## 6. 改善建議
[詳細的優化建議清單]

## 7. 附錄
- 附錄 A:測試授權書
- 附錄 B:原始數據
- 附錄 C:測試工具設定

根據測試結果優化防禦

常見問題與解決方案

問題 1:Rate Limiting 效果不佳

# 優化 Nginx rate limiting
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;

location /api/ {
    limit_req zone=api burst=20 nodelay;
    limit_req_status 429;
}

location /login {
    limit_req zone=login burst=5;
    limit_req_status 429;
}

問題 2:Slowloris 攻擊防禦不足

# 調整連線超時設定
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 15s;
send_timeout 10s;

# 限制每個 IP 的連線數
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_conn conn_limit 10;

問題 3:誤判率過高

  • 檢視 WAF 規則是否過於嚴格
  • 建立合法流量的白名單
  • 調整異常偵測的靈敏度
  • 考慮使用機器學習型偵測

更多防禦設定請參考 DDoS 防禦實作教學

建立持續測試機制

DDoS 測試不應只是一次性活動:

建議的測試週期:

測試類型建議頻率說明
基本壓力測試每月驗證基本防禦能力
完整防禦測試每季模擬多種攻擊情境
外部專業測試每年第三方獨立驗證
變更後測試每次變更後確認變更未影響防禦

自動化測試整合:

# GitHub Actions 定期壓力測試範例
name: Weekly Load Test
on:
  schedule:
    - cron: '0 3 * * 0'  # 每週日凌晨 3 點

jobs:
  load-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run k6 Load Test
        uses: grafana/[email protected]
        with:
          filename: tests/load-test.js
      - name: Upload Results
        uses: actions/upload-artifact@v3
        with:
          name: k6-results
          path: results/

測試結果的追蹤管理

建立測試結果的追蹤機制:

  1. 版本化測試報告:每次測試報告應有版本號與日期
  2. 問題追蹤:將發現的問題納入 Issue 追蹤系統
  3. 趨勢分析:比較歷次測試結果,觀察改善趨勢
  4. KPI 儀表板:建立 DDoS 防禦能力的監控儀表板

企業級測試規劃請見 企業 DDoS 防護方案完整指南


總結

DDoS 測試是確保防禦真正有效的必要步驟。重點摘要:

  1. 合法測試:只測試自己的系統,取得書面授權,通知所有相關方
  2. 選擇工具:根據團隊技術背景選擇 JMeter、Gatling、Locust 或 LoadRunner
  3. 專業服務:大規模或合規要求的測試建議使用專業服務
  4. 持續改善:建立定期測試機制,根據結果持續優化防禦

記住:未經測試的防禦,等於沒有防禦。

常見問題 FAQ

Q1: 測試自己的網站真的需要書面授權嗎?我是老闆耶

需要,而且一定要有書面紀錄。三個原因:(1) 你不是基礎設施的唯一擁有者——你的網站跑在雲端(AWS / GCP / Cloudflare),對這些供應商來說,「壓力測試」需要事前通知並獲得許可,否則可能違反服務條款被封號;(2) 法律風險隔離——若測試期間影響到共用基礎設施(如同一段 IP 內的其他客戶),或測試流量意外洩到別的系統(BGP 路由異常、DNS 快取等),沒有書面授權你個人可能被追究刑責;(3) 員工風險——若你請外部顧問或內部員工執行測試,他們沒書面授權在法律上是「無故入侵電腦」(刑法 359 / 360 條),即使你是老闆。正確流程:(A) 老闆書面授權(Email 或簽名即可);(B) 雲端廠商通知(AWS EC2 測試需提前 14 天申請、Cloudflare 需填寫 Penetration Test Request);(C) 執行者留下測試範圍、時間、流量上限的紀錄。

Q2: JMeter、Gatling、Locust 這些開源工具能模擬出多大規模的 DDoS?

單機上限通常 10 萬 req/s 以內,看你硬體。實測大致:(1) JMeter——JVM 較重,單機約 1,000–5,000 req/s(依測試複雜度);(2) Gatling——Scala 非同步,單機可達 10,000–30,000 req/s;(3) Locust——Python gevent,單機約 5,000–20,000 req/s;(4) k6 / wrk——Go / C 寫的,輕量最佳,單機可達 30,000–100,000 req/s。要模擬更大規模:用 distributed mode(多台機器分散)或改用雲端壓測服務(BlazeMeter、Flood.io、AWS Distributed Load Testing)。真實 DDoS 比較:Cloudflare 擋過最大攻擊是 3.5 Tbps,相當於 bn 級 req/s——自建壓測永遠模擬不出真實規模。所以壓測目標不是「模擬最大攻擊」,而是「在你預算內找出系統的承載上限與瓶頸」。

Q3: 內部測試和第三方滲透測試差在哪?要付多少錢?

兩者角色不同,不是二選一內部測試(自己做):(1) 優點——成本低、可頻繁做、熟悉系統;(2) 缺點——容易有盲點(「我知道系統可以這樣做所以不會測它」)、缺乏合規公信力。第三方滲透測試:(1) 優點——客觀視角、攻擊手法多元(黑盒測試)、有正式報告可給監管單位、金融業 / 上市公司強制要求;(2) 缺點——貴、頻率受限、報告時程長。價格(台灣市場):(A) 基礎 Web App 滲透測試——NT$80,000–200,000/次(涵蓋 1–3 個核心應用);(B) 含 DDoS 壓測——NT$150,000–400,000;(C) 紅隊演練(完整攻擊模擬)——NT$500,000–2,000,000,耗時 1–3 個月。建議頻率:(A) 內部自動化壓測每週一次;(B) 每季做一次內部完整測試;(C) 年度第三方滲透測試;(D) 重大架構變更後加做一次。採購注意:確認報告品質(有些廠商給的是自動化掃描報告不是真正滲透測試),可要求先看 sample report。

Q4: 測試時發現系統在 10,000 req/s 就掛了,離 DDoS 防護需求還差多遠?

看業務規模,10,000 req/s 對大多數中小企業其實夠用。業界基準:(1) 中小電商網站——日常流量約 100–500 req/s,尖峰(促銷時)2,000–5,000 req/s。10,000 req/s 的承載是正常流量的 5–20 倍,夠撐過大部分突發流量;(2) 遊戲、大型電商、金融——日常就 1,000–10,000 req/s,尖峰可能 50,000+,10,000 req/s 就是瓶頸了;(3) 超大型服務(TikTok、FB)——百萬等級 req/s 才夠用。判斷邏輯:(A) 若系統上限是正常尖峰流量的 3–5 倍 → 夠;(B) 只夠 1–2 倍 → 有風險,要擴容;(C) 連正常尖峰都撐不住 → 馬上處理。真正的 DDoS 防護不是靠擴容——10,000 req/s 規模的 DDoS 用 Cloudflare Free 方案就能擋下,重點是要有 CDN/WAF 在前面吸收。自己的源站能扛 10,000 req/s 已經很好了。

Q5: 壓力測試時把自己網站打掛了怎麼辦?有沒有辦法安全測試?

三個層次的「逐步加壓」方法。(1) Canary 測試(最安全)——從測試環境開始,只開 1–5% 流量,驗證基礎指標後才加壓;(2) 限時窗口——半夜 2–6 點測試,影響最小;(3) 可控退出——所有測試腳本加「Emergency Stop」,CPU 使用率 > 90% 或錯誤率 > 10% 時自動停止。測試架構建議:(A) 完全獨立的 Staging 環境(理想)——與 Production 等規格、獨立資料庫,完全無風險;(B) Production 但限制範圍——只測特定 endpoint、用測試帳號、避開尖峰時段;(C) 從小規模開始——先測 100 req/s,觀察 10 分鐘沒事再加到 1,000,一步步加壓。真的把 Production 打掛了的處置:(1) 立刻停止測試腳本;(2) 清除可能累積的異常請求 queue;(3) 重啟服務(會有短暫中斷);(4) 事後 retrospective 找出為什麼沒及早發現瓶頸。最大的錯誤:在業務尖峰時段對 Production 壓測。永遠別這樣做。


延伸閱讀:


不確定你的防禦是否足夠?

DDoS 防禦測試需要專業規劃與執行。如果你正在:

  • 評估現有 DDoS 防護的有效性
  • 需要進行合規要求的資安測試
  • 想了解系統的真實承載能力
  • 規劃企業級 DDoS 防護方案

預約資安評估,讓專業團隊協助你驗證防禦能力。

所有諮詢內容完全保密,沒有任何銷售壓力。


需要專業的雲端建議?

無論您正在評估雲平台、優化現有架構,或尋找節費方案,我們都能提供協助

預約免費諮詢

相關文章