如何保護 VPS 免於 DDoS 攻擊

作者 ONIE 工程團隊 · 更新於 2026年11月12日 · 閱讀時間 1 分鐘

分散式阻斷服務(DDoS)攻擊會以大量流量灌爆伺服器或其網路連線,使真正的訪客無法存取服務。有些攻擊規模大到伺服器本身無法承受,因此最好的防護方式是分層進行:先在網路邊緣過濾,再於 VPS 上設定防火牆與應用程式。ONIE 在胡志明市的雲端伺服器已在網路邊緣提供 DDoS Shield 防護,且不另外收費;你也可以在幾分鐘內部署具備 DDoS 防護的 VPS。

攻擊類型

  • 容量型攻擊(第 3 層與第 4 層): 以大量封包填滿網路連線,例如 UDP 洪水攻擊。
  • 協定攻擊: 濫用連線處理機制,例如 SYN 洪水攻擊會填滿連線表。
  • 應用層攻擊(第 7 層): 大量看似正常的 HTTP 請求,耗盡網頁伺服器或資料庫的資源。

每種類型需要不同的防禦方式。容量型流量必須在到達伺服器之前就攔截;應用層洪水攻擊則可以在伺服器端降低影響。

1. 在網路邊緣過濾

邊緣過濾會在惡意流量抵達 VPS 之前將其丟棄,避免連線頻寬被佔滿。使用 DDoS Shield 時,過濾會透過 XDP/eBPF 在網路邊緣執行,控制台也會顯示每個 IP 的流量與攻擊事件。評估任何供應商時,都應詢問其服務包含哪些內容、過濾在哪裡進行,以及是否需要額外付費。

2. 關閉不需要的服務

sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

請勿將資料庫或管理後台暴露在網際網路上。應將其綁定到 127.0.0.1 或私有網路。

3. 為 SYN 洪水攻擊調整核心參數

大多數發行版預設已啟用 SYN cookies。可以這樣檢查:

sysctl net.ipv4.tcp_syncookies

其他核心變更請保持精簡並充分測試,因為錯誤的數值可能影響正常流量。

4. 在 Nginx 中限制請求速率

在 http 區塊中:

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connperip:10m;

在 server 或 location 區塊中:

limit_req zone=perip burst=20 nodelay;
limit_conn connperip 20;

使用 sudo nginx -t && sudo systemctl reload nginx 重新載入設定。靜態檔案請使用快取提供,並在 WordPress 上使用快取外掛,以降低每次請求的處理成本。參見使用 Nginx 安裝 WordPress。

5. 監控流量

ss -s
sudo ss -ntu state established | wc -l
sudo apt install -y nload && nload

連線數或頻寬突然飆升,或伺服器變慢但 CPU 使用率很低,都可能代表遭受攻擊。請設定告警,以便及早發現。

6. 事件應變檢查清單

  1. 在控制台確認流量是攻擊還是正常的流量高峰。
  2. 檢查攻擊事件與遭攻擊的 IP。
  3. 封鎖可辨識的惡意來源位址或位址範圍。
  4. 啟用更嚴格的速率限制,或顯示維護頁面。
  5. 帶著時間與 IP 聯絡供應商的支援團隊。
  6. 事後檢視日誌,並更新此計畫。請持續維護備份與快照。

常見問題

VPS 上的防火牆能擋住大規模 DDoS 嗎?

單靠防火牆無法做到。如果流量已經佔滿網路連線,伺服器就無法過濾它。你需要在伺服器上游進行過濾。

CDN 有幫助嗎?

對網站而言,CDN 或反向代理可以吸收網頁流量,前提是你的真實伺服器 IP 沒有暴露在 DNS 或郵件標頭中。

我需要特別的方案才能使用 DDoS 防護嗎?

這取決於供應商。請確認你的方案與所在地區包含哪些服務。

參考資料與延伸閱讀

更多 VPS 指南