树洞剪藏#剪藏#树洞剪藏

[分享] 基于Cloudflare Pro和 Snippets 的WAF防护规则

2024 年 12 月 17 日1 分钟
分享Twitter / XTelegram微博
[分享] 基于Cloudflare Pro和 Snippets 的WAF防护规则 封面

同步来源:树洞剪藏 源站剪藏 ID:411 原文地址:https://www.nodeseek.com/post-221850-2

打开原文 · 打开源站剪藏快照


[分享] 基于Cloudflare Pro和 Snippets 的WAF防护规则

set 限制解除 NodeSeek beta 日常 技术 情报 测评 交易 拼车 推广

[分享] 基于Cloudflare Pro和 Snippets 的WAF防护规则

IPLark Lv 2 楼主 5h 48min ago edited 38min ago in 技术 #0

本文尝试分享一些基于Cloudflare Pro 以及 Snippets 的防护规则/配置/代码。在规则方面,尽可能做到精简。

世界上不可能有两个一模一样的站点(就算内容、程序一样,流量也不可能完全一样),所以也不可能有适配所有网站的通用WAF规则。本文例子中的站点为虚构站点( f47fb81b34.com ,该网站是使用了开源程序typecho搭建的个人博客,日流量2000 IP左右),以下规则是针对该站点的。

注:以下内容 仅供参考 。

  1. 对搜索引擎等友好爬虫进行过白

后续的WAF规则会对爬虫进行拦截,在这些规则之前,我们需要对友好的爬虫进行过白。假设我们需要将搜索引擎以及指定IP(13.3.3.3)纳入白名单。

点击安全性,选择WAF,创建规则。 请注意,该规则需要放置在后续其他拦截规则之前 。

