cloudflare配置详解

本篇文章会以我目前的能力,来尽量解释cloudflare每一个功能,肯定会有错误 欢迎指出

可以点击右侧目录调转到自己需要的章节

已学习:

website

  • Overview
  • Analytics & Logs
  • DNS
  • Email Routing
  • SSL/TLS
  • Security
  • Access
  • Caching
  • Rules
  • Network

domain Registration

Zero Trust

  • Tunnels

R2

未学习:

最开始名称为”待学习”,想了一下有些误导就改了。即可能会让小伙伴认为需要将cloudflare发布的应用全部学习 其实如果你不是去cloudflare做工程师或者客服 这样是错误且完全没必要的。

主要是cloudflare提供的一些功能确实好用我才去了解并有了这篇笔记

website

  • Workers Routes
  • Custom Pages
  • Apps
  • Scrape Shield
  • Rules
  • Zaraz
  • Web3

Turnstile

Zero Trust

  • Applications
  • Access Group
  • Service Auth

Workers

  • KV
  • Queues
  • D1

Pages

Stream

Images

Bulk Redirects

Websites

Overview

独立访问者:可能同一IP同一设备的每个APP的请求都算一个独立访问者,我也不是很确定

已缓存的百分比:字面意思,百分比越高 相对来说服务器的压力就越小

总数居:cloudflareCDN返回给客户的数据流量(不清楚是否包括CDN回源流量)

已缓存的数据:已经被cloudflareCDN缓存到CDN服务器的数据,用户请求到该数据时CDN不会向源服务器发送请求 而是直接从CDN缓存中取出数据 并返回给用户

image

Analytics & Logs

这个应该不需要设置什么 主要是分析恶意流量等

DNS

开启黄色小云朵(Proxied)表示使用cloudflareCDN,开启后该用户访问该域名会被cloudflare NameServer (如dana.ns.cloudflare.com)返回cloudflare的IP,可以实现隐藏服务器IP的目的

即 香港用户>cloudflare香港节点>cloudflare美国节点>我的美国服务器

关闭小云朵(DNS only),则不会启用cloudflareCDN,此时loudflare唯一能提供的服务 就是告诉运营商DNS服务器你的DNS记录信息,你想使用cloudflare提供的防火墙等功能都是需要开启黄色小云朵的

Email Routing

接收域名邮件服务+邮件转发,非常适合大量注册服务,不过这个无法回信 需要回信功能建议使用邮局

Custom addresses:设置你喜欢的一个邮箱,并为他们选择规则。比如我设置了两个邮箱”test@tanglu.cf“和”drop@tanglu.cf“,任何发往”test@tanglu.cf“的邮件信息都会转发到”tangluokex@gmail.com“,任何发往”drop@tanglu.cf“的邮件都会被丢弃

Catch-all address:收件地址为”*@tanglu.cf”格式(如”t2@tanglu.cf“)的信件且“Custom address”中无对应地址,cloudflare则会将”t2@tanglu.cf“收到的信发送给”tangluokex@gmail.com

Destination addresses:可以在客户端接受邮件的地址

注:Email Routing无法转发二级域名的邮件,如收件域名为”test@mail.tanglu.cf“的信件无法被转发到”tangluokex@gmail.com“,这时需要使用邮局服务

image

SSL/TLS

Overview

这个比较重要,我起初在这里遇到了很多问题,我尽量写清楚。

这个只针对开启黄色小云朵的网站生效,这一小节我默认都开启小云朵了,以开启小云朵的”a.tanglu.cf”为例

如果没有开启小云朵则说明你不需要cloudflareCDN,你选择四个中任何一个设置都不会影响你的网站,可以跳过本节

image

Off (not secure)

不加密,用户只能通过80端口访问网站,即使你通过https访问,cloudflare也会返回给客户端301请求 告诉浏览器通过http访问,然后浏览器再次通过http请求”如图中序号2”

cloudflareCDN访问网站服务器的过程为”回源”,Off (not secure)模式下回源也是未加密的http协议

image

Flexible

此模式下,客户端到CDN选择http或者https均可,由客户端决定,CDN到服务器为强制http协议,如果此时服务器设置”强制https”则会导致重定向次数过多产生错误(如下图所示)

即CDN通过http协议向服务器发起回源请求,服务器因为设置了强制https 服务器会发送301重定向数据包告诉CDN必须通过https访问,CDN由于设置的”Flexible”使其必须使用http访问,也就导致了错误,解决方法就是选择”Full”模式或者服务器取消”重定向到https”

注:开启小云朵后,有小伙伴需要强制网站http跳转到https的需求,这时需要注意无论服务器设不设置”重定向到https”都不会对客户端浏览器产生影响,而只会影响CDN服务器的回源请求使用的协议(http/https)。因为客户端是与CDN服务器协商访问协议,CDN再与源服务器协商访问协议。
正确的做法是在cloudflare面板开启”强制https”或者通过cloudflare rule配置重定向 后面会有写

image

Full/Full (strict)

这两者基本差不多,”full”模式CDN服务器不会对源服务器返回的证书进行校验其是否合法,而”Full (strict)”模式CDN向源服务器请求时 只接受合法且未过期的SSL证书。建议选择”Full” 这样的话如果你启用了cloudflareCDN,即使源服务器端证书过期 客户端也是可以正常访问的,过期的证书相当于”自签证书”同样有加密效果

此模式下CDN会强制客户端使用https协议,客户端用http协议访问的话CDN会返回301重定向信息 告诉浏览器用https请求,证书由cloudflare提供(下一节有写),服务端也必须必须部署证书,CDN回源时通过https协议请求数据。

image

Edge Certificates

域名NS记录设置到cloudflare时,cloudflare会自动为你生成这两张证书,用途就是客户端用https请求时 CDN将这个证书发送给客户端

注意:这张证书只包含一级域名”tanglu.cf”和二级域名”*.tanglu.cf”,如果你的网站是三级域名”three.a.tanglu.cf” 此域名属于” *.a.tanglu.cf”,但不属于” *.tanglu.cf”。

这时你如果开启小云朵启用CDN,用户只能通过http协议访问,如果使用https协议会提示证书不安全 即不合法的证书。

解决方法可以通过SaaS免费接入(后面会写)或购买高级证书或开通200刀一月的cloudflare buisness上传自己的证书

Always Use HTTPS 这个开启就是用户用http访问会重定向到https

image

image

client Certificates

不知道这个有什么用怎么使用,跳过

Origin Server

Origin Certificates:这个证书就是可以放在服务器,cloudflareCDN回源请求时用到,但是仅限于cloudflareCDN,其他CDN或者客户端浏览器都是认为它是不合法的,感觉不如自签(没什么用)

Custom Hostnames

这个似乎被称为SaaS,是实现CNAME接入cf并使用cloudflareCDN,可以用来自选IP。下文记录了从CNAME接入自选IP再到分线路解析

1、CNAME接入cloudflare

假设我需要加速的网站为cfpages1.tanglu.cf,该网站的服务器也就是源服务器的IP假设为 43.43.43.43(也可以是ipv6或者域名)

可能有小伙伴有疑惑,我”tanglu.cf”这个域名已经接入cloudflare了,为什么还要CNAME接入cloudflare
答:这里换做未接入CF的域名也是可以的,另外CNAME接入也不是画蛇添足,而是可以给cfpages.tanglu.cf进行自选IP的,实现锦上添花。

为什么要自选IP:cloudflare默认给你分配的IP对联通和移动丢包可能很大 甚至给你分配的被墙的IP,这个时候你可以自选其他低丢包的节点 降低网站延时和减少丢包

步骤1.1:首先随便决定一个回落域名名称 我设置的”back.tanglu.cf”,然后在CF-DNS添加”back.tanglu.cf”的A记录指向 源服务器IP(43.43.43.43) 记得小云朵要打开

步骤1.2:然后在SSL/TLS>>Custom Hostnames 填写”Fallback Origin”为回落域名(显示青绿色active为添加成功)

步骤1.3:在SSL/TLS>>Custom Hostnames 点击”Custom Hostnames“输入你要加速的域名”cfpages1.tanglu.cf”,然后为cfpages1.tanglu.cf添加CNAME记录 记录值为回落域名”back.tanglu.cf”(不要开启小云朵,这里只需要简单的DNS功能不需要CDN功能),最轻松的CNAME接入就完成了

