返回博客
一月 19, 2026指南

如何保护您的 VPS 免受 DDoS 攻击:实用指南

使用防火墙、速率限制和其他经过验证的方法保护您的 VPS 免受 DDoS 攻击的综合指南。

如何保护您的 VPS 免受 DDoS 攻击:实用指南

DDoS 攻击(分布式拒绝服务)可以在几分钟内使您的服务器离线,导致收入损失、客户不满和声誉损害。在 2026 年,此类攻击变得更加复杂和容易获得。幸运的是,现代保护方法也在不断发展。本指南将向您展示如何保护您的 Hiddence VPS 免受最常见的 DDoS 攻击类型。

什么是 DDoS 攻击?

当多台计算机(僵尸网络)同时向您的服务器发送请求时,就会发生 DDoS 攻击,从而耗尽服务器资源并使其对合法用户不可用。

DDoS 攻击的主要类型

  • 容量攻击(L3/L4):UDP 洪水、ICMP、SYN 洪水 - 耗尽网络带宽
  • 应用层攻击(L7):HTTP 洪水、Slowloris - 针对应用层
  • 协议攻击:利用网络协议中的漏洞

内置 Hiddence 保护

所有 Hiddence VPS 都包括基本的第 3-4 层 DDoS 保护(网络级别)。这会自动过滤大多数容量攻击。但是,第 7 层(应用)攻击需要额外配置。

步骤 1:防火墙设置

第一道防线是适当的防火墙配置。UFW(简单防火墙)是适用于 Ubuntu/Debian 的简单有效的工具。

bash
# 安装 UFW
sudo apt update && sudo apt install ufw -y

# 允许 SSH(重要!在启用 UFW 之前执行此操作)
sudo ufw allow 22/tcp

# 允许 HTTP 和 HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 启用 UFW
sudo ufw enable

# 检查状态
sudo ufw status verbose

# 高级保护规则:
# 限制 SSH 连接(暴力破解保护)
sudo ufw limit 22/tcp

# 阻止 ICMP ping 洪水
sudo nano /etc/ufw/before.rules
# 在 *filter 后添加:
-A ufw-before-input -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

# 防止 SYN 洪水
sudo nano /etc/sysctl.conf
# 添加:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# 应用更改
sudo sysctl -p

步骤 2:安装 Fail2Ban

Fail2Ban 自动阻止显示可疑活动的 IP 地址(多次失败的登录尝试、端口扫描)。

bash
# 安装
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# SSH 和 HTTP 保护配置
# 创建本地配置
sudo nano /etc/fail2ban/jail.local

# 添加:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = ufw

[sshd]
enabled = true
port = 22
logpath = /var/log/auth.log

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log

# 重启 Fail2Ban
sudo systemctl restart fail2ban

# 检查状态
sudo fail2ban-client status

步骤 3:Nginx 保护

如果您使用 Nginx,请配置速率限制以防范 HTTP 洪水攻击。

bash
sudo nano /etc/nginx/nginx.conf

# 添加到 http 块:
http {
    # 请求限制:每个 IP 每秒 10 个请求
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    
    # 连接限制
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    
    # Slowloris 保护
    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 5s 5s;
    send_timeout 10s;
    
    # 其余配置...
}

# 在 server 块中添加:
server {
    location / {
        # 应用请求限制
        limit_req zone=one burst=20 nodelay;
        
        # 连接限制:每个 IP 最多 10 个
        limit_conn addr 10;
        
        # 您的配置...
    }
}

# 测试配置并重新加载
sudo nginx -t
sudo systemctl reload nginx

步骤 4:使用 CDN

为了获得最大保护,请使用像 Cloudflare 这样的 CDN 服务。CDN 充当代理,隐藏您服务器的真实 IP 并吸收大多数 DDoS 攻击。优势:隐藏真实 IP、自动恶意流量过滤、负载分配、免费 SSL/TLS、用于 L7 保护的 WAF。

  • 在 cloudflare.com 注册(提供免费计划)
  • 添加您的域名并在注册商处更改 NS 记录
  • 为 DNS 记录启用“代理”模式(橙色云)
  • 在 SSL/TLS 部分将 SSL 模式设置为“完全(严格)”
  • 在安全设置中启用“DDoS 保护”和“机器人战斗模式”

步骤 5:监控

定期监控有助于及早发现攻击。

bash
# 监控活动连接
watch -n 1 'ss -s'

# 查看按连接数排序的前几个 IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

# 实时查看日志
sudo tail -f /var/log/nginx/access.log
sudo journalctl -u nginx -f

# 检查 Fail2Ban 中阻止的 IP
sudo fail2ban-client status sshd

紧急措施

如果攻击已经进行中,请采取以下措施:

  • 识别来源:使用 'netstat' 或日志识别攻击 IP
  • 临时阻止:sudo ufw insert 1 deny from 攻击IP
  • 阻止整个子网:sudo ufw deny from 123.45.0.0/16
  • 限制速率:临时将 Nginx 限制降低到 1-5 请求/秒
  • 联系支持:联系 Hiddence 支持以激活高级保护
  • 在 Cloudflare 中启用“受攻击模式”(如果使用)

最佳实践

  • 如果使用 CDN,永远不要发布服务器的真实 IP
  • 定期更新系统:sudo apt update && sudo apt upgrade
  • 使用 SSH 密钥而不是密码进行服务器访问
  • 将默认 SSH 端口(22)更改为非标准端口
  • 设置自动备份以便快速恢复
  • 为关键服务使用单独的 IP
  • 启用日志记录并定期检查日志中的可疑活动
  • 如果您的服务不是全球性的,请考虑使用地理阻止