如何保护 VPS 免受 DDoS 攻击
分布式拒绝服务(DDoS)攻击会向服务器或其网络连接发送大量流量,使真实访问者无法正常连接。有些攻击规模过大,单靠服务器本身无法承受,因此最好采用分层防护:先在网络边缘过滤,再在 VPS 上配置防火墙和应用层设置。ONIE 通过 DDoS Shield 在网络边缘为胡志明市的云服务器提供防护,且无额外费用;您也可以在几分钟内部署一台带 DDoS 防护的 VPS。
攻击类型
- 体积型(第 3 层和第 4 层): 大量数据包填满网络链路,例如 UDP 洪泛。
- 协议型攻击: 滥用连接处理机制,例如 SYN 洪泛,耗尽连接表。
- 应用层(第 7 层): 大量看似正常的 HTTP 请求,耗尽 Web 服务器或数据库资源。
每种类型需要不同的应对方式。体积型流量必须在到达服务器之前拦截;应用层洪泛则可以在服务器上减轻。
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 或反向代理可以承担部分 Web 流量,前提是真实服务器 IP 没有在 DNS 或邮件头中暴露。
我需要购买特殊套餐才能获得 DDoS 防护吗?
这取决于服务商。请检查您的套餐和所在地区包含哪些服务。