[菜鸟教程] 零基础 Cloudflare 配置教程

〇. 前言

文本教程面向建站新手, 因此会跳过一些对新手来说难以理解的信息, 也会不厌其烦的讲解一些重要内容. 如果你认为本文过于笼统, 说明本文不适合你.

本文默认你已经完成了 Cloudflare 的接入部分. 如果你连接入 Cloudflare 都不会, 本文对你来说没有意义, 请退出.

一. 接入了 Cloudflare, 我的网站就不怕 CC/DDoS 了吗?

先说结论: 并不是, Cloudflare 的五秒盾(交互式质询/JS质询) 是可以被绕过的.
通常情况下, Cloudflare 会给通过质询的浏览器下发一个名为 cf_clearance 的 cookie, 同子网(/24)UA 下的请求可以携带这个 cookie 直接在有效期内跳过质询. 意味着攻击者可以在第一次请求时使用真实浏览器进行过盾, 之后则直接进行自动化请求.

同理, 还有更多方法绕过 Cloudflare 的五秒盾. 这里不再赘述.

二. 自助的付费计划对我来说有用吗?

付费计划会提供更好的 TTFB, 以及更多的功能. 以及 Cloudflare 托管的 WAF 规则. 可根据自身网站的体量做取舍.

注: 如果你只是单纯想优化用户到边缘的连接速度, 你其实并不需要购买付费计划. 有关这部分内容, 请参考 [菜鸟教程] 零基础 Cloudflare 优选教程.

三. 基础的 WAF 规则配置.

从这里开始就是正式的配置教程了.

转到 Cloudflare 域面板中的 安全性/安全规则 下, 本章节的操作会在这里进行.

1. 为已知机器人跳过之后的 WAF 规则

创建自定义规则,

找到 已知自动程序, 配置为是(开)

当然, 你也可以手动选择允许的机器人类别. 你可以在 此处 看到所有经过 Cloudflare 验证的机器人和其类别.

往下滑, 选择操作为跳过, 注意放置位置一定要放到第一个

完成后点击保存.

2. 为你的 API 创建跳过规则

如果你的网站没有需要外部服务器/用户调用的 API, 可以跳过此步骤.

新建一个自定义规则, 请根据你的 API 路径, 方法 自行修改示例规则中的内容

此段规则的表达式为

(http.host eq "api.sin.fan" and 
http.request.uri wildcard r"/api/pub/v1/users/*" and
http.request.method eq "POST")

如果要创建更多的路径, 在该小节规则后接一个 OR 重复即可.

往下滑, 选择操作为跳过, 位置应该放在上一个已验证机器人跳过规则后.

请注意, 这些 API 通常会被自动程序调用, 因此还需要跳过 自动程序攻击模式.

3. 质询可疑的请求

这部分推荐还是自己写, 这里给出几个建议.

A. 从 radar 获得 ASN Bot 流量占比, 并对高流量占比的 ASN 进行质询


比如上面这些 ASN. 在之后我会单独提供一个现成的高 Bot 流量占比的 ASN 列表.

B. 质询使用旧版本 HTTP 的请求

此规则在我站点上的通过率仅为 0.07%

表达式为

(http.request.version in {"HTTP/1.0" "HTTP/1.1" "HTTP/1.2"})

X. 可选: 质询所有第一次访问网站的请求

如果网站正在被攻击, 可以使用此规则进行质询. 此规则与 I'm under attack 模式的最大区别就是不会对 API 流量进行质询. 因为 API 请求已经被之前的规则标记为跳过了.

表达式为

(http.request.uri wildcard r"/*")

4. 限速策略

创建一个限速策略规则, 表达式为

(not cf.bot_management.verified_bot)

向下滑动, 找到 当速率超过… 部分,
你需要根据你的网站自行调整设置. 可以根据以下步骤进行配置:

  1. 进入你的网站, 按下 F12
  2. 转到网络选项卡
  3. 勾选关闭缓存检查框, 按下 F5 刷新网页
  4. 待页面加载完成后, 查看下方的数据


我的网站一次访问需要 37 次请求, 我假设我的用户会在 10秒 内强制刷新5次(ctrl F5), 然后关闭缓存访问 5 个新页面, 那么 10 秒 内的请求是 370 次. 那么你应该在 请求 部分填写 370.

向下滑动, 如果你是 Free 计划, 你的操作只能选择 阻止 10秒.
选择完成后点击保存.

四. 托管规则调整.

转到 安全性/安全规则, 选择 DDoS 保护 选项卡. 创建替代

规则集操作修改为阻止

点击浏览规则, 搜索 imp, 将操作全部改为阻止.

搜索 likely, 将仅有的一条规则改为阻止.

五. 安全设置调整.

转到 安全性/设置, 本章节接下来的操作会在此页面完成.
向下滑动,

找到 质询通过期 设置, 默认为 30 分钟. 你可以根据需求调整为更短或更长的时间. 本文之前提到过, 攻击者可以通过合法的 cf_clearance cookie 跳过质询, 因此不推荐将该时间设置的特别长, 通常情况下默认的 30 分钟已经足够了. 如果你需要一定的安全性, 可以修改为 15 分钟.

