Files
jiu/docs/runbooks/ddos-response.html
T
wangjia 4966892030 docs: DDoS/爬取洪峰应急 runbook + 安全三件套 plan 阅读版(todo #1)
拍板:不预购高防/CDN,接受极端容量攻击黑洞期风险;应急走 runbook
(判定→CC 处置→高防/CDN 切换→黑洞预案,DNS TTL 平时保持 ≤600s)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 10:42:23 +08:00

106 lines
8.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DDoS / 爬取洪峰应急 Runbook — 酒库管理系统</title>
<style>
:root{
--primary:#2563AC; --primary-dark:#154072; --danger:#D14343; --danger-bg:#FDECEC;
--success:#2E8B57; --success-bg:#E6F3EC; --warn:#B45309; --warn-bg:#FFF4E5; --accent:#8B2331;
--ink:#232934; --muted:#6E7888; --border:#DCE2EB; --paper:#F5F7FA; --head:#F0F4FF;
}
*{box-sizing:border-box;font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;}
body{margin:0;background:var(--paper);color:var(--ink);padding:28px;line-height:1.65;}
h1{font-size:22px;margin:0 0 4px;}
h2{font-size:17px;margin:30px 0 12px;color:var(--primary-dark);border-bottom:2px solid var(--head);padding-bottom:6px;}
h3{font-size:14px;margin:18px 0 8px;color:var(--accent);}
.sub{color:var(--muted);font-size:13px;margin-bottom:18px;}
.card{background:#fff;border:1px solid var(--border);border-radius:10px;padding:16px 20px;margin:14px 0;}
.lead{font-size:13.5px;color:var(--ink);}
table{width:100%;border-collapse:collapse;font-size:13px;margin:8px 0;}
th{background:var(--head);color:var(--primary-dark);font-weight:600;font-size:12px;text-align:left;padding:9px 10px;border-bottom:1px solid var(--border);}
td{padding:8px 10px;border-bottom:1px solid #EEF1F5;vertical-align:top;}
.mono{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;}
code{font-family:ui-monospace,Menlo,monospace;font-size:12px;background:#EEF2F8;padding:1px 5px;border-radius:4px;color:var(--primary-dark);}
pre{background:#1E2430;color:#D8E0EC;border-radius:8px;padding:12px 14px;overflow:auto;font-size:12px;line-height:1.55;}
pre .c{color:#7A8699;}
.tag{display:inline-block;font-size:11px;padding:1px 8px;border-radius:10px;font-weight:600;}
.tag.risk{background:var(--danger-bg);color:var(--danger);}
.tag.ok{background:var(--success-bg);color:var(--success);}
.callout{border-left:4px solid var(--primary);background:#F0F6FF;padding:10px 14px;border-radius:4px;margin:12px 0;font-size:13px;}
.callout.danger{border-color:var(--danger);background:var(--danger-bg);}
.callout.warn{border-color:var(--warn);background:var(--warn-bg);}
.callout.ok{border-color:var(--success);background:var(--success-bg);}
.callout b{color:var(--ink);}
ul,ol{margin:6px 0;padding-left:22px;}
li{margin:3px 0;font-size:13px;}
</style>
</head>
<body>
<h1>DDoS / 爬取洪峰应急 Runbook</h1>
<div class="sub">目标机:ali182.92.213.1712vCPU/1.8GiBnginx 443 → jiu:8081 / payd:8080)· 2026-07-05 制定 · 配套加固:nginx limit_req/limit_conn/UA 拦截 + 应用层分钟限流/日配额(redis 外置)</div>
<div class="callout"><b>已拍板的风险决策:</b>不预购 DDoS 高防 / 不常备 CDN——当前业务体量(B2B 门店工具,客户量有限)与其成本(高防 ¥2-3k/月起)不匹配。接受「极端容量型攻击下最长黑洞期(2.5~24h)不可用」的残余风险;客户端 App 有本地态可短时离线操作。应用层 CC 攻击由既有多层限流覆盖,不在此风险内。</div>
<h2>一、判定:现在发生的是什么</h2>
<div class="card lead">
<table>
<tr><th>症状</th><th>检查命令 / 位置</th><th>判定</th></tr>
<tr><td>ssh 卡顿、ping 大量丢包,但机器负载不高</td><td class="mono">ping 182.92.213.171 · 阿里云控制台 ECS 监控「网络带宽」打满</td><td><span class="tag risk">容量型 L3/L4</span>(带宽被灌满)→ 走第三节</td></tr>
<tr><td>机器能登,nginx 连接数/QPS 暴涨、CPU 高</td><td class="mono">ss -s · tail -f /var/log/nginx/access.log · top</td><td><span class="tag risk">应用层 CC / 爬取洪峰</span> → 走第二节</td></tr>
<tr><td>IP 全网不可达(连阿里云内网也 ping 不通)</td><td>控制台 → DDoS 基础防护 → 实例列表:状态「黑洞中」</td><td><span class="tag risk">已进黑洞</span> → 走第四节</td></tr>
</table>
<p>阿里云免费「DDoS 基础防护」自动生效:清洗阈值与黑洞阈值查询路径 = <b>控制台 → 安全 → DDoS 基础防护 → 实例列表</b>(北京区黑洞阈值约 5Gbps 量级,以控制台实际显示为准)。超过黑洞阈值即封 IP,黑洞期默认 2.5h,反复被打会延长到 24h,<b>期间无法主动解封</b></p>
</div>
<h2>二、应用层 CC / 爬取洪峰(机器还活着)</h2>
<div class="card lead">
<ol>
<li><b>看清攻击面</b><code>awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20</code> 找 top IP;再看打的路径。</li>
<li><b>封单个/少量 IP</b>nginx conf 对应 location 或 server 级加 <code>deny 1.2.3.4;</code><code>nginx -t && systemctl reload nginx</code>;或阿里云安全组加拒绝规则(源 IP /32,优先级 1)。</li>
<li><b>整体调紧</b>:把 <code>/etc/nginx/conf.d/jiu.conf</code><code>jiu_pub</code> 从 10r/s 降到 2r/s、<code>jiu_shoplist</code> 降到 1r/s、<code>jiu_conn</code> 降到 5reload。注意这是<b>临时手改线上</b>,恢复后必须回滚(下次 server 发版会覆盖为仓库版本)。</li>
<li><b>应用层兜底</b>:后端还有分钟级限流 + 日配额(redis 外置,重启不丢);紧急时可在 <code>/opt/jiu/config/production.env</code> 调小 <code>RATELIMIT_*</code><code>systemctl restart jiu</code></li>
</ol>
</div>
<h2>三、容量型 L3/L4(带宽被灌满,还没进黑洞)</h2>
<div class="card lead">
<p>本机和 nginx 层<b>无能为力</b>(流量在进机器前就占满管道),只有两条路,二选一:</p>
<h3>路 A:购买阿里云 DDoS 高防(攻击打 IP 也有效,成本高)</h3>
<ol>
<li>控制台购买「DDoS 高防(中国内地)」保险版(约 ¥2-3k/月起 + 弹性按次计费)。</li>
<li>配置网站接入:源站 <code>182.92.213.171</code>,转发 443/80,回源保持 HTTPS。</li>
<li>把 jiu.51yanmei.com 的 A 记录改为高防给的 CNAME(阿里云云解析,TTL 600 内约 10-30 分钟全网生效)。</li>
<li>攻击停止后可退回直连并停止续费。</li>
</ol>
<h3>路 B:套 CDN / 边缘安全加速(只有攻击打域名时有效)</h3>
<ol>
<li>域名已备案 ✓,可开阿里云 CDN 或 ESA,源站 182.92.213.171:443。</li>
<li>动态 API 全走回源(CDN 主要挡静态与摊薄入口),若攻击者直打源 IP 则无效——届时只能走路 A 或换公网 IP(换 IP 需同步改 DNS + baize 台账 + pay 相关配置)。</li>
</ol>
<div class="callout warn"><b>预备项(平时保持):</b>云解析里 jiu.51yanmei.com 的 TTL 保持 ≤600s,应急切换才快;本 runbook 的回源参数保持最新。</div>
</div>
<h2>四、已进黑洞</h2>
<div class="card lead">
<ol>
<li>黑洞无法主动解除,等待期(控制台显示解封时间)内做两件事:给客户发公告(模板见下);评估是否走第三节路 A(高防接入可在黑洞期间完成配置,解封即切换)。</li>
<li>客户公告话术模板:<i>「系统服务器正遭受网络攻击,运营商已启动防护,预计 X 时 X 分前恢复。期间已录入的数据不受影响,App 可离线查看,恢复后自动同步。给您带来不便深表歉意。」</i></li>
<li>事后复盘:控制台下载攻击流量报表,评估是否升级常备防护,更新本 runbook。</li>
</ol>
</div>
<h2>五、既有防线速查(平时状态)</h2>
<div class="card lead">
<table>
<tr><th></th><th>措施</th><th>位置</th></tr>
<tr><td>阿里云</td><td>免费 DDoS 基础防护(自动清洗);安全组仅放行 22/80/443/ICMP</td><td>控制台 · sg-2ze5y7jqe889jmqb6ci4</td></tr>
<tr><td>nginx</td><td>limit_req(公开 10r/s、店铺列表 2r/s+ limit_conn20/10/下载 3+ 抓取库/空 UA 403 + 图片防盗链 + 下载限速</td><td class="mono">deploy/nginx-jiu-ali.confCI 下发)</td></tr>
<tr><td>应用</td><td>per-IP 分钟限流 + 每店 RPS + 登录失败锁 + 日配额(单品 1000/日、列表 300/日);状态外置 redis 跨重启</td><td class="mono">backend/internal/ratelimit + middleware</td></tr>
</table>
</div>
</body>
</html>