Cloudflare是个好东西,至于有多好、好在哪这里就不再絮叨,具体可以去问 ChatGPT。总之对于一个开发者来说,不知道或还没用上的,算是很大的损失吧…本文将针对其安全性配置,尤其是在优化爬虫和恶意流量攻击之间做一个配置指南。
因为前段时间发现有恶意扫描请求到我的站点,看了下 Web 攻防这块,恰好 cloudflare 自带各类安全设置,所以就摸索了下、配置了若干…
后来发现google-search-console没能抓取到已提交的搜录请求,分析了下被拒的原因,发现是之前在 cloudflare 后台配置安全策略时,有些防卫过当了
被各种拒绝
Google Search
Bing Search
原因分析
先前基于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.0
及disqus.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
- 规则集:阻止
- 规则集敏感度:高
设置
- 安全级别选
高
(一般不要选:I’m Under Attack,顾名思义这个是当你正在被黑时的开关); - 质询通过期,选
30分钟
就够了。这个意思是质询一次后,隔多久再发出质询; - 浏览器完整性检查:打开
结果验证
重新摁下站点地图提交后
在 Cloudflare 的后台可以看到,来自搜索引擎方面的检测请求已经跳过