DDoS(分布式拒绝服务)攻击通过大量请求耗尽服务器或网络资源,使合法用户无法访问服务。对于普通 VPS,完全抵御大规模 DDoS 攻击并不现实,但了解攻击类型、掌握基础防护手段,能显著提升服务的抗扰动能力。本文提供科普性介绍与在 VPS 上可行的基础防护建议。
本文要点
- 常见 DDoS 攻击类型与原理科普
- Linux 内核层面的 SYN Flood 基础防护
- iptables 连接速率限制
- CDN 前置与机房高防服务说明
常见攻击类型
| 攻击类型 | 原理 | 特征 | 普通 VPS 防护难度 |
|---|---|---|---|
| SYN Flood | 发送大量半开 TCP 连接耗尽连接队列 | 大量 SYN_RECV 状态 | 可缓解 |
| UDP Flood | 发送大量 UDP 包占满带宽 | 带宽骤升、网卡拥堵 | 超出带宽无解 |
| HTTP Flood | 大量 HTTP 请求耗尽 Web 服务资源 | CPU 飙升、请求超时 | 应用层可过滤 |
| ICMP Flood | 大量 Ping 包耗尽网络资源 | Ping 响应异常 | 可屏蔽 ICMP |
| 放大攻击 | 利用 DNS/NTP 等协议放大流量 | 流量远超攻击源 | 需机房层面处理 |
普通 VPS 的局限性
如果攻击流量超过机房上行带宽,即使服务器本身做了所有防护,流量在进入机房前就已把线路打满。此时只有机房高防服务或 CDN 清洗才能真正解决问题。
内核参数调优(SYN Flood 防护)
# 启用 SYN Cookie(最有效的 SYN Flood 防护)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# 增大 SYN 队列
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# 减少 SYN_RECV 重试次数
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
# 缩短 FIN 等待时间
echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout永久生效需写入 /etc/sysctl.conf:
cat >> /etc/sysctl.conf << 'SYSCTL'
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.conf.all.rp_filter = 1
SYSCTL
sysctl -piptables 连接速率限制
限制单 IP 并发连接数
# 每个 IP 对 HTTP 端口的并发连接数超过 100 则丢弃
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP
# 限制每 IP 每 60 秒内对 SSH 的连接尝试次数
iptables -A INPUT -p tcp --dport 22 \
-m recent --name ssh_list --update --seconds 60 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --dport 22 \
-m recent --name ssh_list --set -j ACCEPT屏蔽无效数据包
# 丢弃状态无效的包
iptables -A INPUT -m state --state INVALID -j DROP
# 丢弃 NULL 扫描(无任何 TCP flag)
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# 丢弃 XMAS 扫描(所有 flag 都置位)
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROPNginx 应用层限速(HTTP Flood 防护)
# http 块中定义限速区域(每 IP 每秒最多 20 个请求)
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=20r/s;
# server 或 location 块中应用
limit_req zone=req_limit burst=50 nodelay;
limit_req_status 429;CDN 前置与机房高防
CDN 的作用
将域名解析到 CDN 服务商,真实服务器 IP 对外隐藏。攻击流量由 CDN 节点吸收和清洗,真实服务器不直接承受攻击压力,适合面向公众的 Web 服务。
机房高防服务
对于需要更强防护的场景,可寻找提供高防 IP 的服务商,将攻击流量在进入机房前完成清洗,干净流量再回源到 VPS。搬瓦工部分高端机房提供更高带宽和一定程度的基础防护能力。
| 防护层级 | 手段 | 防护上限 | 成本 |
|---|---|---|---|
| 服务器内核 | sysctl + iptables 限速 | 受限于本机 CPU/带宽 | 免费 |
| 应用层 | Nginx limit_req + fail2ban | 适合 HTTP Flood | 免费 |
| CDN | Cloudflare 等 CDN 清洗 | 中等规模攻击 | 免费/付费 |
| 机房高防 | 高防 IP / 高防机房 | 大规模 DDoS | 较贵 |
安全防护是分层叠加的
没有单一措施能防御所有攻击。正确思路是按成本由低到高叠加:内核调优 → iptables 限速 → 应用层限速 → CDN 清洗 → 高防服务。
小结
- 启用 SYN Cookie 和调整内核参数是零成本的基础防护
- iptables 限速能缓解小规模扫描和连接类攻击
- 面向公众的网站优先接入 CDN,隐藏真实 IP 是最有效的防护之一
- 超出带宽的攻击只有机房高防才能解决
- 防护是分层叠加,没有万能方案
常见问题
搬瓦工 VPS 能抵御多大的 DDoS 攻击?
通过内核调优和 iptables 只能缓解小规模攻击。超出线路带宽的攻击需要机房高防或 CDN 清洗,建议视业务重要性选择合适的防护方案。
启用 SYN Cookie 有副作用吗?
几乎没有。SYN Cookie 在连接队列满时才激活,对绝大多数业务无感知影响。
接入 CDN 后真实 IP 真的被隐藏了吗?
前提是从未在其他地方泄露过真实 IP(如历史 DNS 记录、邮件头、子域名等)。同时需要在 CDN 配置中限制只允许 CDN IP 访问源站。