过程:用户在浏览器输入并访问”cfpages1.tanglu.cf”,(运营商DNS服务器没有cfpages1.tanglu.cf的DNS记录,进而向根域名”.cf”服务器询问tanglu.cf的DNS服务器,得到tanglu.cf的DNS服务器为”gerald.ns.cloudflare.com”,运营商DNS服务器继续向”gerald.ns.cloudflare.com”服务器发送请求询问”cfpages1.tanglu.cf”的DNS记录,返回得到其服务器IP为”back.tanglu.cf”,运营商DNS服务器继续请求”back.tanglu.cf“的DNS记录,cloudflare会返回”back.tanglu.cf”的A记录为”104.29.124.26”)最终运营商DNS服务器向浏览器返回cfpages.tanglu.cf 对应的IP为”104.29.124.26“,浏览器向104.29.124.26对应的服务器请求”cfpages1.tanglu.cf”的网页,cloudflare收到浏览器的请求,查找发现cfpages1.tanglu.cf对应的IP为”back.tanglu.cf“的IP 即”43.43.43.43”,cloudflare向”43.43.43.43”请求”cfpages1.tanglu.cf”网站的数据,CDN回源请求得到数据后再发送给浏览器

过程大概就是这样,成功CNAME接入cloudflare

image

image

image

2、自选IP

这个其实很简单,从上述过程可以发现 我们要实现自选,运营商DNS服务器就不能给我们返回”104.29.124.26”这个普通IP,我们可以直接将步骤1.3的CNAME记录换为A记录 值为优选的IP(假设为1.0.0.1)

注意:此时fallback”back.tanglu.cf”所属的顶级域名不能与加速网站”pages1.tanglu.cf”相同(即不能都为”tanglu.cf”),我也不懂为什么,相同会报错”Error1000”
图片中我用的back.tanglu.ltd做的回落域名,加速域名为”three.a.tanglu.cf”
步骤3也是back.tanglu.ltd做的回落域名,加速域名为”cfpages2.tanglu.cf”

imageimage

3、分线路解析

这个是利用国内DNS平台的分线路解析功能,(tencent ali huawei都支持),因为ali支持二级域名NS接入,我就将”cfpages2.tanglu.cf”接入ali,然后直接设置A记录就行

imageimageimageimage

Security

Events

触发防火墙规则的事件,从这里可以分析到很多,如果你这里一条日志都没有 我建议你配置一下WAF

WAF

Firewall rules:每个人的需求都不一样,我列举一些常见的

匹配规则由上到下遍历,一旦遇到符合的防火墙规则 则执行规则并停止匹配

*1、禁止古巴和加拿大的小米手机访问r2.smalljp.com/的所有内容

image

2、禁止访问所有png类型的图片,并且禁止访问smalljp.com下的所有mp4资源

image

3、显示所有访问者的IP,并要求对浏览器进行质询,这个建议放在最后一条识别

托管质询和JS质询比较友善,但也会增加相应时间

Legacy CAPTCHA 这个选项会让用户手动选择图片 也就是机器人验证弹窗 非常影响用户体验

image

Rate limiting rules

这个是防止CC,我配置的是10秒钟请求数超过200封禁

image

Setting

Security Level 这个选中低就行了,级别越高 用户打开网页所以对于应该越慢 用户体验应该越差

Caching

cloudflare规则我有很多都不会,我只写下我会的规则,欢迎大佬分享规则

Configuration

这个应该看得懂,自己设置吧

Cache Rules

这个我也不是很会,只知道一些简单的,期待大佬补充

另外官方也有很详细的说明:https://developers.cloudflare.com/cache/about/default-cache-behavior

缓存规则可以改变默认设置,但无法改变规定设置,可能写的有点歧义。举个例子来说就是cloudflare默认缓存文件中没有html 但是我通过设置可以实现缓存HTML,又比如cloudflare规定免费版支持缓存不超过200MB的文件,这时你即使设置缓存所有文件 但如果某个文件大小超过500MB,cloudflare依然不缓存,这时我建议使用cloudflare R2。

image

1、缓存r2.smalljp.com下的所有资源

image

Rules

Page Rules

1、强制所有http://r2.smalljp.com/*跳转到https://r2.smalljp.com/*

image

2、不缓存r2.smalljp.com下的mp4文件

因为cloudflare最大缓存500MB 一旦视频超出500MB就会和缓存起冲突,导致视频直链无法在线观看,但不影响视频下载

image

Configuration Rules

Transform Rules

Redirect Rules
这三个我都不会,恳请大佬补充

Origin Rules

这个我只知道富强用途,因为cloudflare只支持特定端口的请求,这个可以设置CDN回源请求的端口

参考自:[总结] nat机器到底怎么套cloudflare,全方位解读 (nodeseek.com)

Network

这里面的配置可以全部开启,有些我也不懂…

Apps

这个我也不了解,哦,不对!剩下的我都不了解

当然也不支持全部都了解

domain Registration

听说这个注册和续费都是全球最低价,google土区除外(顺便说一句google domain 土区是真的便宜,org net只要30元一年)

google domains和cloudflare没有的域名可以看我这篇文章:域名注册局比价

Zero Trust

Zero Trust我只对tunnels有一点了解,其他的访问令牌Access什么的我用不到 就没有过多了解

tunnels就是cloudflare提供的内网穿透,,软件名字叫做”cloudflared”,windows mac linux都可用。类似与frp但是设置比frp简单一些,非常好用(但大陆因为网络环境体验感一般)

官方文档写的很详细,我将常用的功能演示一下

Tunnels

一、内网网站映射到公网

常用于家庭电脑搭建网站或中国境内封禁80 443端口的服务器做站

此内网需要可以与公网通信

前景概要:我在内网用nginx部署了三个网站 http://tunnel1.a.com http://tunnel2.a.com http://tunnel3.a.com:81 ,我的服务器80 433端口都被封禁了,我想通过内网穿透实现通过 https://web1.smalljp.com https://web2.smalljp.com https://web3.smalljp.com 来访问它

注:

我可以部署https://tunnel1.a.com吗?

答:可以,你可以自签证书但是我不清楚cloudflared是否认可你这个证书,我个人认为没必要,因为用户端的证书是cloudflare提供的,你运行cloudflared程序的电脑和cloudflare服务器之间的内容肯定是被加密过的,所以就用http就行。另外多嘴一句 a.com 这个域名又不能被用户看到,用户看到的是web1.smalljp.com这个域名…

a.com是否有什么意义?

答:可以随便设置一个你喜欢的即使你不拥有这个域名,这个域名仅仅是用来host匹配不同server{}字段,不然都是443端口 内网机器怎么知道用户请求的哪个server,不清楚的可以了解下http协议 这方面我也不是很懂…

我机器80端口被封禁了为什么还可以将网站部署在80端口?

答:cloudflared可以访问电脑的内网80端口,然后cloudflared将数据包从任意一个未被封禁的高位端口(比如55555)将数据包发送给cloudflare服务器

正常内网穿透是用一台443端口正常的公网IP机器来作为用户与服务端的桥梁,但是cloudflare的 tunnel可以实现让cloudflare服务器作为中转机即:用户>cloudflare服务器>内网电脑的cloudflared>内网站点>cloudflared将类网站点数据通过某个端口将数据返回给cloudflare服务器>用户收到cloudflare的数据

步骤1:在内网部署https://tunnel1.a.com https://tunnel2.a.com http://tunnel3.a.com:81 三个网站并安装tunnels,tunnels-status显示”healthy”表示安装成功,即cloudflared可与cloudflare服务器正常通信。至此服务端配置完成,接下来在Cloudflare Zero Trust面板配置刚刚添加的tunnels-demo

image

image

image

步骤2:在”Public Hostname”依次添加这三个隧道,

注:HTTP Setting中的HTTP Host Header一定要填写,除非你这个端口就一个内容/服务

比如我设置的nginx81端口,该端口只有一个页面,你可以不填Host这一项

你设置qbittorrent的8080端口,alist的5244端口等都是可以的

image

————————————————

image

——————image

image

二、SSH远程

tunnel添加SSH 官方文档写的很详细,我只是将官方文档演示一下,国内使用不如套中转

官方说客户端必须使用WARP或者cloudflared连接,我无法使用WARP只好下载cloudflared演示了。当然你也可以配置Access通过浏览器访问

客户端cloudflared下载链接:https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation

步骤:服务端就像之前那样安装cloudflared,然后如下图添加隧道,

客户端(就是你主控端)安装cloudflared或者WARP并启动,我以linux做客户端为例 vim /root/.ssh/config

然后填入以下内容

1
2
Host ssh.example.com
ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h
ssh.example.com
1
2
3
#比如我的配置
Host ssh2222.smalljp.com
ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h

image

image

image

三、windowsRDP登录

这个只有windows才有RDP好像,官方文档写的很详细,要求和上面SSH几乎差不多,国内不如套中转

客户端执行

cloudflared access rdp --hostname rdp.example.com --url rdp://localhost:3389

这个似乎是将RDP服务映射到本机3389端口,我也不是很清楚

然后浏览器会进行验证身份

如何让RDP像SSH一样在网页端远程我还不知道,期待大佬解答!

image
image

阅读剩余
THE END