如何保護 VPS 免於 DDoS 攻擊
分散式阻斷服務(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. 事件應變檢查清單
- 在控制台確認流量是攻擊還是正常的流量高峰。
- 檢查攻擊事件與遭攻擊的 IP。
- 封鎖可辨識的惡意來源位址或位址範圍。
- 啟用更嚴格的速率限制,或顯示維護頁面。
- 帶著時間與 IP 聯絡供應商的支援團隊。
- 事後檢視日誌,並更新此計畫。請持續維護備份與快照。
常見問題
VPS 上的防火牆能擋住大規模 DDoS 嗎?
單靠防火牆無法做到。如果流量已經佔滿網路連線,伺服器就無法過濾它。你需要在伺服器上游進行過濾。
CDN 有幫助嗎?
對網站而言,CDN 或反向代理可以吸收網頁流量,前提是你的真實伺服器 IP 沒有暴露在 DNS 或郵件標頭中。
我需要特別的方案才能使用 DDoS 防護嗎?
這取決於供應商。請確認你的方案與所在地區包含哪些服務。