1

如何避免Cloudflare背后的源站被恶意访问

 1 year ago
source link: https://mabbs.github.io/2022/08/15/cdn-verify.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

15 August 2022 - 字数统计:1295 - 阅读大约需要4分钟 - Hits: 27

如何避免Cloudflare背后的源站被恶意访问

by mayx


Cloudflare还是非常完善的,只是我们不会用!

很久以前我写过一篇文章是介绍关于如何简单的找到Cloudflare背后源站IP的文章。虽然当时的我知道设置了防火墙白名单可以有效的解决这类问题。
不过随着Cloudflare的业务越来越广泛,设置白名单这种方法我感觉已经很不靠谱了。而且最近也遇到一个问题,就是花火学园的用户有些人会使用自动签到的脚本,比如ForumSignin,使用这种脚本破坏了大家公平竞争的原则。虽然我用Cloudflare WAF写了一个很简单的规则解决掉了这个问题,但是万一有人悄悄的绕过了Cloudflare直接访问源站的方式签到那我设置的防火墙就没有一点点用处了。今天正好看到了Cloudflare的双向认证的功能,配置好之后也正好分享一下。

关于防火墙白名单的缺陷

我们现在已经知道了Cloudflare除了本身CDN的业务外还加了很多花里胡哨的功能,比如Workers,WARP之类的,这些功能有一个特点就是能利用Cloudflare自己的IP来任意发起请求,那防火墙本来就是通过检测访问的IP是不是来自Cloudflare这种方式来判断,那如果能使用这些功能来向我的源站发起请求不就可以绕过WAF了嘛。

以前我的想法是如果Cloudflare能发送一个只有我和Cloudflare知道的请求头那不就可以了嘛,比如Token啥的,但是我没在Cloudflare上发现这个功能。不过今天又没事看了看Cloudflare的功能,发现居然有个叫做“经过身份验证的源服务器拉取”功能,看了看功能解释,原来这是通过双向认证实现的,这配置起来也非常的简单,所以就按照配置文档的说明设置了。
如果看不懂英文,我大概解释一下,首先下载Cloudflare 客户端CA,如果是Apache服务器就直接在配置文件里面写:

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /path/to/authenticated_origin_pull_ca.pem

不过Nginx使用这个功能貌似要crt格式的证书,可以执行openssl x509 -in authenticated_origin_pull_ca.pem -out cloudflare.crt获得crt证书,然后再配置:

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

就可以了。
设置完之后,如果我不开“经过身份验证的源服务器拉取”的功能,就会报“400 Bad Request, No required SSL certificate was sent”的错误,这个效果我非常的满意,这样即使其他人通过比如Workers,WARP之类的功能去请求我的源站IP,也会因为没有Cloudflare的私钥而无法访问,就可以完全避免通过源站IP来绕过WAF这种问题。

不过这个配置实在是不够显眼,希望Cloudflare能把它放到新手教程里面,让更多人避免因为源站IP泄露导致的安全问题。

tags: Cloudflare - CDN - 安全

Gitalking ...


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK