返回首頁DDoS 防護

DDoS 防禦教學:從基礎設定到進階防護的完整實作指南【2025】

17 min 分鐘閱讀
#ddos防禦#防禦教學#WAF設定#CDN防護#Cloudflare#nginx#防火牆#Rate Limiting#緊急應變#資安實作

DDoS 防禦教學:從基礎設定到進階防護的完整實作指南【2025】

「被 DDoS 攻擊了,網站掛了,老闆在催,怎麼辦?」

這種情況,相信很多工程師都經歷過。如果事前沒有準備,事發時只能手忙腳亂。

這篇文章會手把手教你如何建立 DDoS 防禦體系。從網路設備、伺服器、應用程式到 CDN,每一層都有具體的設定範例。讀完並實作,你的網站就能具備基本的抗攻擊能力。

工程師在電腦前設定防火牆規則,螢幕顯示 iptables 指令和流量監控圖表


DDoS 防禦的基本原則

在開始設定之前,先了解幾個重要原則。

多層次防禦架構

有效的 DDoS 防禦不是靠單一工具,而是多層防線的組合。

防禦層次(由外到內):

  1. ISP/雲端層:在流量進入你的網路前就過濾
  2. 邊界網路層:路由器、防火牆過濾
  3. 伺服器層:作業系統和網路服務設定
  4. 應用程式層:WAF、速率限制、驗證機制

每一層都能擋掉一部分攻擊,加在一起才能形成有效防禦。

防禦策略:偵測、緩解、應變

偵測(Detection)

  • 監控流量異常
  • 設定告警閾值
  • 了解正常流量基線

緩解(Mitigation)

  • 過濾惡意流量
  • 分散攻擊負載
  • 擴展資源承受攻擊

應變(Response)

  • 緊急切換機制
  • 通報流程
  • 事後分析改進

成本與防護等級的平衡

防護沒有 100% 完美的方案。需要在成本和風險之間找到平衡。

防護等級月費成本可抵擋攻擊規模適合對象
基礎$0-$50數 Gbps個人網站、小型企業
進階$200-$1,000數十 Gbps中型企業、電商
企業$3,000+Tbps 等級大型企業、金融業

先了解攻擊類型,才能選擇正確的防禦策略。請參考 DDoS 攻擊完整解析:L3/L4/L7 攻擊類型


網路設備層面的防禦設定

這一層的目標是在流量進入伺服器前就過濾掉明顯的攻擊。

路由器 / 防火牆基礎設定

1. iptables 基礎防護(Linux)

# 限制 SYN 封包速率
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# 限制 ICMP 封包
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# 丟棄無效封包
iptables -A INPUT -m state --state INVALID -j DROP

# 防止 Port Scanning
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

2. 啟用 SYN Cookie

# 查看當前設定
cat /proc/sys/net/ipv4/tcp_syncookies

# 啟用 SYN Cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# 永久生效,加入 /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1

3. 調整 TCP 參數

# /etc/sysctl.conf

# 增加半開連線佇列大小
net.ipv4.tcp_max_syn_backlog = 65536

# 減少 SYN-ACK 重試次數
net.ipv4.tcp_synack_retries = 2

# 減少 TIME_WAIT 連線數
net.ipv4.tcp_tw_reuse = 1

# 套用設定
sysctl -p

ISP 層級防護申請

如果你使用 HiNet 或其他 ISP,可以申請上游防護:

中華電信 DDoS 防護服務:

  • 聯繫企業客服或客戶經理
  • 提供要保護的 IP 範圍
  • 設定防護閾值和策略

優點:

  • 在流量進入你的機房前就過濾
  • 可以擋掉超大規模攻擊
  • 不需要改變現有架構

缺點:

  • 費用較高(月費通常萬元起)
  • 設定彈性較低
  • 需要是該 ISP 用戶

流量監控與告警設定

沒有監控,就不知道何時遭受攻擊。

使用 Prometheus + Grafana 監控:

# prometheus.yml - 監控網路流量
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

# 告警規則
groups:
  - name: ddos_alerts
    rules:
      - alert: HighNetworkTraffic
        expr: rate(node_network_receive_bytes_total[1m]) > 100000000
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "異常高流量警告"
          description: "入站流量超過 100 MB/s"

設定 LINE 或 Slack 告警通知:

# alertmanager.yml
receivers:
  - name: 'slack-notifications'
    slack_configs:
      - api_url: 'https://hooks.slack.com/services/xxx'
        channel: '#alerts'
        text: '{{ .CommonAnnotations.description }}'

監控儀表板顯示網路流量圖表和告警狀態,有紅色警示燈號閃爍


伺服器層面的強化措施

這一層的目標是讓伺服器本身更能承受攻擊。

作業系統層級調校

1. 增加檔案描述符限制

# /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536

# /etc/sysctl.conf
fs.file-max = 2097152

2. 調整網路緩衝區

# /etc/sysctl.conf

# 增加接收緩衝區
net.core.rmem_max = 16777216
net.core.rmem_default = 1048576

# 增加發送緩衝區
net.core.wmem_max = 16777216
net.core.wmem_default = 1048576

# 增加連線佇列
net.core.somaxconn = 65536
net.core.netdev_max_backlog = 65536

3. 啟用連線追蹤優化

# 增加連線追蹤表大小
net.netfilter.nf_conntrack_max = 1000000

# 減少連線追蹤逾時
net.netfilter.nf_conntrack_tcp_timeout_established = 600
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30

Web 伺服器設定優化

Nginx 防禦設定:

# /etc/nginx/nginx.conf

# 連線限制
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

http {
    # 限制每個 IP 的連線數
    limit_conn conn_limit 20;

    # 限制請求速率
    limit_req zone=req_limit burst=20 nodelay;

    # 設定連線逾時
    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 65s;
    send_timeout 10s;

    # 限制請求大小
    client_max_body_size 10m;
    client_body_buffer_size 128k;
}

server {
    # 阻擋特定 User-Agent
    if ($http_user_agent ~* (bot|crawler|spider)) {
        return 403;
    }

    # 阻擋空的 User-Agent
    if ($http_user_agent = "") {
        return 403;
    }
}

Apache 防禦設定:

# /etc/apache2/apache2.conf

# 限制連線數
MaxRequestWorkers 400
ServerLimit 400

# 設定逾時
Timeout 60
KeepAliveTimeout 5

# 限制請求大小
LimitRequestBody 10485760
LimitRequestFields 50
LimitRequestFieldSize 8190

資源隔離與擴展

使用 Docker 隔離服務:

# docker-compose.yml
version: '3'
services:
  web:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 512M

設定 Auto Scaling(AWS 範例):

# CloudFormation 片段
AutoScalingGroup:
  Type: AWS::AutoScaling::AutoScalingGroup
  Properties:
    MinSize: 2
    MaxSize: 10
    TargetGroupARNs:
      - !Ref ALBTargetGroup

ScalingPolicy:
  Type: AWS::AutoScaling::ScalingPolicy
  Properties:
    PolicyType: TargetTrackingScaling
    TargetTrackingConfiguration:
      PredefinedMetricSpecification:
        PredefinedMetricType: ASGAverageCPUUtilization
      TargetValue: 70

架構設計需要第二意見?

DDoS 防禦涉及網路、伺服器、應用程式多個層面。設計正確的架構可以事半功倍。

預約架構諮詢,讓有經驗的專家幫你:

  • 評估現有架構的抗攻擊能力
  • 設計多層次防禦策略
  • 規劃成本最佳化的防護方案

應用程式層面的防禦策略

這一層是最後一道防線,也是防禦 L7 攻擊的關鍵。

WAF(Web Application Firewall)設定

使用 ModSecurity(開源 WAF):

# 安裝 ModSecurity
apt-get install libapache2-mod-security2

# 啟用 OWASP 核心規則集
cd /etc/modsecurity
git clone https://github.com/coreruleset/coreruleset.git
cp coreruleset/crs-setup.conf.example crs-setup.conf
# /etc/modsecurity/modsecurity.conf

# 啟用防護模式
SecRuleEngine On

# DDoS 相關規則
SecRule REQUEST_HEADERS:User-Agent "@rx ^$" \
    "id:1000,phase:1,deny,status:403,msg:'Empty User-Agent'"

SecRule &REQUEST_HEADERS:Host "@eq 0" \
    "id:1001,phase:1,deny,status:403,msg:'Missing Host Header'"

Cloudflare WAF 設定:

在 Cloudflare Dashboard:

  1. 進入 Security > WAF
  2. 啟用 Managed Rules
  3. 設定自訂規則:
# 封鎖可疑請求
(http.request.uri.query contains "eval(") or
(http.request.uri.query contains "base64_decode") or
(http.user_agent contains "sqlmap")

請求驗證機制

CAPTCHA 整合(reCAPTCHA v3):


<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
grecaptcha.ready(function() {
    grecaptcha.execute('YOUR_SITE_KEY', {action: 'submit'})
    .then(function(token) {
        document.getElementById('g-recaptcha-response').value = token;
    });
});
</script>
# 後端驗證(Python)
import requests

def verify_recaptcha(token):
    response = requests.post(
        'https://www.google.com/recaptcha/api/siteverify',
        data={
            'secret': 'YOUR_SECRET_KEY',
            'response': token
        }
    )
    result = response.json()
    return result.get('success') and result.get('score', 0) > 0.5

JavaScript Challenge:


<script>
document.cookie = "js_check=" + (2 + 3) + "; path=/";
</script>
# Nginx 驗證
location / {
    if ($cookie_js_check != "5") {
        return 403;
    }
    proxy_pass http://backend;
}

API 保護措施

Rate Limiting 實作(Node.js):

const rateLimit = require('express-rate-limit');

const apiLimiter = rateLimit({
    windowMs: 1 * 60 * 1000, // 1 分鐘
    max: 100, // 每個 IP 最多 100 次請求
    message: {
        error: 'Too many requests, please try again later.'
    },
    standardHeaders: true,
    legacyHeaders: false,
});

app.use('/api/', apiLimiter);

API Key 驗證:

const validateApiKey = (req, res, next) => {
    const apiKey = req.headers['x-api-key'];

    if (!apiKey || !isValidApiKey(apiKey)) {
        return res.status(401).json({ error: 'Invalid API key' });
    }

    // 檢查該 API Key 的使用量
    if (isRateLimitExceeded(apiKey)) {
        return res.status(429).json({ error: 'Rate limit exceeded' });
    }

    next();
};

CDN 整合與設定教學

CDN 是 DDoS 防禦最有效的工具之一。

CDN 如何幫助防禦 DDoS

1. 分散攻擊流量

  • 全球數百個節點分擔流量
  • 攻擊者需要攻擊所有節點

2. 隱藏源站 IP

  • 攻擊者無法直接攻擊你的伺服器
  • 所有流量都經過 CDN

3. 邊緣過濾

  • 在邊緣節點就擋掉惡意流量
  • 減少源站負擔

4. 大頻寬吸收

  • CDN 頻寬通常是 Tbps 等級
  • 小規模攻擊根本不痛不癢

Cloudflare 設定實作

步驟 1:加入網站

  1. 註冊 Cloudflare 帳號
  2. 加入你的網域
  3. 更改 DNS 名稱伺服器指向 Cloudflare

步驟 2:基本安全設定

Dashboard > Security > Settings

- Security Level: Medium 或 High
- Challenge Passage: 30 minutes
- Browser Integrity Check: On

步驟 3:DDoS 防護設定

Dashboard > Security > DDoS

- HTTP DDoS attack protection: On
- Sensitivity: High
- Action: Block

步驟 4:Rate Limiting 規則

Dashboard > Security > WAF > Rate limiting rules

規則範例:
- 如果同一 IP 在 10 秒內請求超過 100 次
- 動作:Block for 1 hour

步驟 5:Firewall Rules

Dashboard > Security > WAF > Custom rules

# 封鎖特定國家(如果不需要該地區流量)
(ip.geoip.country in {"CN" "RU"}) and not cf.client.bot

# 保護登入頁面
(http.request.uri.path contains "/login") and
(cf.threat_score gt 10)

其他 CDN 防護設定

AWS CloudFront + Shield:

# CloudFormation
Distribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      Origins:
        - DomainName: !GetAtt ALB.DNSName
          CustomOriginConfig:
            HTTPPort: 80
            OriginProtocolPolicy: http-only
      DefaultCacheBehavior:
        AllowedMethods: [GET, HEAD, OPTIONS]
        CachedMethods: [GET, HEAD]
        ViewerProtocolPolicy: redirect-to-https

Akamai 設定重點:

  • 啟用 Kona Site Defender
  • 設定 Rate Controls
  • 配置 Bot Manager

需要更多防護服務比較?請參考 DDoS 防護服務比較:Cloudflare、中華電信、AWS Shield 完整評測

Cloudflare 儀表板顯示 DDoS 攻擊被成功阻擋的統計圖表


緊急應變 SOP

即使有完善的防禦,還是要準備好「萬一」。

DDoS 攻擊發生時的處理流程

階段 1:偵測與確認(0-5 分鐘)

  1. 收到告警或用戶回報
  2. 確認是 DDoS 攻擊(而非正常流量高峰或系統問題)
  3. 通知應變小組

確認方式:

  • 流量突然暴增(10 倍以上)
  • 來源 IP 分散在多個國家
  • 請求模式異常(相同 User-Agent、相同路徑)

階段 2:初步應變(5-15 分鐘)

  1. 啟用 CDN 的 Under Attack Mode
  2. 提高 Rate Limiting 閾值
  3. 封鎖明顯的攻擊來源
# 快速封鎖大量 IP
iptables -A INPUT -s 1.2.3.0/24 -j DROP

# 或使用 ipset 批量封鎖
ipset create blocklist hash:net
ipset add blocklist 1.2.3.0/24
iptables -A INPUT -m set --match-set blocklist src -j DROP

階段 3:升級應對(15-60 分鐘)

  1. 聯繫 ISP 請求上游過濾
  2. 啟用備援 IP 或備援站點
  3. 必要時將流量導向 DDoS 清洗服務

階段 4:持續監控與調整

  1. 監控攻擊是否減緩
  2. 調整防禦規則
  3. 準備下一波攻擊

緊急聯絡清單準備

事先準備好這些資訊:

聯絡對象聯絡資訊負責事項
ISP 技術支援電話/Email上游過濾
CDN 客服電話/Email防護升級
雲端服務商支援 Portal資源擴展
資安顧問電話/Email技術支援
法務電話/Email報案/證據保全

事後檢討與改進

攻擊結束後,務必進行檢討:

1. 收集資料

  • 攻擊時間軸
  • 攻擊規模和類型
  • 防禦措施的效果

2. 分析報告

  • 什麼地方做得好?
  • 什麼地方可以改進?
  • 需要增加什麼防禦措施?

3. 更新 SOP

  • 根據經驗更新應變流程
  • 更新聯絡清單
  • 安排演練

設定完成後,別忘了 測試你的 DDoS 防禦能力,確認防禦真的有效。


需要專業協助建立 DDoS 防禦?

DDoS 防禦涉及多個層面,自己摸索可能走很多冤枉路。

預約免費資安評估,我們可以幫你:

  • 評估現有防禦能力
  • 設計適合的防護架構
  • 建立應變流程

所有諮詢完全保密,沒有銷售壓力。


防禦設定檢查清單

完成本文的設定後,用這個清單確認:

網路層

  • iptables 基礎規則已設定
  • SYN Cookie 已啟用
  • TCP 參數已優化
  • 流量監控已建立

伺服器層

  • 檔案描述符限制已調整
  • 網路緩衝區已優化
  • Web 伺服器已設定速率限制
  • 連線逾時已設定

應用層

  • WAF 已部署
  • Rate Limiting 已啟用
  • CAPTCHA/JS Challenge 已設定
  • API 保護已實作

CDN

  • CDN 已整合
  • DDoS 防護已啟用
  • Rate Limiting 規則已設定
  • 源站 IP 已隱藏

應變準備

  • 緊急聯絡清單已準備
  • 應變 SOP 已建立
  • 備援方案已準備
  • 團隊已演練過

延伸閱讀


參考資料

  1. Cloudflare DDoS Protection Documentation
  2. Nginx Rate Limiting
  3. Linux Kernel Networking Parameters
  4. OWASP ModSecurity Core Rule Set
  5. AWS Shield Best Practices

需要專業的雲端建議?

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

預約免費諮詢

相關文章