注:Google Search Console的抓取工具属于Google Inspection Tool,该工具在Cloudflare Radar( https://radar.cloudflare.com/traffic/verified-bots )的分类中为安全性。

在极少数场景下,Cloudflare 可能对搜索引擎的判断有误,这会导致极少数情况下无法对搜索引擎自动过白,这时候我们需要手动将搜索引擎IP纳入ip list里。

谷歌ip list可参考

https: / / developers.google.com / search / apis / ipranges / googlebot.json https: / / developers.google.com / search / apis / ipranges / user - triggered - fetchers.json https: / / developers.google.com / search / apis / ipranges / user - triggered - fetchers - google.json

必应ip list可参考

https://www.bing.com/toolbox/bingbot.json

IPlist的创建方法如下:

点击管理账户。

点击配置。

点击列表,创建一个新的iplist。

将需要过白的ip或ip段导入。

如图所示

回到刚才的WAF规则,重新编辑whitelist规则。

  1. 屏蔽恶意bot以及异常的请求

创建一条新规则,放置在whitelist之后,命名为block,采取措施为阻止。

表达式

(not len (http.request.headers[ "accept-language" ]) > 0 ) or (not starts_with (http.user_agent, "Mozilla/5.0" ) ) or (http.user_agent contains "bot" ) or (ip.src.country in { "T1" }) or (http.user_agent contains "Bot" ) or (http.user_agent contains "http" ) or (http.user_agent contains "rawler" ) or (http.user_agent contains "pider" )

注:

CF防火墙的UA匹配是区分大小写的,部分bot UA会包含bot而部分会包含Bot,所以需要区分开来,而少部分UA可能会包含crawler或Crawler,所以上述规则用rawler匹配两种情况。

正常的浏览器访客的UA都是以Mozilla/5.0开头且accept-language必定不为空。

部分扫描程序的ua会包含http,但不包含bot,用UA包含http可以匹配并封禁掉众多公开扫描程序。比如 Censys

部分Botnet来源于Tor节点,可根据实际情况觉得是否禁止tor用户访问。

Mozilla / 5.0 (compatible; CensysInspect/ 1.1 ; + https : //about.censys.io/)

  1. 对部分异常流量进行质询

假设网站大部分用户都来自中文用户,那么可以accept-language进行进一步判断,比如大部分中文访客的accept-language都包含zh,如果请求中accept-language不包含zh,那么有可能为异常流量。且大多访客的http版本为http2和http3,就此我们可以设置一条新规则challenge,放在block规则之下。

注:启用该规则后,正常访客有可能(小概率事件)也被要求完成人机验证。

此外,CF有三种类型的人机验证,分别是交互式质询、托管质询和JS质询,JS质询无需用户点击,由浏览器自动执行脚本并完成验证,交互式质询需要用户点击确认框,而托管质询介于两者之间,根据用户环境,由CF选择对用户实行JS还是交互式质询。

  1. 对部分疑似恶意的请求进行质询/阻止

该规则组匹配的内容较多,篇幅有限,就不一一说明了。

表达式如下

(http.user_agent contains "MSIE" ) or ( not http.request.method in { "GET" "POST" "HEAD" }) or (http.request.full_uri contains "well-known" ) or ( len (http.request.headers[ "via" ]) > 0 ) or (http.user_agent contains "; +" ) or (http.request.uri.path contains "//" ) or (http.x_forwarded_for contains "." ) or ( len (http.request.headers[ "x-forwarded-host" ]) > 0 ) or ( len (http.request.headers[ "cdn-loop" ]) > 0 ) or ( len (http.request.headers[ "cf-ew-via" ]) > 0 ) or (http.user_agent contains "\x09" ) or (http.user_agent contains "Trident" ) or (http.user_agent contains "Headless" ) or (http.request.uri contains "--+" ) or (http.user_agent contains "{" ) or (http.user_agent contains "$" ) or (http.user_agent contains "<" ) or (http.user_agent contains "script" ) or (http.request.uri contains "\x" ) or ( any (http.request.headers[ "sec-fetch-site" ][] contains "cr" ) and any (http.request.headers[ "sec-fetch-mode" ][] contains "no" ))

此规则组误报率极低,视实际情况,选择质询或阻止。

  1. 配置超级自动程序攻击模式(Super Bot Fight)

点击安全性,选择自动程序。

开启后,CF会对部分模拟浏览器的自动化请求进行拦截(大概率是基于tls指纹,屏蔽了curl、golang等常见的tls指纹)。对低级的自动化请求有一定效果,聊胜于无。Business及以上版本可以开启对 likely automated 的请求的识别和阻止。

  1. 开启托管规则集,并进行微调

编辑该规则,参考下图,对部分默认规则进行覆盖。

  1. 开启DDoS规则覆盖,微调默认规则

点击编辑规则,搜索impersonate,修改部分参数,如下图所示,然后保存。

  1. 调整安全级别、开启浏览器完整性检查

点击安全性,选择设置,将安全级别由默认值改为高,并开启浏览器完整性检查。

注:该功能作用甚微。

  1. 关闭IPv6、Pseudo IPv4以及洋葱路由

注:可根据实际情况决定是否关闭。关闭IPv6需借助api。

借助api关闭ipv6后,还需进一步在WAF规则里对 ::/0 进行屏蔽。

  1. 开启速率限制

在WAF中开启速率限制,具体配置需视情况而定。

  1. 利用Snippets做一个简易的302 cookie验证

当我们请求path.net时,会发现网站会返回307状态码,且在响应头里有一个名为CRANE的cookie,正常浏览器访问会根据网站响应头,设置cookie,这样第二次访问的时浏览器就会携带cookie访问 path.net ,而低级的自动化程序是无法自动获取并携带cookie去请求网站的,而这将会让程序陷入无尽的307循环,如下图所示。

据此,我们可以利用Cloudflare的Snippets做一个类似的简易人机验证,我们将访客的IP、访客UA以及自定义key进行组合,然后sha256对组合进行加密,并通过响应头发送给访客,访客访问网站时需携带snippets发送的cookie进行请求,才能顺利访问网站。

点击网站规则,选择Snippets,点击创建片段。

代码如下(仅供参考,自行修改secretKey的值)

export default { async fetch ( request ) { const clientIp = request. headers . get ( 'cf-connecting-ip' ) || "" ; const ua = request. headers . get ( 'user-agent' ) || "" ; const secretKey = "h*dUm|mdS^6=QB)y" ;

// 组合并生成哈希值 const signatureBase = ${clientIp} ${ua} ${secretKey} ; const encoder = new TextEncoder (); const data = encoder. encode (signatureBase); const hashBuffer = await crypto. subtle . digest ( 'SHA-256' , data); const hashArray = Array . from ( new Uint8Array (hashBuffer)); const hashHex = hashArray. map ( b => b. toString ( 16 ). padStart ( 2 , '0' )). join ( '' );

let cookies = request. headers . get ( 'Cookie' ) || "" ;

// 检查是否包含特定的 Cookie if (cookies. includes (hashHex)) { // 如果已经包含,直接返回原始请求 return await fetch (request); } else { // 否则生成重定向响应 const newResponse = new Response ( null , { status : 302 , headers : { "Set-Cookie" : _test= ${hashHex} ; Path=/; HttpOnly , "Location" : request. url , } }); return newResponse; } }, };

根据实际情况,匹配snippets生效规则。

注:

1.该snippets没有对搜索引擎进行过白,如果需要过白部分请求,需要做额外的处理。

2.该snippets具有一定局限性,可以考虑纳入更多的请求参数,进一步完善snippets。

3.该snippets对高阶的自动化请求无效。

  1. Snnippets拓展

例如可以利用snippets创建点击验证、验证码验证、hcaptcha验证等。

一些示例 (需用海外IP访问)

点击验证

https://iplark.com/playground/captcha/click

图片验证码

https://iplark.com/playground/captcha/image

Hcaptcha

https://iplark.com/playground/captcha/hcaptcha

首发于NodeSeek,转载请注明出处。

IPLark https://iplark.com/

IP查询 https://iplark.com/search

本机IP https://iplark.com/myip

IPLark—简约易用的IP地址在线查询工具

6 0 23 引用 回复

1 2

IPLark 楼主 5h 47min ago #1

占楼。

IPLark—简约易用的IP地址在线查询工具

0 0 引用 回复

sug210 5h 43min ago #2

支持

TG | 椰子大陆接码 | 针爱

0 0 引用 回复

poi 5h 17min ago #3

学习下看看,太强了

TG | pm | 收建站机 | 混迹于loc,交易看loc信誉

0 0 引用 回复

Doon 4h 39min ago #4

Nice!

0 0 引用 回复

Laythe 1h 48min ago #5

挑个虫,Hcaptcha的链接给错了

0 0 引用 回复

Mofeng 1h 29min ago #6

可以😌

✈️ TG联系 |❤️ 探针

0 0 引用 回复

IPLark 楼主 37min ago #7

@Laythe #5

已更正。👀

IPLark—简约易用的IP地址在线查询工具

0 0 引用 回复

lily 33min ago #8

大佬厉害,收藏了

0 0 引用 回复

dGgeaGqY 18min ago #9

好贴

0 0 引用 回复

将离 5min ago #10

厉害了

0 0 引用 回复

酒神 管理 9min ago #11

可能是目前NS站内最为综合全面的 cloudflare 安全类文章,没有误导性设置,细节到位,非常有价值

人生得意须尽欢,莫使金樽空对月

raingp 7min ago #12

bd

1 2

内容 预览 对照

支持 markdown语法

鼓励友善发言,禁止人身攻击

xxxxxxxxxx

1

1 ​

AC娘

洋葱头

小黄鸡

发布评论

88

等级 Lv 4 鸡腿 2021 关注 0 回复 0 我 0

主题帖 11 评论数 301 粉丝 2 收藏 211 私信 0 发帖

快捷功能区 推荐阅读 管理记录 幸运抽奖 邀请好友 合作商家 友站链接

所有版块 日常 技术 情报 测评 交易 曝光 拼车 生活 贴图 推广 内版 Dev 无意义 沙盒

📈用户数目📈

目前论坛共有23985位seeker

🎉欢迎新用户🎉

达文西

晁错

3466039780

LMark

121200693

luoyimm

kat

ZUZUZU

相关网站 LowEndTalk LowEndSpirit HostLoc ServerHunter

站内导航 关于本站 隐私协议 RSS订阅 sitemap

商业推广 商家申请规则 Premium Provider 合作商家展示

其他平台 电报频道 电报群组

联系我们

Copyright © 2022 - 2024 All rights Reserved

相关文章