2026 独立站防 DDoS 与防爬:Cloudflare+WAF 实战避坑

独立站如何应对 L3/L4 与 L7 DDoS 攻击,以及占比近 40% 的坏 bot。涵盖 Cloudflare WAF、速率限制、geo 拦截与 VPS 层防护的组合打法。

延伸阅读

更多相关攻略推荐:【CF 防护 01】Cloudflare + VPS 防 DDoS 【发行版选型 10】如何选择合适的 Linux 发行版VPS 装什么系统好?Ubuntu、Debian、CentOS 大白【安全基线 01】加固 SSH 与 Fail2ban【API 中转 02】ChatGPT/Claude API 中转 V

为什么独立站必须同时防 DDoS 与防爬

很多出海独立站老板以为,网站被攻击是“大品牌才有的烦恼”,自己一天几百单没必要防。这是 2026 年最危险的误解。 bot 流量早已超过真人:Thales 旗下 Imperva 发布的 2026 年 Bad Bot Report 显示,2025 年全网约 53% 的流量来自自动化程序,其中“坏 bot”占比高达 40%,而十年前这一数字仅约 15%。Imperva 早一年的报告也指出自动化流量约 51%、坏 bot 约 37%。Cloudflare 自己测量的结论是:2025 年底其网络返回的 HTML 请求里,真人只剩约 47%,非 AI 类 bot 占 44%,AI 爬虫平均约 4.2%。换句话说,你后台看到的“访客数”,有一半以上不是人。

对电商独立站而言,坏 bot 的危害是直接的:它们疯狂抓取你的商品价格和库存、用盗号库撞库登录、伪造下单消耗库存、对搜索和筛选接口发动慢速 DDoS,把服务器 CPU 和数据库拉满,导致真实顾客打开页面转圈。更棘手的是 AI 驱动的爬取与攻击正在暴涨——Thales 称 2025 年 AI 驱动的 bot 攻击从每天约 200 万次上升到 2500 万次,增幅 12.5 倍。Anthropic、OpenAI、Perplexity 等 AI 爬虫的“爬取/引流比”极高(部分高达数千比一),它们拿走你的内容却几乎不带来订单。所以防 DDoS 和防爬,本质上是一件事:守住服务器资源,只把真实流量放进来。

先分清敌人在哪一层:L3/L4 与 L7 DDoS

动手配置之前,必须先搞清楚你面对的是哪一类攻击,因为不同层用完全不同的武器和打法。DDoS 按 OSI 模型大致分三类:

  • volumetric 流量型(L3/L4):用 UDP Flood、DNS/NTP/CLDAP/Memcached 反射放大等手段把你的带宽管道灌满。这类占全部攻击的大约 65%,用 Gbps 或 PPS 衡量。Memcached 放大倍数可达 1 万到 5 万倍,DNS 约 28–54 倍,CLDAP 约 56–70 倍。单台 VPS 的带宽远小于这种洪流,所以必须靠上游清洗或 CDN 吸收。
  • 协议型(L3/L4):典型是 SYN Flood,攻击者发大量握手请求却永不完成,把服务器的连接表塞满,导致正常用户连不上。防御靠 SYN Cookie、连接超时和内核参数调优。
  • 应用层(L7):用看起来完全正常的 HTTP 请求打你的搜索、登录、API 接口。每个请求都合法,传统包过滤分辨不出,靠 WAF、速率限制和行为分析(JS 质询、指纹)来拦。2025 年底 Cloudflare 遥测显示 UDP Flood 环比增长 231%,而 L7 HTTP Flood 的危害在于“不对称”——一个小请求可能触发一次重数据库查询,用很小的带宽就能打垮你。

实战经验是:没有任何单一工具能挡住全部三层。带宽型靠上游/CDN,状态型靠内核与边缘限速,应用层靠 WAF 与速率限制。独立站的正确姿势是“纵深防御”,下面逐层拆解。

Cloudflare 第一道防线:开代理、藏好源站 IP

对独立站来说,Cloudflare 免费版就是性价比最高的第一道盾。核心三件事:

  • 把域名 NS 改到 Cloudflare,DNS 面板里给 A/AAAA 和 www 记录点亮橙色云朵(代理开启),让访客先到 CDN 节点再回源。
  • 藏好源站真实 IP。很多站被 DDoS 是因为攻击者从历史 DNS、邮件头、子域名扫到了源站 IP,直接绕过 CDN 打服务器。务必在服务器防火墙只放行 Cloudflare 节点 IP 段(https://www.cloudflare.com/ips/)的 80/443,其余一律 DROP。
  • 开启 Authenticated Origin Pulls(SSL/TLS → Origin Pull),让源站只接受带 Cloudflare 证书的 mTLS 握手,进一步杜绝绕过。

应急时打开 “Under Attack Mode”(Overview → Quick Actions),会给每个访客加 JS 质询,对 CC 和 L7 攻击立竿见影;但注意它会挡掉不支持 JS 的爬虫和 API,正常后记得关掉。API 流量不要开这个模式,改用速率限制把安全等级设为 High。

WAF 实战规则:从 geo 拦截到登录保护

Cloudflare WAF 的自定义规则是你最灵活的武器。下面是几个经过实战验证的表达式(Security → WAF → Custom rules → Create rule):

# 1) 拦截高风险地区且非搜索引擎 bot 的流量
(ip.geoip.country in {"RU" "CN" "KP"}) and not cf.client.bot
# 动作:Managed Challenge

# 2) 保护登录页:威胁分高直接封
(http.request.uri.path contains "/login") and (cf.threat_score gt 10)
# 动作:Block

# 3) 非目标国家禁止 POST 到登录接口(适合只做欧美生意的独立站)
(http.request.method eq "POST" and http.request.uri.path eq "/api/login") and (ip.geo.country ne "US")
# 动作:Block

# 4) 拦低信誉 ASN 上伪装成浏览器的脚本
(http.request.version eq "HTTP/1.1" and http.user_agent contains "Mozilla/5.0" and not http.cookie contains "cf_clearance" and ip.src.asnum in {12345 67890})
# 动作:Managed Challenge

geo 拦截要克制,别一刀切把可能下单的地区也封了。先查日志确认攻击来源的国家和 ASN,再精准下手。付费版还能开启 WAF Managed Rulesets、按字段限制 GraphQL 查询频率。另外别忘了 IP Access Rules(可封 /16、/24 甚至整个 ASN)和 User Agent Blocking(整站封可疑 UA)。

速率限制:挡住 CC 与慢速 DDoS

对数据库压力大、容易被慢速打瘫的接口(搜索、筛选、登录、API),必须上速率限制(Security → WAF → Rate limiting rules)。关键原则:别只按 IP 计数,否则攻击者用移动/NAT 轮换 IP 就绕过了;要按 “IP + Session Cookie” 或 “IP + Authorization Header” 计数。

# 搜索/登录类重接口:10 秒最多 10 次,超了封 1 小时
字段特征: ip.src + cf.session
阈值: 10 requests / 10 seconds
动作: Block, 惩罚时长 1 hour

# 通用页: 1 分钟 100 次, 超了返回 503 (适合 CC 慢速攻击)
字段特征: ip.src
阈值: 100 requests / 1 minute
动作: Challenge

对独立站而言,把 /search、/api、/login 这类“贵”的端点单独限速,比全局限速更不容易误伤真人。Cloudflare 免费版有基础的 Rate Limiting,付费版额度更高、规则更细。遇到攻击者快速换 IP 绕过限速,就切到 Under Attack Mode 或针对缺失 accept-language、异常加密套件的流量单独上 JS Challenge。

VPS 层兜底:nginx 限速、fail2ban、防火墙

别忘了:CDN 只挡它背后的流量,源站本身也要硬。选对 VPS 是前提——DMITRackNerdVultr、Bandwagon 等都提供自带基础 L3/L4 DDoS 防护的 KVM 实例,带宽和清洗能力各有侧重,独立站按目标客群地区挑就近节点即可。然后在系统层做三件事:

1) nginx 限速与慢速攻击防护。在 http 块定义限流区和连接区,server 块里按需套用:

http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
  limit_conn_zone $binary_remote_addr zone=addr:10m;
  # Slowloris 防护
  client_body_timeout 10s;
  client_header_timeout 10s;
  keepalive_timeout 5s 5s;
  send_timeout 10s;
}
server {
  location / {
    limit_req zone=one burst=20 nodelay;
    limit_conn addr 10;
  }
  location /wp-login.php {
    limit_req zone=one burst=2 nodelay;
  }
  # 拦空 UA 和知名扫描器
  if ($http_user_agent = "") { return 444; }
  if ($http_user_agent ~* "sqlmap|nikto|masscan|nmap|acunetix|nuclei") { return 444; }
}

2) fail2ban 自动封 IP。安装后建 /etc/fail2ban/jail.local,针对 nginx 限流、认证失败、bot 扫描分别设监狱:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
banaction = ufw

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log

[nginx-http-auth]
enabled = true
maxretry = 5
bantime = 3600

[nginx-botsearch]
enabled = true
maxretry = 5
findtime = 60
bantime = 86400

3) 防火墙基线。用 UFW 只开 22/80/443,SSH 限速防暴力破解,限制 ICMP 防 ping flood,并开内核 SYN Cookie:

sudo ufw allow 22,80,443/tcp
sudo ufw limit 22/tcp
sudo ufw enable
# /etc/sysctl.conf 追加:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
sudo sysctl -p

最关键一步:把源站防火墙只放行 Cloudflare IP 段,直接封掉其它来源对 80/443 的访问,这样即便源站 IP 泄露,攻击者也无法直连打瘫你的后端。

组合拳与应急流程

把上面几层串起来就是一套可落地的纵深防御:Cloudflare 代理 + 隐藏源站 IP + WAF 自定义规则 + 速率限制 + nginx/fail2ban/防火墙兜底。平时靠这套组合把坏 bot 拦在边缘;真被打时按这个顺序响应:

  • 打开 Under Attack Mode,先止住 L7 洪流,同时观察 Security Events 看攻击特征(国家、UA、ASN)。
  • 根据日志补 WAF 规则,封掉攻击集中的地区/ASN/UA,对重接口加严速率限制。
  • 确认源站 IP 未泄露;若泄露,立即换 IP 并收紧防火墙只放行 Cloudflare 段。
  • 带宽型(L3/L4)超出单台 VPS 能力时,联系 VPS 商家开启上游清洗,或临时切到 Cloudflare 更高防护。
  • 事后复盘:记录攻击类型、持续时长、有效动作,再据此调速率限制和阈值,别付赎金。

独立站的攻防是长期博弈,没有“配置一次永逸”的银弹。把监测做成习惯——平时看一眼 CPU、带宽、429 数量建立基线,攻击来时才能一眼看出异常。把真人顾客和爬虫、机器流量分开对待,你的服务器资源才真正花在能下单的人身上。

延伸阅读:想系统搭建独立站服务器,可参考 VPS 安全基础2026 跨境电商 VPS 选型VPS 带宽与流量指南