继续向下, 你会找到 自动程序攻击模式 / 超级自动程序攻击模式.
Free 中, 此设置默认为关. 可以开启.
付费计划中, 调整为如下设置

提一嘴: 此检查聊胜于无. 只能拦截一部分唐逼脚本小子的 CC. 甚至经过我的测试, 一部分提供免费 CC 服务中基础的 HTTP SPAM 中部分请求(≈30%)都能得到较高的bot score.

Free 中 自动程序攻击模式 的纯摆设, 没啥作用.

付费计划中, Cloudflare 会根据 TLS 指纹, ja4/ja3, IP 在 Cloudflare 数据库中的纯净度计算出一个 bot score. 通常情况下, 已知的自动化请求会得1分, 也就是 绝对自动化流量, 但是目前的绝大部分爬虫都能自定义 TLS指纹, UA, 以及有不是那么脏的 IP 代理池. 甚至 itdog 的部分节点进行 HTTP 测速都能得到较高的分数(>1分).
在 Pro 中允许对 =1分 的请求进行质询或阻止, Business 中允许对 2-29分 的请求进行阻止或质询.

六. 速度优化

转到 速度/设置
点击启用所有可用设置. 然后转到 内容优化 选项卡.

向下滑动, 可以考虑是否开启 Cloudflare Fonts 优化. 如同 Cloudflare 的介绍, 这会内联并缓存 Google Fonts.

向下滑动, 可以考虑是否开启 Rocket Loader 优化. 此选项会异步执行你的 JS 脚本, 从而加快页面渲染的速度. 对 WP 站有奇效. 但是此设置也有可能导致部分依靠 JS 脚本的功能损坏. 你可以根据 Cloudflare 的文档 忽略单个脚本.

七. 缓存优化

1. 配置

转到 缓存/配置

向下滑动, 找到 浏览器缓存 TTL 选项, 此设置影响一个文件在浏览器中的缓存时长. 通常可以修改为更长的时间, 例如 14天 甚至更长.

向下滑动, 找到 Crawler Hints 选项, 设置为开.

2. 缓存规则

转到 缓存/Cache Rules

新建规则, 选择 缓存默认文件扩展名 模板, 这些都是默认的静态文件, 通常可以设置更高的边缘缓存TTL 和 浏览器缓存TTL.
设置完成后, 点击保存.

默认情况下, cloudflare 不会缓存没有后缀名的文件/HTML 文件, 因此通常情况下, 你不需要单独为 API 路径设置一个绕过规则.

3. Tiered Cache

转到 缓存/Tiered Cache

设置为开.

八. 规则修改

转到 规则/设置
修改设置如下

九. SSL 设置.

转到 SSL/TLS / 概述

通常情况下, 推荐设置为完全, 你需要在源服务器上配置一个SSL证书(推荐使用 Cloudflare 的自签名源服务器 SSL 证书).
为了安全, 你还需要关闭服务器的 80 端口并限制 443 端口只能被 Cloudflare 的 IP访问.
通常推荐在服务商防火墙进行设置, 如果你的服务商没有提供防火墙, 则直接使用服务器防火墙即可, 以下是 ufw 命令示例.

sudo ufw allow from 173.245.48.0/20 to any port 443
sudo ufw allow from 103.21.244.0/22 to any port 443
sudo ufw allow from 103.22.200.0/22 to any port 443
sudo ufw allow from 103.31.4.0/22 to any port 443
sudo ufw allow from 141.101.64.0/18 to any port 443
sudo ufw allow from 108.162.192.0/18 to any port 443
sudo ufw allow from 190.93.240.0/20 to any port 443
sudo ufw allow from 188.114.96.0/20 to any port 443
sudo ufw allow from 197.234.240.0/22 to any port 443
sudo ufw allow from 198.41.128.0/17 to any port 443
sudo ufw allow from 162.158.0.0/15 to any port 443
sudo ufw allow from 104.16.0.0/13 to any port 443
sudo ufw allow from 104.24.0.0/14 to any port 443
sudo ufw allow from 172.64.0.0/13 to any port 443
sudo ufw allow from 131.0.72.0/22 to any port 443
sudo ufw allow from 2400:cb00::/32 to any port 443
sudo ufw allow from 2606:4700::/32 to any port 443
sudo ufw allow from 2803:f800::/32 to any port 443
sudo ufw allow from 2405:b500::/32 to any port 443
sudo ufw allow from 2405:8100::/32 to any port 443
sudo ufw allow from 2a06:98c0::/29 to any port 443
sudo ufw allow from 2c0f:f248::/32 to any port 443

转到 SSL/TLS / 边缘证书
向下滑动, 开启 始终使用 HTTPS 选项. 修改 最低 TLS 版本 为 TLS 1.2.

至此, 本文教程就告一段落了. 你已经完成了 Cloudflare 的基础设置.

点赞
  1. yuanzi505说道:

    先mark了

  2. vpsfq说道:

    先收藏了

  3. seamee说道:

    不错的教程,另外cf的免费waf规则我一直在用这个,不过这个规则不能无脑使用,会拦截一部分正常请求,所以建议先开质询或者观察模式,有没有正常请求被拦截了
    https://github.com/sefinek/Cloudflare-WAF-Expressions

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

×
订阅图标按钮