服务器被 DDoS 攻击了怎么办?防御方案与紧急处置步骤详解

摘要:服务器突然访问中断、带宽跑满、CPU 飙升——这可能是遭到了 DDoS 攻击。本文从「判断是否真的被攻击」开始,给出完整的紧急处置 5 步流程,再深入讲解 Cloudflare、黑洞路由、流量清洗等主流防御方案的原理与选型,帮你在最短时间内恢复服务并建立长效防护体系。

一、什么是 DDoS 攻击?常见类型速览

DDoS(分布式拒绝服务攻击)是攻击者控制大量"肉鸡"(被入侵的设备)同时向目标服务器发送海量请求,耗尽服务器的带宽、CPU 或内存资源,导致正常用户无法访问。

攻击类型攻击层原理典型症状
UDP Flood网络层(L3)海量 UDP 数据包打满带宽带宽跑满,服务器完全不可达
SYN Flood传输层(L4)发送大量半连接请求耗尽连接表新连接无法建立,已有连接正常
HTTP Flood(CC 攻击)应用层(L7)模拟正常用户发送海量 HTTP 请求CPU 飙升,页面响应极慢或 502
DNS 放大攻击网络层(L3)利用 DNS 服务器放大流量带宽被占满,服务不可用
慢速攻击(Slowloris)应用层(L7)保持大量未完成的 HTTP 连接连接数耗尽,服务器无响应
💡 中小型网站最常见的是 CC 攻击(HTTP Flood),攻击成本低,难以和正常流量区分。本文重点覆盖 CC 攻击的应对方案。

二、如何判断是否真的遭受了 DDoS?

服务器变慢或不可访问不一定是 DDoS,可能是代码 bug、流量高峰或硬件故障。先执行以下诊断命令确认:

# 1. 查看当前网络连接数(正常应在几百以内)
ss -s

# 2. 查看连接数最多的 IP(前 20)
netstat -ntu | awk '{print $5}' | cut -d: -f1 \
  | sort | uniq -c | sort -rn | head -20

# 3. 查看每秒新建连接数(持续执行观察趋势)
watch -n 1 "ss -s | grep estab"

# 4. 查看带宽占用(需安装 nload)
apt install -y nload && nload

# 5. 查看 Nginx 访问日志中请求最多的 IP
awk '{print $1}' /var/log/nginx/access.log \
  | sort | uniq -c | sort -rn | head -20

# 6. 查看每秒请求数(持续 10 秒)
for i in $(seq 1 10); do
  echo "$(date): $(grep "$(date '+%d/%b/%Y:%H:%M:%S')" \
  /var/log/nginx/access.log | wc -l) req/s"
  sleep 1
done
诊断指标正常范围异常信号
TCP 连接总数< 1000> 5000,持续增长
单个 IP 连接数< 20> 100,来自同一 IP
Nginx 请求数/秒平时基准的 2 倍以内突然增长 10 倍以上
服务器带宽占用< 70%持续 100%,且无法访问
CPU 占用< 70%持续 100%,主要是 nginx/ksoftirqd
⚠️ 特别注意:如果带宽已被打满(如攻击流量超过服务器带宽上限),服务器本身可能完全不可达,SSH 也无法连接。此时需要通过云平台 VNC 控制台操作,或联系服务商启动黑洞路由。

三、紧急处置 5 步流程(正在被攻击时看这里)

🚨 紧急情况处置流程

如果你的服务器正在遭受攻击,按以下顺序快速操作:

1 立即启用 Cloudflare「我正在受到攻击」模式

如果域名已接入 Cloudflare,这是最快的缓解手段,30 秒内生效:

  1. 登录 Cloudflare 控制台 → 选择对应域名
  2. 点击左侧「安全性」→「设置」
  3. 将「安全级别」切换为 「我正在受到攻击!」
  4. 所有访问者会看到 5 秒 JS 验证页面,自动化攻击脚本无法通过
✅ 此模式会过滤掉绝大多数 CC 攻击,对真实用户影响较小(等待 5 秒)。攻击停止后记得恢复为「高」或「中」安全级别。

2 用 iptables 临时封禁攻击 IP 段

# 封禁单个 IP
iptables -I INPUT -s 攻击IP -j DROP

# 封禁整个 IP 段(如 1.2.3.0/24)
iptables -I INPUT -s 1.2.3.0/24 -j DROP

# 批量封禁(从文件读取 IP 列表)
while read ip; do
  iptables -I INPUT -s $ip -j DROP
done < attack_ips.txt # 查看当前封禁规则 iptables -L INPUT -n --line-numbers | head -30 # 保存规则(重启后生效) iptables-save > /etc/iptables/rules.v4

3 限制 Nginx 连接数和请求速率

nano /etc/nginx/nginx.conf

http 块中添加限速配置:

# 定义限速区域(基于客户端 IP)
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

