Cloudflare是个好东西,至于有多好、好在哪这里就不再絮叨,具体可以去问ChatGPT。总之对于一个开发者来说,不知道或还没用上的,算是很大的损失吧…本文将针对其安全性配置,尤其是在优化爬虫和恶意流量攻击之间做一个配置指南。

因为前段时间发现有恶意扫描请求到我的站点,看了下Web攻防这块,恰好cloudflare自带各类安全设置,所以就摸索了下、配置了若干…

后来发现google-search-console没能抓取到已提交的搜录请求,分析了下被拒的原因,发现是之前在cloudflare后台配置安全策略时,有些防卫过当了

被各种拒绝

原因分析

先前基于WAF规则,做了很多配置。主要思路是开放正常请求 和 主流搜索引擎爬虫访问,但是分析日志后发现,有一些来自Google和Bing的请求403了

这些请求中,用户代理基本上没什么问题,但是协议有的是1.1、有的是1.2。另外多项规则设置中,匹配到爬虫并没有完全放开,以至于对后续规则进行了匹配,刚好卡在了阻止或需要验证的那一项。如上文图示的各种访问不到

另外发现,自动程序这项开启后,对于Bing后台的检测请求会执行失败,比如检测站点地图或robot.txt等都会失败

优化后的配置项

所有本文提到的配置,均基于免费版配置。诸如需要升级套餐的配置不在讨论范围内。

WAF

自定义规则

总览

跳过(爬虫放行)
(cf.client.bot) or (http.user_agent contains "Googlebot") or (http.user_agent contains "Google-InspectionTool") or (http.user_agent contains "Google-Extended") or (http.user_agent contains "Google-Display-Ads-Bot") or (http.user_agent contains "Feedfetcher-Google") or (http.user_agent contains "Mediapartners-Google") or (http.user_agent contains "bing") or (http.user_agent contains "bingbot") or (http.user_agent contains "duckduckgo") or (http.user_agent contains "facebookexternalhit") or (http.user_agent contains "dproxy/1.0") or (http.user_agent contains "disqus.com")

其中dproxy/1.0disqus.com是对Disqus评论组件放行,如果站点加了类似的三方模块,需要单独设置一下。
另外需要注意的是,在要跳过的 WAF 组件里,需要勾选一下你想跳过的检查,否则会出现误伤。之前爬虫被拒,极大可能就是这里没处理好

托管质疑(恶意流量验证)
(ip.geoip.country in {"T1"}) or (not http.user_agent contains "Mozilla/") or (not http.request.version in {"HTTP/1.2" "HTTP/2" "HTTP/3" "SPDY/3.1"}) or (cf.threat_score ge 15 and not cf.client.bot)

以上规则含义:非正常代理请求匿名网络请求HTTP1.2以下协议威胁分数大于15 均发出质疑

阻止(恶意流量阻止)
(http.user_agent eq "") or (http.user_agent eq "undefined") or (http.user_agent contains "null") or (http.user_agent contains "python") or (http.user_agent contains "node") or (http.user_agent contains "Go-http") or (http.user_agent contains "Java") or (http.user_agent contains "libweb") or (http.user_agent contains "libwww") or (http.user_agent contains "PHPCrawl") or (http.user_agent contains "PyCurl") or (http.user_agent contains "Gscan") or (http.user_agent contains "scanbot") or (http.user_agent contains "WPScan") or (http.request.uri.path in {"/admin" "/login" "/user" "/.git" "/www" "/wp-content" "/wp-admin" "//" "/wp" "/shop"})

对于空代理代码扫描网站扫描工具特定目录频繁(试探)访问的都要阻止,这里可以根据安全线事件中的日志去分析,那些流量请求需要毙掉

速率限制规则

我的配置很简单,基于站点特定内容或目录,进行限速。具体速率限制条件,可根据自己的情况调整。我的是10秒内5000,也就是QPS 500以上就限速…

(http.request.uri.path in {"/" "/about" "/categories"})

如果是用来做API服务的,可以(根据实际情况)酌情调大…

自动程序

最近新出了个AI Scrapers and Crawlers,看意思是用来屏蔽大模型爬虫抓网站内容训练的。如果没特殊问题开放即可

对于这两项,我目前都关闭了。特别是自动程序攻击模式这个,貌似会误伤爬虫或爬虫管理后台的检测服务

DDoS

  1. 规则集:阻止
  2. 规则集敏感度:高

设置

  1. 安全级别选(一般不要选:I’m Under Attack,顾名思义这个是当你正在被黑时的开关);
  2. 质询通过期,选30分钟就够了。这个意思是质询一次后,隔多久再发出质询;
  3. 浏览器完整性检查:打开

结果验证

重新摁下站点地图提交后


在Cloudflare的后台可以看到,来自搜索引擎方面的检测请求已经跳过