网站突然打不开、带宽被打满,第一反应往往是”我是不是被 DDoS 了”。本文用问答形式梳理被 DDoS 攻击后的完整应急流程:怎么确认攻击类型、第一小时做什么、服务器层面能顶多久、什么时候该切高防,以及事后加固清单。
Q:怎么确认是真的被 DDoS 了,而不是业务流量高峰?
业务高峰和 DDoS 的区别主要看三点:流量是否远超历史峰值、来源 IP 是否异常分散或异常集中、请求是否有业务意义。登录服务器快速确认:
# 查看 TCP 连接状态分布
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn
# 查看实时带宽和连接来源
iftop -nNP
如果 SYN_RECV 数量上千、带宽打满且来源 IP 毫无业务规律,基本可以确认是 DDoS。同时联系云服务商或机房确认入口流量,他们看到的流量比服务器上更直观。
Q:确认被攻击后,第一个小时应该做什么?
- 确认攻击类型:流量型(UDP Flood、SYN Flood)还是应用型(CC),对策完全不同;
- 通知上游:第一时间联系云厂商或机房,请求开启流量清洗或黑洞牵引;
- 切换防护:已购高防 IP / 高防 CDN 的,立即把解析切到高防节点;
- 留存证据:导出流量截图、日志片段,方便事后申诉和追责。
顺序不要乱:先保住”能访问”,再排查”为什么被打”。
Q:SYN Flood 在服务器上能临时缓解吗?
可以,开启 SYN Cookie 让内核不等待半连接确认:
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.tcp_synack_retries=2
tcp_syncookies=1 是核心开关,tcp_max_syn_backlog 增大半连接队列,tcp_synack_retries 减少重试次数、加快释放。但要说清楚:这些参数只能缓解小流量攻击,攻击带宽一旦超过服务器出口(比如 1Gbps 以上),服务器层面任何调优都没用,必须在上游清洗。
Q:UDP 反射放大攻击怎么处理?
UDP 放大攻击(DNS、NTP、Memcached 反射)的特点是源端口固定、流量巨大且和业务无关。处理方式:关闭服务器上所有不必要的 UDP 服务,并联系上游运营商在边界做 ACL 过滤。这类攻击靠服务器自身完全无法抵御,只能靠上游清洗。
Q:什么时候该上高防 IP 或高防 CDN?
经验阈值:攻击带宽超过 100Mbps、单次持续超过 30 分钟、或短期内反复出现,就该考虑高防了。两者的选择:
- 高防 IP:源站隐藏在高防后面,适合端口类业务、游戏和 App 服务端;
- 高防 CDN:适合网站类业务,清洗和加速兼顾,配置简单;
- 预算有限时,平时用普通 CDN,被攻击时切换高防线路,也是常见的折中做法。
Q:换 IP 能不能解决问题?
多数情况不能。攻击者通常通过域名解析定位目标,换 IP 后几小时到一天内就会被重新扫到。正确做法是换 IP 和隐藏源站同时做:源站防火墙只允许高防节点回源访问(白名单固定回源 IP 段),域名一律走高防/CDN 解析,DNS 历史记录里泄露的旧 IP 也要一并处理。
Q:事后要做哪些加固?
- 源站隐藏:源站防火墙只放行高防/CDN 的回源网段;
- 监控告警:带宽、连接数设置阈值告警,攻击开始 5 分钟内就能知道;
- 应急预案:写清切换高防的步骤,DNS TTL 提前调低到 300 秒以内;
- 能力预置:高防服务提前接入并测试,不要等被打才临时开通。
DDoS 应对的核心思路是”流量问题在流量层面解决”,服务器和应用层的优化只是辅助。预案做得越细,实战损失越小。