DDoS 防禦教學:從基礎設定到進階防護的完整實作指南【2025】
DDoS 防禦教學:從基礎設定到進階防護的完整實作指南【2025】
「被 DDoS 攻擊了,網站掛了,老闆在催,怎麼辦?」
這種情況,相信很多工程師都經歷過。如果事前沒有準備,事發時只能手忙腳亂。
這篇文章會手把手教你如何建立 DDoS 防禦體系。從網路設備、伺服器、應用程式到 CDN,每一層都有具體的設定範例。讀完並實作,你的網站就能具備基本的抗攻擊能力。

DDoS 防禦的基本原則
在開始設定之前,先了解幾個重要原則。
多層次防禦架構
有效的 DDoS 防禦不是靠單一工具,而是多層防線的組合。
防禦層次(由外到內):
- ISP/雲端層:在流量進入你的網路前就過濾
- 邊界網路層:路由器、防火牆過濾
- 伺服器層:作業系統和網路服務設定
- 應用程式層: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:
- 進入 Security > WAF
- 啟用 Managed Rules
- 設定自訂規則:
# 封鎖可疑請求
(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:加入網站
- 註冊 Cloudflare 帳號
- 加入你的網域
- 更改 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 完整評測。

緊急應變 SOP
即使有完善的防禦,還是要準備好「萬一」。
DDoS 攻擊發生時的處理流程
階段 1:偵測與確認(0-5 分鐘)
- 收到告警或用戶回報
- 確認是 DDoS 攻擊(而非正常流量高峰或系統問題)
- 通知應變小組
確認方式:
- 流量突然暴增(10 倍以上)
- 來源 IP 分散在多個國家
- 請求模式異常(相同 User-Agent、相同路徑)
階段 2:初步應變(5-15 分鐘)
- 啟用 CDN 的 Under Attack Mode
- 提高 Rate Limiting 閾值
- 封鎖明顯的攻擊來源
# 快速封鎖大量 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 分鐘)
- 聯繫 ISP 請求上游過濾
- 啟用備援 IP 或備援站點
- 必要時將流量導向 DDoS 清洗服務
階段 4:持續監控與調整
- 監控攻擊是否減緩
- 調整防禦規則
- 準備下一波攻擊
緊急聯絡清單準備
事先準備好這些資訊:
| 聯絡對象 | 聯絡資訊 | 負責事項 |
|---|---|---|
| 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 已建立
- 備援方案已準備
- 團隊已演練過
延伸閱讀
- 回到核心概念:DDoS 攻擊與防護完整指南
- 了解攻擊類型:DDoS 攻擊完整解析:L3/L4/L7 攻擊類型
- 選擇防護服務:DDoS 防護服務比較:Cloudflare、中華電信、AWS Shield
- 測試防禦效果:DDoS 測試指南:如何合法檢測防禦能力
參考資料
相關文章
DDoS 攻擊與防護完整指南(2025):從原理認識到企業級防禦方案
DDoS 攻擊是什麼?本指南完整解析 DDoS 攻擊原理、常見類型(L3/L4/L7)、防禦方法與企業級防護方案。比較 Cloudflare、中華電信、Akamai 等主流 DDoS 防護服務,教你如何有效保護網站與伺服器。
DDoS 防護DDoS 防護服務比較:Cloudflare、中華電信、AWS Shield 完整評測【2025】
完整比較 Cloudflare、中華電信、AWS Shield、Azure DDoS Protection 等主流 DDoS 防護服務。包含功能、價格、適用場景分析,幫你選擇最適合的 DDoS 防護方案。
DDoS 防護DDoS 測試指南:如何合法檢測網站的 DDoS 防禦能力(2025)
完整的 DDoS 測試指南,教你如何合法檢測網站的 DDoS 防禦能力。介紹 LoadRunner、JMeter、Gatling 等壓力測試工具,以及專業 DDoS 模擬測試服務,確保你的防禦真正有效。