13 10 月 2026

DDoS(分布式拒绝服务)是用海量流量把你的带宽或资源耗尽,让正常用户访问不了。它和 CC 的区别是:DDoS 靠流量规模,CC 靠请求精巧。

这篇讲 DDoS 的常见类型、怎么判断自己正在被打、能做什么防护。

抗 DDoS 很大程度上依赖服务商的网络能力。财富云计算 提供云服务器与网络防护;把源站放在 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上)后面并配合高防/CDN,能显著降低直接被打的风险。

一、DDoS 的几种类型

按攻击层次分

层次类型目标典型规模
网络层(L3/L4)SYN Flood、UDP Flood、ICMP Flood带宽、连接表几十 Gbps 起
应用层(L7)CC、HTTP Flood、慢速攻击CPU、内存、数据库请求数计
放大攻击DNS/NTP/Memcached 反射带宽可放大几十倍
混合多种组合全面—

常见手法

1)SYN Flood

发送海量 TCP 半连接请求,占满服务器的连接队列,正常连接进不来。

# 查看是否有大量 SYN_RECV
ss -ant | awk '{print $1}' | sort | uniq -c

2)UDP Flood

发送大量 UDP 包,耗尽带宽和处理能力。游戏服务器(UDP 端口)常被打这个。

3)反射放大攻击

攻击者伪造你的 IP 向开放服务(DNS、NTP、Memcached)发请求,响应会放大几倍到几万倍后打到你这里。

  • DNS 放大:约 50 倍
  • NTP 放大:约 200 倍
  • Memcached 放大:可达 5 万倍(所以 Memcached 绝不能对外)

4)HTTP Flood / CC

大量看似正常的 HTTP 请求,专门消耗应用资源。详见《网站被 CC 攻击怎么办》。

5)慢速攻击(Slowloris)

用极慢的速度发送请求头,占住连接不放,耗尽连接池。


二、怎么判断自己被打 DDoS 了

典型现象

现象判断
带宽瞬间跑满流量型攻击
服务器 CPU 不高但网络卡死带宽被打满
大量 SYN_RECV 连接SYN Flood
某个 UDP 端口流量异常UDP Flood(游戏服常见)
网站完全打不开但服务器能 SSH(走内网)公网带宽被堵
云控制台流量图垂直飙升最直观

快速确认

# ① 看带宽
iftop -i eth0
sar -n DEV 1

# ② 看连接状态
ss -s
ss -ant | awk '{print $1}' | sort | uniq -c

# ③ 看流量来源
iftop -i eth0 -n -P
# 按来源 IP 排序

# ④ 统计连接数最多的 IP
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20

# ⑤ 看 CPU 和内存(区分是流量型还是资源型)
top

关键区分:

  • 带宽满 + CPU 不高 → 流量型 DDoS
  • 带宽没满 + CPU/内存爆 → CC / 应用层攻击

云控制台

多数云厂商提供流量监控图,能看到流量突增的精确时间和规模,是最直接的证据。


三、个人能做的防护(系统层)

1)内核参数加固(防 SYN Flood)

nano /etc/sysctl.conf
# 开启 SYN Cookie(最重要)
net.ipv4.tcp_syncookies = 1

# 增大 SYN 队列
net.ipv4.tcp_max_syn_backlog = 8192

# 减少 SYN+ACK 重试次数
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

# 开启 TIME_WAIT 复用
net.ipv4.tcp_tw_reuse = 1

# 增大文件句柄
fs.file-max = 1000000

# 增大连接跟踪表(有防火墙时重要)
net.netfilter.nf_conntrack_max = 1000000

# 缩短 FIN 超时
net.ipv4.tcp_fin_timeout = 15

# 防 IP 欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 不响应 ICMP 广播
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 忽略 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
sysctl -p

2)iptables 限速(缓解,不能根治)

# 限制单 IP 的 SYN 速率
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# 限制单 IP 并发连接数
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j DROP

# 限制 ICMP
iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp -j DROP

# 限制 UDP(游戏服慎用,会误伤)
iptables -A INPUT -p udp -m limit --limit 100/s -j ACCEPT

3)Nginx 层防护(防慢速攻击和 CC)

# 超时设置(防慢速攻击)
client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 10s;
keepalive_timeout 30s;
client_max_body_size 10m;

# 限制连接频率
limit_conn_zone $binary_remote_addr zone=perconn:10m;
limit_conn perconn 20;

limit_req_zone $binary_remote_addr zone=perip:10m rate=20r/s;
limit_req zone=perip burst=30 nodelay;

4)关闭不必要的服务

ss -tulnp
# 关掉没用的端口,减少被利用的面

特别是:

  • Memcached 不要监听 0.0.0.0(会被用于放大攻击)
  • DNS 服务器不要开放递归查询
  • NTP 服务限制访问
# 检查自己有没有成为"帮凶"
ss -tuln | grep -E "0.0.0.0:(53|11211|123)"

四、真正有效的防护(架构层)

说实话,系统层的防护对付真正的流量型 DDoS 基本没用——几十 G 的流量到你网卡时,服务器已经瘫了。有效方案在架构层:

1)高防 IP / 高防 CDN(最有效)

用户 → 高防节点(清洗流量) → 源站

攻击流量在服务商的清洗中心就被过滤掉,只有正常流量到达你的服务器。

