0. 写在前面:为什么你需要“神器”而非“常用命令
大家好,老杨是老杨,干货满满的老杨 欢迎点击原文链接或直接访问vps.top365app.com,来看老杨的全球vps信息还有各种咱们用得着的信息实时收集分析项目.
帮老杨点赞、转发、在看以及打开小星标哦
攒今世之功德,修来世之福报
遇到 DDoS 的感觉很单刀直入:流量像水闸被打开。 但老杨也见过把核心服务在 5 分钟内拉回来的场景。关键在于准备和门控脚本。 今天就来聊聊遇到大规模DDoS 后该如何做
先把恶意流量挡在边缘。 再保护回源。 最后按灰度把业务放回。 先做 X,然后做 Y。 这样可以帮你在最短时间内保证用户可用。
下面是老杨实际用过的 6 步流程。目标:300 秒内恢复关键接口。
观察带宽、连接数和 SYN 状态。
$ ss -s
Total: 123456 (kernel 78910)
TCP: 100000 (estab 8000, synrecv 12000, timewait 500)
UDP: 2300
$ 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 突增,说明是流量型攻击。
我会立刻把事件标为高优先级并开始下一步。
如果你用阿里云、腾讯云或自建 CDN,先在控制台切到清洗/严格模式。 若有 API,运行预制脚本。
API 调用(不同厂商接口不同,按厂商文档替换):
$ curl -X POST "https://cdn-api.example.com/domains/api.example.com/enable_scrub" \
-H "Authorization: Bearer $TOKEN" -d '{"mode":"scrub"}'
输出
{"status":"ok","message":"scrubbing enabled for api.example.com"}
边缘清洗能在分钟级把大部分攻击丢掉。 没有边缘清洗,就切到下一步更激进的本地防护。
先用 ipset
做黑名单集合,再让 iptables
丢弃集合里的流量。
这样规则非常高效,能承受成千上万条黑名单。
$ 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
输出
$ 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 或单连接耗尽资源。
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:
$ 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
# 无输出表示重载成功
若攻击超过 CDN/自建清洗能力,就联系 ISP 或云清洗方。 常见做法是请求导流到清洗池或启用 RTBH(Remote Triggered Black Hole)。
我把联络信息和标准文本放在 runbook 里,复制粘贴能节约时间。
我们正在遭受 DDoS,目标 IP:A.B.C.D,开始时间:2025-08-XX 10:23,立即帮我们启用 RTBH 或导向清洗池,联系人:张三 +8613xxxx
如果必须临时黑洞路由,本机用示意命令(风险高,慎用):
$ sudo ip route add blackhole 203.0.113.0/24
输出
$ ip route show | grep 203.0.113.0
blackhole 203.0.113.0/24 proto static
警告:黑洞会丢掉所有到该网段的合法流量。只在不得已时用。
把 origin 限为只接受 CDN 回源的 IP。 这样即便攻击打到 origin,也被拒绝掉。
Nginx 白名单示例:
server {
allow 203.0.113.0/24; # CDN 回源段示意
deny all;
location / { proxy_pass http://backend; }
}
重载并验证:
$ 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 暂存溢出:
$ 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 计数:
$ sudo conntrack -C
124567
如果 conntrack 快满,可短期清表(谨慎,可能影响合法会话)。
确认健康接口返回 200。再逐步灰度放流。
$ curl -sS -o /dev/null -w "%{http_code}\n" https://api.example.com/health
200
测试下单接口:
$ 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
把常用动作打包。值班时一键运行。下例为示例,需在测试环境验证后再用。
#!/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
执行反馈
$ 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、回源段写成可配置文件。
老杨每次处理完都往工单里贴证据。这样和业务、法务沟通时有凭据。
老杨把经验压缩成这些步骤。各位小伙伴加油吧!
这里老杨先声明一下,日常生活中大家都叫老杨波哥,跟辈分没关系,主要是岁数大了.就一个代称而已. 老杨的00后小同事老杨喊都是带哥的.张哥,李哥的. 但是这个称呼呀,在线下参加一些活动时.金主爸爸也这么叫就显的不太合适. 比如上次某集团策划总监,公司开大会来一句:“今个咱高兴!有请IT运维技术圈的波哥讲两句“ 这个氛围配这个称呼在互联网这行来讲就有点对不齐! 每次遇到这个情况老杨就想这么接话: “遇到各位是缘分,承蒙厚爱,啥也别说了,都在酒里了.老杨干了,你们随意!” 所以以后咱们改叫老杨,即市井又低调.还挺亲切,老杨觉得挺好.
运维X档案系列文章:
企业级 Kubernetes 集群安全加固全攻略( 附带一键检查脚本)
看完别走.修行在于点赞、转发、在看.攒今世之功德,修来世之福报
点击阅读原文或打开地址实时收集分析全球vps的项目 vps.top365app.com
老杨AI的号: 98dev