server {
    # 每个 IP 最多 10 个并发连接
    limit_conn conn_limit 10;

    # 每个 IP 每秒最多 10 个请求,突发最多 20 个
    limit_req zone=req_limit burst=20 nodelay;

    # 超出限制返回 429(请求过多)
    limit_req_status 429;
    limit_conn_status 429;
}
nginx -t && systemctl reload nginx

4 联系服务商启动黑洞路由(带宽层攻击时)

如果攻击流量超过服务器带宽上限(如服务器带宽 100Mbps 但攻击流量达到 10Gbps),服务器本身无能为力,需要服务商在上游网络层介入。

  • 黑洞路由(Null Route):服务商将你的 IP 流量全部丢弃,服务器完全不可访问但带宽不再被占用。适合攻击持续时间长的情况。
  • IP 切换:更换服务器 IP,将域名指向新 IP,让攻击流量打向废弃 IP。需要域名 TTL 较低才能快速生效。
  • 流量清洗:服务商将流量引导到清洗中心,过滤恶意流量后再转发给服务器。部分服务商提供免费基础清洗服务。
💡 联系后浪云:遭受大流量攻击时,可通过 Telegram 或工单联系后浪云技术支持,协助启动流量清洗或更换 IP。

5 切换到备用节点,保障业务连续性

如果主服务器已无法正常服务,立即将域名解析切换到备用节点(如 CDN 缓存页面或备用服务器):

# 临时将域名解析到 Cloudflare 的代理 IP
# 在 Cloudflare DNS 控制台开启小橙云(代理模式)
# 真实 IP 被隐藏,攻击者无法直接攻击服务器

# 将 TTL 设置为最低值(60 秒)提升切换速度
# 在 Cloudflare 或 DNSPod 控制台修改

四、主流防御方案对比与选型

防御方案防御能力价格适用场景推荐度
Cloudflare 免费版CC/L7 攻击,5Gbps 以内 L3/L4免费中小网站首选⭐⭐⭐⭐⭐
Cloudflare Pro更强的 WAF 规则,高级 Bot 防护$20/月有一定流量的商业站⭐⭐⭐⭐⭐
Nginx 限速CC 攻击(应用层)免费配合 Cloudflare 使用⭐⭐⭐⭐
Fail2Ban扫描、暴力破解免费SSH/Web 登录防护⭐⭐⭐⭐
高防 IP / 流量清洗T 级大流量攻击数百至数千元/月金融、游戏等高价值目标⭐⭐⭐
黑洞路由任何规模(但服务不可用)免费(服务商提供)攻击超过带宽上限的紧急处置⭐⭐⭐
推荐组合:Cloudflare 免费版 + Nginx 限速 + Fail2Ban,三层防护叠加,覆盖 90% 的中小型网站攻击场景,成本为零。

五、Cloudflare 免费防护配置全流程

1 将域名接入 Cloudflare

  1. 注册 Cloudflare 账号,点击「添加站点」输入你的域名
  2. 选择免费套餐,Cloudflare 会自动扫描现有 DNS 记录
  3. 确认 DNS 记录正确后,将域名的 NS 服务器改为 Cloudflare 提供的 NS 地址(在域名注册商处修改)
  4. 等待 NS 生效(通常 5–30 分钟),Cloudflare 控制台显示「有效」即成功

2 关键安全配置

配置项位置推荐设置作用
SSL/TLS 模式SSL/TLS → 概述完全(严格)强制 HTTPS,防止中间人攻击
安全级别安全性 → 设置平衡安全与用户体验
Bot Fight Mode安全性 → 机器人开启自动拦截已知恶意爬虫
Browser Integrity Check安全性 → 设置开启验证访问者有正常浏览器
Challenge Passage安全性 → 设置30 分钟通过验证后免挑战时间
Always Use HTTPSSSL/TLS → 边缘证书开启自动将 HTTP 跳转 HTTPS
小橙云(代理)DNS → 各 A 记录开启隐藏真实 IP,攻击者无法绕过 CF

3 创建自定义防火墙规则(免费版支持 5 条)

进入「安全性」→「WAF」→「防火墙规则」→「创建规则」:

规则名称匹配条件动作
封禁高风险国家国家/地区 不在 [CN, HK, TW, US, SG...]质询(JS 验证)
保护 wp-loginURI 路径 等于 /wp-login.php 且 不是已知机器人质询
封禁恶意 UA用户代理 包含 [zgrab, masscan, sqlmap]封锁
放行合法爬虫已知机器人 等于 true允许
限制 API 速率URI 路径 开头为 /api/ 且 速率超过 100/min质询

六、Nginx 层面的 CC 攻击防护配置

即使有 Cloudflare,Nginx 层面的限速也是必要的第二道防线(防止攻击者找到真实 IP 绕过 CF):

nano /etc/nginx/nginx.conf
http {
    # ── 限速区域定义 ────────────────────────────
    # 基于真实 IP(需配合 Cloudflare 的真实 IP 透传)
    limit_req_zone  $binary_remote_addr zone=global:20m  rate=20r/s;
    limit_req_zone  $binary_remote_addr zone=login:10m   rate=1r/s;
    limit_conn_zone $binary_remote_addr zone=perip:10m;

    # ── 连接超时优化(防 Slowloris 慢速攻击)───────
    client_body_timeout   10s;
    client_header_timeout 10s;
    keepalive_timeout     30s;
    send_timeout          10s;

    server {
        # 每 IP 最多 50 个并发连接
        limit_conn perip 50;

        # 全局每秒 20 个请求
        limit_req zone=global burst=50 nodelay;

        # 登录页面严格限速(每秒 1 次)
        location ~ ^/(wp-login|login|signin|admin) {
            limit_req zone=login burst=5 nodelay;
            limit_req_status 429;
        }

        # 配合 Cloudflare 获取真实客户端 IP
        set_real_ip_from 103.21.244.0/22;
        set_real_ip_from 103.22.200.0/22;
        set_real_ip_from 103.31.4.0/22;
        set_real_ip_from 104.16.0.0/13;
        set_real_ip_from 104.24.0.0/14;
        set_real_ip_from 108.162.192.0/18;
        set_real_ip_from 131.0.72.0/22;
        set_real_ip_from 141.101.64.0/18;
        set_real_ip_from 162.158.0.0/15;
        set_real_ip_from 172.64.0.0/13;
        set_real_ip_from 173.245.48.0/20;
        set_real_ip_from 188.114.96.0/20;
        set_real_ip_from 190.93.240.0/20;
        set_real_ip_from 197.234.240.0/22;
        set_real_ip_from 198.41.128.0/17;
        real_ip_header CF-Connecting-IP;
    }
}
nginx -t && systemctl reload nginx

七、事前预防:降低被攻击影响的 7 个措施

#措施作用难度
1域名接入 Cloudflare 并开启代理(隐藏真实 IP)攻击者无法找到服务器真实 IP
2配置 Nginx 限速(limit_req / limit_conn)限制单 IP 请求频率,削弱 CC 攻击
3安装 Fail2Ban 防护 SSH 和 Web 登录自动封禁暴力破解 IP
4开启页面静态缓存(WordPress + Redis/WP Rocket)减少动态请求,服务器抗压能力大幅提升
5设置服务器内存/CPU 过载告警攻击初期第一时间感知
6定期备份数据(本地 + 异地)即使服务器被打垮,数据不会丢失
7准备备用 IP 和快速切换预案攻击发生时快速恢复业务

八、常见问题解答(FAQ)

Q1:小网站也会被 DDoS 攻击吗?攻击者为什么要攻击我?

会。很多 DDoS 攻击并非针对特定目标,而是自动化脚本的随机扫描和攻击,小网站同样会中招。此外,竞争对手恶意攻击、勒索(支付比特币才停止攻击)、黑客练手等也是常见动机。任何有公网 IP 的服务器都面临被攻击的风险。

Q2:Cloudflare 免费版能防多大规模的 DDoS 攻击?

Cloudflare 免费版对 CC 攻击(HTTP Flood)防护能力非常强,理论上没有上限,因为攻击流量由 Cloudflare 的全球网络承担而非你的服务器。对于网络层攻击(UDP/SYN Flood),免费版可抵御约 5Gbps 以内的流量。超过此规模需要 Cloudflare Enterprise 或专业高防服务。

Q3:如何防止攻击者绕过 Cloudflare 直接攻击服务器 IP?

核心原则是不泄露真实 IP。具体措施:所有 DNS 记录开启 Cloudflare 代理(小橙云);更换过一次 IP 的历史记录会在各种数据库中留存,更换 IP 后检查是否还有老 IP 的 DNS 记录;Nginx 日志、SSL 证书历史、邮件头等都可能暴露真实 IP,需逐一排查;同时在服务器防火墙只放行来自 Cloudflare IP 段的流量。

Q4:被 DDoS 攻击期间,如何通过 VNC 控制台操作服务器?

即使服务器因攻击导致 SSH 无法连接,云平台的 VNC 控制台走的是独立的管理网络,不受 DDoS 影响,通常仍可正常使用。后浪云用户登录 my.idc.net,在服务器管理页面找到「VNC 控制台」即可访问。

Q5:后浪云香港服务器有 DDoS 防护能力吗?

后浪云香港服务器机房具备基础 DDoS 流量清洗能力,可抵御常规规模的攻击。对于需要更高防护级别的业务(如游戏、金融),建议在服务器前端接入 Cloudflare,并联系后浪云技术支持咨询定制高防方案。遭受攻击时可通过 Telegram 或工单 7×24 小时联系技术支持处置。

THE END