做法:

  1. 购买高防服务
  2. 把域名解析指向高防 IP(或 CNAME)
  3. 源站 IP 必须隐藏(防火墙只放行高防节点的 IP 段)

2)CDN 隐藏源站

用户 → CDN 边缘节点 → 源站

攻击者只能打到 CDN 节点(CDN 厂商有强大的带宽和清洗能力),打不到你的源站。

关键配置:

# 防火墙只允许 CDN 的 IP 段访问
# 各 CDN 厂商会公布 IP 段
# 或者用 Nginx 限制
allow CDN网段;
deny all;

验证源站是否隐藏:

# 从外网直接 ping 源站域名,看是否解析到 CDN
dig example.com +short

# 检查是否有历史解析记录暴露了源站(DNS 历史库)
# 比如 securitytrails、dnsdb 等可以查到旧记录
⚠️ 如果源站 IP 泄露(比如曾经直接解析过、或者邮件服务器暴露),防护就失效了。这种情况建议直接换 IP。

3)分布式部署 + 负载均衡

多台服务器在不同地区/运营商,攻击难以全部打瘫。

4)弹性扩容

云环境下自动扩容,攻击流量大了就加机器(但成本会很高,只适合短时攻击)。

5)游戏服务器的特殊防护

游戏服多走 UDP,容易成为目标:

  • 用支持 UDP 防护的高防
  • 隐藏真实 IP(用跳板/隧道)
  • 限制单 IP 连接数
  • 选择有游戏防护经验的服务商

五、被攻击时的应急流程

① 确认:看云控制台流量图,确认是攻击而非正常高峰
   ↓
② 报告:联系服务商,看是否有免费的基础防护可开启
   ↓
③ 缓解:
   - 开启 CDN / 高防(如果已有,确认已生效)
   - 系统层限流(iptables / Nginx)
   - 临时封禁明显的攻击 IP 段
   ↓
④ 降级:
   - 关闭非核心功能(搜索、评论、注册)
   - 静态化关键页面
   - 必要时临时关闭站点保住其他服务
   ↓
⑤ 防护:
   - 长期方案:高防 / CDN + 隐藏源站
   - 优化架构,减少单点
   ↓
⑥ 复盘:
   - 分析攻击类型、规模、时间
   - 完善预案

六、预防胜于治疗

上线前

  • [ ] 源站 IP 不直接暴露(用 CDN / 高防)
  • [ ] 防火墙只放行必要端口
  • [ ] Memcached、DNS、NTP 不对公网开放
  • [ ] 系统内核参数已加固
  • [ ] Nginx 层限流已配置
  • [ ] 有监控告警(流量突增)
  • [ ] 了解服务商提供的防护能力和开启方式

日常

  • [ ] 定期检查端口暴露情况
  • [ ] 关注漏洞公告(组件被利用可用于发起攻击)
  • [ ] 备份完整,最坏情况能快速重建
  • [ ] 准备应急预案文档(被打了找谁、做什么)

七、常见误区

误区现实
"我装了防火墙就不怕 DDoS"防火墙挡不住大流量,流量到网卡时已经晚了
"加带宽就能扛"攻击流量可以是你带宽的几十倍,成本扛不住
"封 IP 就行"分布式攻击有几万十几万个 IP,封不过来
"小站不会被攻击"自动化扫描不分大小,勒索型 DDoS 专挑小站
"重启服务器能解决"攻击还在,重启后马上又被打
"交赎金就停"不保证停,且会被反复勒索

正确认知:DDoS 防护本质上是资源和带宽的比拼,个人站长能做的是"不让自己成为直接目标"(隐藏源站 + CDN),并依靠服务商的防护能力。


八、成本考量

方案成本防护能力
系统层加固免费只防小规模
Nginx 限流免费只防小规模 CC
CDN(带基础防护)低~中防中小规模
高防 IP高防大规模
高防 CDN中~高防大规模 + 加速
云厂商 DDoS 基础防护通常免费视厂商而定(有几 G 到几十 G 不等)

建议:

  • 小站:CDN(隐藏源站)+ 云厂商基础防护,成本可控
  • 有商业价值的业务:高防 CDN
  • 游戏服:选带游戏防护的服务商

先问清楚服务商提供多少免费防护额度,很多云厂商有免费的基础 DDoS 防护(比如 5G 以内),超出才需要买高防。


九、相关法律规定

重要提示:发起 DDoS 攻击是违法犯罪行为。在中国,《刑法》第 285、286 条明确规定了破坏计算机信息系统罪,可判处有期徒刑。即便是"压力测试",未经授权对他人系统发起攻击同样违法。

只对自己拥有/授权的系统做压测,且要控制规模避免影响服务商网络。


抗 DDoS 靠的是网络层面的能力,选服务商时要问清楚防护额度。财富云计算 提供云服务器与网络防护能力;架构上建议把源站放在 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上)之后,通过 CDN 或映射对外暴露,减少被直接攻击的面,同时降低成本。

相关阅读:

  • 《网站被 CC 攻击怎么办》
  • 《Linux 防火墙配置:ufw / firewalld / iptables》
  • 《服务器安全基线检查清单》
  • 《Web 日志分析实战》
延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:Web 日志分析实战:从访问日志里看出攻击、瓶颈和用户行为
  2. 下一篇:开源程序部署后的安全检查:WordPress、面板、Docker 镜像的风险
发表评论 2

取消回复