网站突然打不开,SSH 也连不上,面板里带宽曲线直接拉满成一条直线 —— 这种时候八成是被人打了。
DDoS 最难受的地方不是"被打"这件事本身,而是你在最需要操作服务器的时候,恰恰操作不了它。流量塞满带宽,SSH 连不上,面板也可能卡住。所以处置的第一原则是:先看清打的是哪一层、打的是 IP 还是域名,再决定是等它过去、换 IP,还是花钱买清洗。
这篇按真实处置顺序讲,不聊"网络安全很重要"这种废话。
流量暴涨的原因不止一种,先花两分钟排除掉不是攻击的情况。
看商家面板的流量图。 这是最关键的一步 —— 服务器被打的时候你本地可能连不上,但商家的监控一定是准的。正常的攻击流量会表现为一条几乎垂直的上涨曲线,短时间内冲到几十 Mbps 甚至几 Gbps,而你的业务量根本没有变化。
看攻击特征。 如果面板看不到,去 VNC 控制台(不走网络的那条路),敲:
# 总览:看 synrecv、TCP 连接状态分布
ss -s
# 实时看哪条连接在吃带宽
iftop -P -n
# 看网卡累计收发
vnStat -l # 实时带宽
cat /proc/net/dev
再抓 100 个包看是不是清一色 SYN:
tcpdump -i eth0 -nn -c 100 'tcp[tcpflags] & tcp-syn != 0'
如果这 100 个包里全是 SYN、源 IP 还遍地都是,SYN Flood 基本可以确定。
几种容易误判的情况:
| 现象 | 真实原因 | 该看哪篇 |
|---|---|---|
| 带宽没满,但请求数暴涨、CPU 打满 | CC 攻击(应用层),不是 DDoS | CC 攻击应急清单 |
| 带宽被压到很低但延迟高 | 商家限速或超售,不是攻击 | 被限速了怎么办 |
| 流量平缓但每天涨一点 | 被爬虫扫站 | 先加 rate limit |
| 带宽大量出站(不是入站) | 可能是服务器被入侵拿去做攻击源了 | 被入侵后的 24 小时 |
最后一条特别要提一句:如果出站流量异常高,你可能不是受害者,而是帮凶。 机器被入侵后装了 DDoS 木马去打别人,接着商家的投诉邮件就到了,再接着就是停机封号。方向搞反的话,越处理越糟。
DDoS 分两层,防护手段完全不同,混着买一定会踩坑。
| L3 / L4(网络层、传输层) | L7(应用层) | |
|---|---|---|
| 典型手法 | SYN Flood、UDP Flood、ICMP、DNS/NTP 反射放大 | HTTP Flood、CC、慢速攻击、暴力登录 |
| 特征 | 带宽被打满,连接数暴涨 | 带宽不高,但请求数/CPU 暴涨 |
| Cloudflare 免费版 | ❌ 基本无效 | ✅ 很有效 |
| 靠什么挡 | 机房清洗、高防 IP、黑洞 | WAF、限速、人机验证、缓存 |
| 影响范围 | 整台机器所有端口都不可用 | 通常只影响被攻击的网站 |
关键结论先说:Cloudflare 免费版是七层防护,不是三层防护。 它代理的是你的 HTTP/HTTPS 流量,对直接打到源站 IP 的 UDP Flood、SYN Flood 无能为力 —— 那些流量根本不经过 Cloudflare。
很多人被打之后的第一反应是"开 Cloudflare",结果发现一点用没有,就是因为被打的是源站 IP 的 L4 流量。
第 1 步:确认攻击目标(2 分钟)。
换 IP 有用还是没用,全看这一步。攻击者盯着的是域名还是IP?
- 如果他只拿到 IP(比如从扫描库里翻出来的),换个 IP 攻击就断了
- 如果他盯着域名,你换 IP 他会重新解析跟过来
判断办法:直接用一个没用过的 IP 试试,或者看攻击是不是在你换 IP 后 24 小时内重新开始。
第 2 步:把能摘的都摘掉(5 分钟)。
如果攻击集中在某个端口或某项服务,先把它停掉,让机器至少能 SSH 进去:
# 先把被打的服务停掉,保住管理通道
systemctl stop nginx
# 临时屏蔽某个明显的攻击源段(注意:对分布式攻击基本没用,别指望它)
iptables -I INPUT -s 1.2.3.0/24 -j DROP
# 打开 SYN Cookies,缓解 SYN Flood
sysctl -w net.ipv4.tcp_syncookies=1
说清楚一点:在主机上用 iptables 挡 DDoS 是没有意义的。攻击流量已经占满了你的带宽,包早就到了机房,你在主机上丢包并不能把带宽还回来。主机的规则只能用来做精细的 L7 限速,挡不住洪流。
第 3 步:联系商家(5 分钟)。
廉价年付机被打,商家的标准动作是黑洞(null route) —— 把你的 IP 路由到一个丢弃地址,所有流量直接扔掉。
这既是保护你(避免你的带宽被跑爆),也是保护同机房的其他客户。结果就是:你的机器还在跑,但外面一个包也进不来。
你需要从工单里问清楚三件事:
- 能不能加清洗(scrubbing),还是只能黑洞
- 换 IP 要不要钱、要多久(有些商家免费,有些收费,有些要等人工审)
- 攻击流量会不会算进你的流量包,超了会不会收费
第 4 步:判断要不要按量计费止血(立刻)。
如果你的机器是按流量计费的(大多数云厂商),被打是最贵的故障:攻击流量也是流量,账单会跟着攻击量一起涨。这种情况必须立刻做封顶策略,具体做法见按量计费防账单失控。
黑洞(RTBH,Remotely Triggered Black Hole)的思路很直接:既然挡不住,那就干脆不接。
- 触发条件:多数机房会在攻击超过某个阈值(比如 1Gbps / 10Gbps)或持续超过几分钟后自动黑洞,也有的是人工判断
- 技术表现:IP 还在,
ping不通,traceroute到机房就断了 - 恢复:攻击停了之后一般几分钟到几十分钟自动解封,也可以提工单申请提前解封
黑洞并不可耻,它是廉价机房的合理选择 —— 几十美元一年的机器,不可能给你配一套几十 G 的清洗集群。
但它也意味着:只要攻击持续,你就一直下线。 这时候真正的问题变成了"你的业务能停多久"。如果答案是"一分钟都不行",那你需要的不是技术方案,而是花钱买防护。
把 Cloudflare 用对,它是免费方案里最有用的一环;用错,就是白忙。
它能做的:
- L7 攻击:开启
Under Attack Mode(I'm Under Attack),对每个访客出人机验证 - 缓存静态资源,让请求根本打不到你的源站
- WAF 规则、IP/地区封禁、速率限制(免费版额度有限)
- 把源站 IP 从 DNS 记录里藏起来(前提是所有记录都开了橙云代理)
它做不到的:
- 挡住直接打源站 IP 的 L3/L4 流量
- 代理非 HTTP 服务(游戏、UDP、自建协议)—— 那需要付费的 Spectrum
- 保护你没走代理的子域名(邮件、面板、API 直连域名)
所以正确姿势是两步,少一步都白搭:
第一步,让所有记录都走代理。
# 查一遍还有哪些子域名暴露着真实 IP
dig +short www.example.com
dig +short mail.example.com
dig +short panel.example.com
任何一个返回你服务器的真实 IP,都是攻击的入口。特别是 mail.、dev.、direct.、cpanel. 这类名字。
第二步,让源站只接受 Cloudflare 的回源。
在服务器上只放行 Cloudflare 的 IP 段(列表在 https://www.cloudflare.com/ips-v4),其他来源的连接全部丢掉。这样即使别人知道你的 IP,直接打过来也进不去。
# 示例:只放行 Cloudflare 段访问 80/443
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
iptables -A INPUT -p tcp -s $ip -m multiport --dports 80,443 -j ACCEPT
done
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP
这套组合之外还有个更彻底的方案:让源站根本不监听公网端口,用 Cloudflare Tunnel 把服务反着连出去。攻击者连目标 IP 都不存在,自然也没什么可打的。做法见用 Cloudflare Tunnel 隐藏源站 IP。
这一步很多人跳过,结果就是"换了 IP,三天后又被打"。攻击者找源站 IP 的路子比你想的多:
| 泄露途径 | 怎么查 |
|---|---|
| DNS 历史记录(换 CDN 之前的 A 记录) | 第三方 DNS 历史库查一下你域名 |
| 证书透明度日志里的子域名 | 搜 crt.sh 上的你的域名 |
| 邮件头(自建邮件服务器发信) | 收一封自己发的邮件看 Received 头 |
| 没走代理的端口(面板、数据库、游戏服) | 全端口扫一遍自己 |
| 第三方扫描数据库 | Shodan、Censys 搜自己的 IP 段 |
| 之前被入侵时留下的后门 | 查 crontab、systemd、authorized_keys |
对策只有一个:换 IP 的时候,顺手把泄露口全堵上。 否则换了也是白换。
| 情况 | 建议 |
|---|---|
| 攻击只针对 IP,业务没被针对 | 换 IP,成本最低 |
| 攻击盯着域名跟过来 | 换 IP 没用,上防护或换到高防机房 |
| 商家只黑洞、不给清洗,且你业务不能停 | 换商家,且这次要看防护能力 |
| 是按量计费的云,被打一次账单几千刀 | 先封顶止血,再考虑换到固定带宽的机器 |
| 一天被打好几次,已经影响客户 | 别再自己扛,直接买清洗 |
换商家的动作要快但不能乱:先在新机器上把服务跑起来,DNS 切成低 TTL,确认没问题再停掉老的。 完整流程在迁移指南里。
DDoS 防护的价格跨度极大,先搞清楚市面上有哪几档:
第一档:机房内置清洗(性价比最高)
一些机房在链路上直接带了硬件清洗集群,套餐里就含几十到几百 G 的防护额度。比如主打高防的 Raksmart,VPS 产品线本身就带防护档位(亚太节点从 200G 起步,北美节点更高),不需要你额外架一套东西。
这类方案的优点是便宜、省事、不用改架构;缺点是共享清洗集群,遇到超大流量(T 级)时可能出现资源争抢,稳定性不如独享方案。对日访问量几万以内的站点来说,完全够用。
第二档:独立高防 IP / 清洗服务
防护力度更强、可以自定义策略,价格也上去了,通常是按月按防护带宽计费。适合真被打出损失的业务。
第三档:便宜年付机自带的"防护"
说实话,Racknerd、CloudCone 这类年付十几二十美元的机器,基本不含 DDoS 防护。它们的价值在于便宜、稳定、随时能再开一台 —— 被打的时候把它们当一次性资源用,部署好备份,IP 被打废了直接再来一台,成本比买防护低得多。
这也是个被忽略的思路:如果你的业务能被换 IP 解决,用"多台便宜机 + 快速切换"扛过去,比买高防便宜得多。
- 源站 IP 彻底藏起来 —— 全站走代理或 Tunnel,删掉历史 DNS 记录
- 源站只放行回源 IP —— 防火墙层面做,不能只在 Nginx 里做
- 关掉所有不需要的端口 —— 数据库、面板、Docker API 一律不暴露
- 开 SYN Cookies 和连接数上限 —— 缓解小规模洪水的第一道缓冲
- 加上限速和人机验证 —— 应对 L7,见Nginx 安全加固
- 做流量异常告警 —— 别等客户打电话才知道网站挂了,见流量监控和超额预警
- 准备好迁移预案 —— 机器、DNS、备份、部署脚本都能在半小时内切走
被打了商家会封我的号吗? 一般不封,但会黑洞。真正会被封的是出站攻击 —— 你的机器去打别人。所以确认一下流量方向,出站异常要按入侵处理。
Cloudflare 免费版够用吗? 挡 CC 和 L7 够用,挡打源站 IP 的 L4 洪流不够。免费版的价值主要在于"别让源站 IP 暴露",而不是"替你扛流量"。
换 IP 要花钱吗? 各家不同,有的免费(尤其是第一次),有的收费。提工单问清楚,一次问明白,别来回磨。沟通模板看工单该怎么提。
攻击流量算我的流量包吗? 这是最容易被忽略的成本。很多商家会算,被打一次流量包直接跑穿。购买前先确认超额怎么计费,也可以看出站流量为什么贵复习一下计费逻辑。
能找到攻击者吗? 基本不能。反射放大、僵尸网络、境外跳板,溯源成本远超收益。把精力放在"被打的时候业务能多快恢复"上,回报率高得多。
处置 DDoS 的顺序是:先看清打哪一层 → 再判断换 IP 有没有用 → 最后才决定要不要花钱买防护。
两条最实用的结论:Cloudflare 免费版挡不住打源站 IP 的流量洪流,别把希望寄托在它身上;能靠换 IP 解决的问题,不要用买防护解决,前者几乎不要钱。
如果你的业务已经重要到"不能停",那就在选商家的时候把防护能力当成硬指标,而不是等被打的那天再临时找方案。
延伸阅读:
