首页 > Technology > 正文

VPS DDoS 防护完整指南

fenij 2026-08-03 138 Technology

DDoS 攻击用大量垃圾流量把服务器打满,让它没法正常响应合法请求。和入侵不同,DDoS 没有漏洞可以补——它就是靠流量体积取胜。防护必须分层:内核、防火墙、应用、CDN,每层做每层该做的事。

DDoS 攻击类型与防护

类型 特征 防护手段
SYN Flood 大量半连接 sysctl 调 SYN 参数
HTTP Flood 真实请求耗资源 限速 + WAF
DNS Amplification 放大反射攻击 关 DNS 递归
慢速攻击 Slowloris 占连接 调超时 + 限并发
CloudFlare
免费 DDoS 防护
🔧
fail2ban
自动封 IP
📊
7层
应用层防护最关键

判断攻击类型

先搞清楚自己面对的是什么攻击:

tcpdump -nn -c 1000 -i eth0 | awk '{print $3}' | sort | uniq -c | sort -rn | head -20

如果源 IP 成千上万,每个发几个包,那是分布式攻击,靠封 IP 没用。如果只有少数 IP 疯狂发 SYN 或 UDP,本地过滤可能有效。

再看连接状态:

ss -s
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c | sort -rn

正常服务器大部分是 ESTABLISHED。如果 SYN_RECV 上万,说明正在被 SYN flood。

内核层防护:SYN Flood

SYN flood 是最常见的 VPS 级 DDoS。开启 SYN cookies:

sysctl net.ipv4.tcp_syncookies
# 如果是 0,开启
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
sysctl -w net.ipv4.tcp_synack_retries=2

持久化到 /etc/sysctl.d/99-ddos.conf

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.conf.all.rp_filter = 1

防火墙层:速率限制

对连接数做限制:

iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 20 -j DROP

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

应用层:Nginx 限速

针对 HTTP 层的攻击,在 Nginx 里限流:

limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;

location / {
    limit_req zone=general burst=20 nodelay;
}
location /wp-login.php {
    limit_req zone=login burst=5 nodelay;
}
location = /xmlrpc.php {
    deny all;
}

CDN 前置:真正的流量吸收层

当攻击流量超过你的上行带宽时,服务器端做什么都没用——包已经到门口了。Cloudflare 免费版就能吸收大部分 3/4 层攻击。把 DNS 切到 Cloudflare,开启 Under Attack 模式,配置 rate limiting。

其他选择:主机商的 DDoS 防护(Vultr、Hetzner、OVH 都有)、AWS Shield、专业清洗服务。

上游带宽被占满怎么办

如果上游带宽已经饱和,联系你的 VPS 提供商。他们通常会临时 null-route 被攻击的 IP,这会中断服务,但能保护他们的网络。长期方案必须是用 CDN 或专业清洗服务。

更多服务器安全教程,请访问 fenij.com

常见问题

问:SYN cookies 会影响性能吗?
答:几乎不会。只有发生 SYN flood 时才会启用,正常流量走标准握手。现代 CPU 生成 cookies 的开销可以忽略。

问:Cloudflare 前面还需要 iptables 限速吗?
答:需要。如果攻击者找到了源站 IP,就能绕过 Cloudflare。iptables 是最后一道防线。

问:怎么隐藏源站 IP?
答:所有 DNS 记录都要走 Cloudflare 代理(橙色云)。检查证书透明度日志、邮件头、子域名,确保没有其他地方泄露真实 IP。

🔗 延伸阅读

IP 分片攻击是 DDoS 的一种变体,完整原理见IP 分片攻击完整指南

排错自查清单

  • ☐ DDoS 攻击类型与防护
  • ☐ 判断攻击类型:先搞清楚自己面对的是什么攻击:
  • ☐ 内核层防护:SYN Flood:SYN flood 是最常见的 VPS 级 DDoS。开启 SYN cookies:
  • ☐ 防火墙层:速率限制:对连接数做限制:
  • ☐ 应用层:Nginx 限速:针对 HTTP 层的攻击,在 Nginx 里限流:
  • ☐ CDN 前置:真正的流量吸收层:当攻击流量超过你的上行带宽时,服务器端做什么都没用——包已经到门口了。Cloudflare 免费版就能吸收大部
  • ☐ 上游带宽被占满怎么办:如果上游带宽已经饱和,联系你的 VPS 提供商。他们通常会临时 null-route 被攻击的 IP,这会中断
  • ☐ 常见问题:问:SYN cookies 会影响性能吗? 答:几乎不会。只有发生 SYN flood 时才会启用,正常流量走

关键命令速查

  • tcpdump -nn -c 1000 -i eth0 | awk '{print $3}' | sort | uniq -c | sort -rn | head -20
  • ss -s netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c | sort -rn
  • sysctl net.ipv4.tcp_syncookies # 如果是 0,开启 sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w ne
  • net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_synack_retrie
  • iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --set iptables -A
  • limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s; limit_req_zone $binary_rem

相关延伸

更系统的排查思路,见 Technology 分类归档

相关完整手册

系统化的排查与配置思路,建议顺手收藏这几篇完整手册: