Image by saya@pixiv

Cloudflare使用记录

The Note of Using Cloudflare

  linkthis    2018-02-16    7667 words

Cloudflare是一家美国的跨国科技企业,Cloudflare以向客户提供网站安全管理、性能优化及相关的技术支持为主要业务。

Cloudflare可以帮助受保护站点抵御包括拒绝服务攻击(DenialofService)在内的大多数网络攻击,确保该网站长期在线,同时提升网站的性能、访问速度以改善访客体验。同时Cloudflare还提供了最基础的免费版服务,我们可以使用其来改善网站的体验。

DNS配置

在开始使用Cloudflare之后,我们需要将NS服务器更换为Cloudflare提供的服务器加钱你就可以自定义NS服务器。虽然提示需要大概24小时才能生效,但是一般30分钟左右就会生效,生效之后Status会显示Active。
这时需要注意,如果我们没有自建邮箱服务等需求,应该移除Cloudflare自动添加的除A记录以外的所有记录,同时保证所有请求都应该经过cloudflare的中转,即Status下的云朵为黄色。

AAAA记录配置

即使你的服务器有IPv6,并且在DNS记录中添加了AAAA解析之后,也不意味着你完成了双栈网络的架设,你需要对Nginx的配置进行如下的修改才可以正确监听IPv6端口,应添加如下两行:

1
2
listen [::]:80 ipv6only=on;
listen [::]:443 ipv6only=on ssl http2;

之后重启Nginx,即可同时监听IPv4和IPv6地址。不过即使你不进行这项操作,Cloudflare也会在用户使用IPv6访问时为其提供IPv6地址毫无卯月

CAA记录

如果不想要进行具体了解,以下大部分内容可以略过。
CAA(Certification Authority Authorization)是一种 DNS 记录,它被定义在RFC6844,其目的是用来指定域名允许哪个证书颁发机构(CA)为其颁发证书。防止钓鱼攻击者使用该域名申请 SSL 证书。

从2017年9月7日开始所有的CA均会遵守此标准。一条CAA记录由以下元素组成:

标签 描述
flag 0-255之间的一个无符号整数。它目前用于表示关键标志,在各RFC中指定具体含义。
tag 用来表示关键标志,RFC有定义
value 与tag选择相关

而目前有三个可用的tag:
issue:明确授权单个证书颁发机构颁发主机名的证书(类型不限)。
issuewild:明确授权单个证书颁发机构为主机名颁发通配符证书(只允许泛域名)。
iodef:指定认证机构可以向其报告签署违规的URL或邮箱。
所以CAA记录的规范表示为:

CAA <flags> <tag> <value>

我们可以通过sslmate来生成CAA记录,并通过myssl检查CAA记录是否生效。

不过Cloudflare提供的界面可以非常快速的添加CAA,而且现在Cloudflare添加CAA记录已经不需要向Staff提出申请。不过需要注意的是,由于Cloudflare在免费和专业计划中提供的都是通用SSL,所以我们需要添加以下几家CA:

comodoca.com
digicert.com
globalsign.com
letsencrypt.org

DNSSEC配置

域名注册商支持的情况下,点击Enable DNSSEC按钮,然后会自动生成DS Record。Cloudflare DNSSEC采用的加密算法为Algorithm 13(ECDSA Curve P-256 with SHA-256)。在域名注册商的面板填入Cloudflare提供的对应内容即可完成配置。DS Record生效的时间一般在5-60分钟左右。
DS Record生效之后,Cloudflare的界面将显示Success! xxxxx.me is protected with DNSSEC.。你可以使用如下命令来验证DNSSEC的配置:

1
2
3
4
dig linkthis.me +dnssec +short
104.24.99.50
104.24.98.50
A 13 2 300 20180512161303 20180510141303 35273 linkthis.me. d2Alz6pdvNFjUkgCQckr1IdPLOxOsE3i/V6tK3G0WX30MWcsVWuD14mI Khk2EKBuwRSsHiNTTeexiRn5F9cmpg==

配置成功之后在返回的记录当中会有RRSIG值。
需要注意的是,只有在你使用的DNS支持DNSSEC的情况下,dig命令才能返回RRSIG值,所以当没有返回RRSIG时你可能需要使用如下的命令:

dig @8.8.8.8 linkthis.me +dnssec

; <<>> DiG 9.9.5-9+deb8u15-Debian <<>> @8.8.8.8 linkthis.me +dnssec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21891
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 512
;; QUESTION SECTION:
;linkthis.me.			IN	A

;; ANSWER SECTION:
linkthis.me.		299	IN	A	104.24.99.50
linkthis.me.		299	IN	A	104.24.98.50
linkthis.me.		299	IN	RRSIG	A 13 2 300 20180423152259 20180421132259 35273 linkthis.me. 4SsOpeRifEBGqy/Gi2GO24pTQEFruby1pRfDNLW7MqugTRFiinzbci9t xED0rVY7+IW9AHpLxNUhbNssl5dykA==

;; Query time: 48 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Apr 22 22:22:59 CST 2018
;; MSG SIZE  rcvd: 179

而在无法指定有效的DNS时,则应该使用如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dig linkthis.me +trace +short
NS b.root-servers.net. from server 8.8.8.8 in 0 ms.
NS m.root-servers.net. from server 8.8.8.8 in 0 ms.
NS g.root-servers.net. from server 8.8.8.8 in 0 ms.
NS c.root-servers.net. from server 8.8.8.8 in 0 ms.
NS f.root-servers.net. from server 8.8.8.8 in 0 ms.
NS d.root-servers.net. from server 8.8.8.8 in 0 ms.
NS h.root-servers.net. from server 8.8.8.8 in 0 ms.
NS j.root-servers.net. from server 8.8.8.8 in 0 ms.
NS a.root-servers.net. from server 8.8.8.8 in 0 ms.
NS k.root-servers.net. from server 8.8.8.8 in 0 ms.
NS e.root-servers.net. from server 8.8.8.8 in 0 ms.
NS l.root-servers.net. from server 8.8.8.8 in 0 ms.
NS i.root-servers.net. from server 8.8.8.8 in 0 ms.
RRSIG NS 8 0 518400 20180521170000 20180508160000 39570 . rreOFWriIJPwmQ9eV8MNcP3NXIVYoJniRs0jlXaZSGTS21NJzfwm0DnY GRfDuBR9VbwrTO/WZdrRLMJxJD8YJfwPPT/7cOF7yDKG5KllYXZ1XX12 zVckUyWJZ+5MgHF1qyeq7UqEGbrI6KNbnxRKyoF+FpW9kW/Ymx32uq6F PS6Jq14GWASxPHoLbh8clUugpCG1UzF9kTjFiip4I5XvcvZc89dJ20LN xmtx7u/8MA3aqmEXPnhIreZqUTOWVzhC0jciynclO3j2IEF6rn2kzXdp g641IWfAp6jENhhDcARvxPEQmMDnI6i07i0ZOKCRnOsDvuVPqKwaoqKZ sSjTvQ== from server 8.8.8.8 in 0 ms.
A 104.24.99.50 from server 173.245.58.221 in 1 ms.
A 104.24.98.50 from server 173.245.58.221 in 1 ms.
RRSIG A 13 2 300 20180512161618 20180510141618 35273 linkthis.me. G0PXy/11KxKY1HB8oQeDlwkau3bbdTOyjJUDmNEbQVdyTRGstIpRocEL piEQsRyJsnQBCM6xQsFpingU2/Dcww== from server 173.245.58.221 in 1 ms.

此命令会返回详细的域名查询记录,其中将包含RRSIG值。 当然你也可以使用网页工具DNSViz来检查配置情况。
DNSSEC的介绍可以参看:DNSSEC如何工作
下面是一些支持DNSSEC的域名注册商:

DNSSEC 域名注册商
支持 Nom, GoDaddy (only supports for a limited set of TLDs), Namecheap, DNSimple, Public Domain Registry, NameSilo, Name.com, Google Domains, Hover, Dynadot, DomainDiscount24, Gandi, 123-reg, Internet.bs, OVH, Joker.com, Moniker, Registro.br, GodZone, Tsohost, TransIP
不支持或者不完全支持 Network Solutions, FastDomain, DreamHost, 1&1 Internet, Wild West Domains, Reg.ru, OnlineNIC, Ascio, HiChina, ename.com, Xin Net, Bizcn.com, Register.com, Domain.com, Webfusion, Crazy domains, Mark Monitor, Big Rock, Mailnspace, NetEarthOne, Dotster, Hostway, InternetX, Register.com (Not currently supporting third party DNS)

加密

SSL

此设置控制Cloudflare的服务器在面对HTTPS请求时如何连接到您的源站。Cloudflare建议尽可能启用Full SSL (strict)。每种设置的情况如下:

  • Off:没有访问者能够使用HTTPS查看您的网站,他们将被重定向到HTTP。
  • Flexible SSL:你无法在源站上配置HTTPS,甚至连证书也不是属于你的网站的。访问者能够使用HTTPS访问您的网站,但是Cloudflare到源站的连接是HTTP。注意,你可能会因为源站的配置导致重定向循环
  • Full SSL:你的源站支持HTTPS,但是使用的证书与你的域名不匹配或者是自签的。Cloudflare将使用HTTPS连接到您的源站,但不会验证证书。
  • Full SSL (strict):您的源站使用有效的证书(未过期并由受信任的CA或Cloudflare Origin CA签发)。Cloudflare将使用HTTPS连接并验证每个请求的证书。

HSTS

HSTS是HTTP Strict Transport Security的缩写,即:“HTTP严格传输安全”。原理是在第一次访问HTTPS网站时,网站的回覆表头带有[Strict-Transport-Security]该表头会让浏览器记得,该网站提供HTTPS安全连接,并于下次连接中强制使用HTTPS。

在Nginx当中开启HSTS十分简单,只需往配置当中加入:

1
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

而在Cloudflare当中开启HSTS则更加简单,只需要根据面板指示开启全部选择即可。需要注意的是No-Sniff Header选项,此选项开启之后可能会造成IE9、IE11图片加载出现问题。

