0. 写在前面:为什么你需要“神器”而非“常用命令
大家好,老杨是老杨,干货满满的老杨
欢迎点击原文链接或直接访问vps.top365app.com,来看老杨的全球vps信息还有各种咱们用得着的信息实时收集分析项目.
帮老杨点赞、转发、在看以及打开小星标哦
攒今世之功德,修来世之福报
正文遇到 DDoS 的感觉很单刀直入:流量像水闸被打开。
但老杨也见过把核心服务在 5 分钟内拉回来的场景。关键在于准备和门控脚本。
今天就来聊聊遇到大规模DDoS 后该如何做
整体思路先把恶意流量挡在边缘。
再保护回源。
最后按灰度把业务放回。
先做 X,然后做 Y。
这样可以帮你在最短时间内保证用户可用。
5 分钟操作流程下面是老杨实际用过的 6 步流程。目标:300 秒内恢复关键接口。
0:00–0:30 确认攻击并定位指标异常观察带宽、连接数和 SYN 状态。
代码语言:javascript复制$ ss -s
Total: 123456 (kernel 78910)
TCP: 100000 (estab 8000, synrecv 12000, timewait 500)
UDP: 2300代码语言:javascript复制$ cat /proc/net/dev | grep eth0
eth0: 1234567890 0 0 0 0 0 0 0 9876543210 0 0 0 0 0 0 0输出说明:synrecv 或者网口 rx 突增,说明是流量型攻击。
我会立刻把事件标为高优先级并开始下一步。
0:30–1:30 启动边缘清洗 / CDN 严格模式如果你用阿里云、腾讯云或自建 CDN,先在控制台切到清洗/严格模式。
若有 API,运行预制脚本。
API 调用(不同厂商接口不同,按厂商文档替换):
代码语言:javascript复制$ curl -X POST "https://cdn-api.example.com/domains/api.example.com/enable_scrub" \
-H "Authorization: Bearer $TOKEN" -d '{"mode":"scrub"}'输出
代码语言:javascript复制{"status":"ok","message":"scrubbing enabled for api.example.com"}边缘清洗能在分钟级把大部分攻击丢掉。
没有边缘清洗,就切到下一步更激进的本地防护。
1:30–2:30 在边界机做快速封堵与速率限制(ipset + iptables + nginx)先用 ipset 做黑名单集合,再让 iptables 丢弃集合里的流量。
这样规则非常高效,能承受成千上万条黑名单。
代码语言:javascript复制$ sudo ipset create ddos-blacklist hash:ip family inet
$ sudo ipset add ddos-blacklist 203.0.113.45
$ sudo ipset add ddos-blacklist 198.51.100.23
$ sudo iptables -I INPUT -m set --match-set ddos-blacklist src -j DROP输出
代码语言:javascript复制$ sudo ipset list ddos-blacklist
Name: ddos-blacklist
Type: hash:ip
Members:
203.0.113.45
198.51.100.23
$ sudo iptables -L INPUT -n --line-numbers | grep ddos-blacklist
1 DROP all -- 0.0.0.0/0 0.0.0.0/0 match-set ddos-blacklist src同时在 Nginx 层打开速率限制,防止单 IP 或单连接耗尽资源。
代码语言:javascript复制http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
proxy_pass http://backend;
}
}
}重载 Nginx:
代码语言:javascript复制$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo nginx -s reload
# 无输出表示重载成功2:30–3:30 请求上游清洗或 BGP 黑洞(当边缘不足时)若攻击超过 CDN/自建清洗能力,就联系 ISP 或云清洗方。
常见做法是请求导流到清洗池或启用 RTBH(Remote Triggered Black Hole)。
我把联络信息和标准文本放在 runbook 里,复制粘贴能节约时间。
代码语言:javascript复制我们正在遭受 DDoS,目标 IP:A.B.C.D,开始时间:2025-08-XX 10:23,立即帮我们启用 RTBH 或导向清洗池,联系人:张三 +8613xxxx如果必须临时黑洞路由,本机用示意命令(风险高,慎用):
代码语言:javascript复制$ sudo ip route add blackhole 203.0.113.0/24输出
代码语言:javascript复制$ ip route show | grep 203.0.113.0
blackhole 203.0.113.0/24 proto static警告:黑洞会丢掉所有到该网段的合法流量。只在不得已时用。
3:30–4:30 保护 origin 与调整内核阈值把 origin 限为只接受 CDN 回源的 IP。
这样即便攻击打到 origin,也被拒绝掉。
Nginx 白名单示例:
代码语言:javascript复制server {
allow 203.0.113.0/24; # CDN 回源段示意
deny all;
location / { proxy_pass http://backend; }
}重载并验证:
代码语言:javascript复制$ sudo nginx -t && sudo nginx -s reload
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful同时放宽内核队列,防止 SYN 暂存溢出:
代码语言:javascript复制$ sudo sysctl -w net.core.somaxconn=4096
net.core.somaxconn = 4096
$ sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.tcp_max_syn_backlog = 4096检查 conntrack 计数:
代码语言:javascript复制$ sudo conntrack -C
124567如果 conntrack 快满,可短期清表(谨慎,可能影响合法会话)。
4:30–5:00 验证关键接口并逐步放流确认健康接口返回 200。再逐步灰度放流。
代码语言:javascript复制$ curl -sS -o /dev/null -w "%{http_code}\n" https://api.example.com/health
200测试下单接口:
代码语言:javascript复制$ curl -sS -X POST https://api.example.com/order -d '{"sku":"1001","qty":1}' -H "Content-Type: application/json" -w "\n%{http_code}\n"
{"orderId":"ord-20250810-001","status":"accepted"}
201结果正常后,按 5%、10%、30% 的步进放流。每步观测 1–2 分钟。
薅就一个字硅基流动是一个非常不错的国内AI调度平台.老杨近期token消耗量非常大,好多业务和项目在建,部分token就是用这里的模型.还是非常流畅的.想玩玩的可以用老杨的链接注册一个试试.
用老杨的链接注册就送2000万token.心动不如行动,跟老杨一起玩起来.自己独立注册的没有哈
https://cloud.siliconflow.cn/i/03Nnp0e8
图片一键应急脚本示例把常用动作打包。值班时一键运行。下例为示例,需在测试环境验证后再用。
代码语言:javascript复制#!/usr/bin/env bash
set -euo pipefail
echo"[1/4] reload nginx limits"
sudo nginx -t && sudo nginx -s reload
echo"[2/4] update ipset"
sudo ipset create ddos-blacklist hash:ip -exist
if [[ -f /opt/ddos/blacklist.txt ]]; then
whileread -r ip; dosudo ipset add ddos-blacklist "$ip" -exist; done < /opt/ddos/blacklist.txt
fi
sudo iptables -C INPUT -m set --match-set ddos-blacklist src -j DROP 2>/dev/null || \
sudo iptables -I INPUT -m set --match-set ddos-blacklist src -j DROP
echo"[3/4] request CDN scrubbing (pseudo API)"
curl -s -X POST "https://cdn-api.example.com/domains/api.example.com/enable_scrub" \
-H "Authorization: Bearer $TOKEN" -d '{"mode":"scrub"}' || true
echo"[4/4] check health"
curl -sS -o /dev/null -w "health_code:%{http_code}\n" https://api.example.com/health执行反馈
代码语言:javascript复制$ sudo ./ddos_mitigate.sh
[1/4] reload nginx limits
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[2/4] update ipset
[3/4] request CDN scrubbing (pseudo API)
{"status":"ok","message":"scrubbing enabled"}
[4/4] check health
health_code:200脚本要和你的环境绑定。把各家 CDN 的 API、token、回源段写成可配置文件。
恢复后必须做的事1. 保存攻击样本:pcap、nginx accesslogs、CDN 日志。2. 与 CDN / ISP 做事件回溯,确认流量特征与拦截时序。3. 把高频恶意 IP 加入长期策略或自动化模型。4. 做无责复盘并生成行动项(谁、做什么、多久完成)。5. 根据需要提升长期清洗带宽或启用 Anycast。老杨每次处理完都往工单里贴证据。这样和业务、法务沟通时有凭据。
Q&A• 单机能顶住 100 Gbps 吗?
不能。单机不是防御层。边缘清洗和 ISP 才能处理这种规模。• 黑洞会造成误伤吗?
会。黑洞会丢弃该网段的所有合法流量。只在万不得已时使用。• CDN 一定能挡住吗?
不能保证。CDN 有能力分散和清洗流量,但前提是你已把域名接入并测试过“清洗模式”。• 如何保证 5 分钟成功?
把操作脚本化并演练。把联系人信息和控制台路径写在单页上。事后再优化流程。老杨把经验压缩成这些步骤。各位小伙伴加油吧!
老杨时间这里老杨先声明一下,日常生活中大家都叫老杨波哥,跟辈分没关系,主要是岁数大了.就一个代称而已.
老杨的00后小同事老杨喊都是带哥的.张哥,李哥的.
但是这个称呼呀,在线下参加一些活动时.金主爸爸也这么叫就显的不太合适.
比如上次某集团策划总监,公司开大会来一句:“今个咱高兴!有请IT运维技术圈的波哥讲两句“
这个氛围配这个称呼在互联网这行来讲就有点对不齐!
每次遇到这个情况老杨就想这么接话: “遇到各位是缘分,承蒙厚爱,啥也别说了,都在酒里了.老杨干了,你们随意!”
所以以后咱们改叫老杨,即市井又低调.还挺亲切,老杨觉得挺好.
运维X档案系列文章:
从告警到CTO:一个P0故障的11小时生死时速
企业级 Kubernetes 集群安全加固全攻略( 附带一键检查脚本)
看完别走.修行在于点赞、转发、在看.攒今世之功德,修来世之福报
点击阅读原文或打开地址实时收集分析全球vps的项目
vps.top365app.com
老杨AI的号: 98dev