用户首次访问网站时是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。解决这个不足目前有三种方案,一是配置HTTP强制跳转HTTPS直接关闭80端口好了。二是浏览器预置HSTS域名列表,Google Chrome、Firefox、Internet Explorer和Microsoft Edge实现了这一方案。三是将HSTS信息加入到域名系统记录中。但这需要保证DNS的安全性,也就是需要部署域名系统安全扩展。

目前比较好的方法时加入HSTS preload list,即浏览器内置的HSTS预加载列表,你可以在HSTS Preload List Submission将自己的网站加入列表。不过如果你的网站无法保证一直提供HTTPS服务,那么请不要轻易使用HSTS,因为在max-age过期并且将域名从HSTS preload list移除之前,所有连接均会被重定向至HTTPS,造成网站无法正常访问。唯一的办法是换新域名不如关站

Authenticated Origin Pulls

Authenticated Origin Pulls允许你使用TLS客户端证书以加密的方式验证源请求服务器是否为CLoudflare所有。这样可以防止客户端直接向你的服务器发送请求,绕过Cloudflare提供的安全措施,例如IP和网页应用程序防火墙、日志记录和加密。
首先执行如下命令获取验证证书:

1
wget https://support.cloudflare.com/hc/en-us/article_attachments/360044928032/origin-pull-ca.pem -O cloudflare.crt

将其存放到你服务器上对应的证书存储位置,然后在Nginx的配置文件内添加如下的两行配置:

1
2
ssl_client_certificate /etc/nginx/certs/cloudflare.crt;
ssl_verify_client on;

之后在页面内开启Authenticated Origin Pulls选项。
在开启Authenticated Origin Pulls之后,SSL等级只能设置为Full SSL (strict),否则将会导致521错误。

Opportunistic Encryption

机会性加密使浏览器可以从HTTP/2的性能改进中受益,让浏览器知道你的网站支持加密连接。浏览器将继续在地址栏中显示“http”,而不是“https”。
不过机会性加密不是HTTPS的替代品。当需要强加密和身份验证时,仍应使用HTTPS。HTTP Opportunistic Encryption提供了在需要其它协议(如HTTP/2)时启用TLS的手段。它不会显示与HTTPS相同的安全指示(大多数浏览器地址栏中的绿色锁定图标)。
此功能在免费和专业计划中默认开启。机会性加密的具体说明可以阅读:机会性加密简介

TLS1.3

请选择Enabled+0RTT选项,其中0RTT可以提高用户的访问速度,因为其允许客户端在TLS完全建立之前就发送第一个请求,从而加快连接速度。

其它选项

都打开,没有什么影响。

防火墙

这个界面里面的大部分功能均需要专业或者商业计划才能开启。
开启之后可以追踪防火墙的工作日志等,并可以自定义各种拦截策略,还可以在自定义界面引入自定义规则,在此不做介绍。

加速

此页面中所有选项都应该开启,但有数个功能需要专业计划及以上方可使用。
在使用Rocket Loader的时候需要注意,此选项可能导致部分JavaScript失效,如果出现JavaScript失效的情况,你可能需要关闭此选项;或者在HTML script标签之前加入"data-cfasync='true'"属性,之后选择Manual选项即可。~
Cloudflare已经取消了Rocket LoaderManual选项,在免费计划和专业计划中只能选择开启或者关闭。

Enhanced HTTP/2 Prioritization

优化资源发送顺序且不依赖于浏览器。使用Safari或Edge浏览器的用户访问网站时的体验将得到很大的提升这两个浏览器有用户吗
从用户的角度来看,网页内容的加载速度取决于网页资源的加载顺序。使用HTTP/2时,通常情况下Cloudflare将遵循浏览器的请求顺序加载资源。这种顺序因浏览器而异,导致显著的性能差异。
启用HTTP/2优先级改善后,将以最佳顺序发送资源,以便在所有浏览器中获得最快的加载体验。

AMP Real URL

之前,在搜索结果中点击AMP页面会将访问者带到由google.com/amp/提供的缓存页面。AMP Real URL则支持移动端浏览器在显示您网站的实际网址时,继续使用Google AMP的缓存来提供内容。这一方案是通过加密签名交换完成的。AMP Real URL仅适用于与AMP规范兼容的页面。

缓存

在设置缓存等级时需要注意,Cloudflare默认不缓存HTML文件,所以我们需要在Page Rules界面内手动设置
如果你的网站有较多静态资源可以开启Always Online选项,可以保证网站在短暂的下线时间内依然可以访问。
调试模式开启时,你对网站做出的更改将实时生效,此模式会在开启三个小时后自动关闭

页面规则

Cloudflare在此界面提供了各种功能,将其组合可以实现页面重定向、强制使用HTTPS等多种功能。不过需要注意的是免费计划仅提供三条规则,专业计划则提供二十条规则。

由于水平所限太穷&懒,文章内容不免出现错误,如有什么问题,欢迎留言。
本文采用CC BY-NC-ND 4.0许可协议进行许可,转载请注明出处。

本文最后更新时间为:2019-12-19-Thursday-09:54:04 AM




Image of Wechat