分享两个 CloudFlare 的 WAF 规则

本文转自明月登楼的博客,作为 cloudflare 配置资料方便自己检索。

第一个规则

1693931751-1-1024x620-1

这个规则主要是针对 CC 攻击以及各种恶意爬虫、漏洞扫描的,主要依据是 ASN、CloudFlare 合法爬虫、用户代理(UA)来作为判断标准的。

第一项是 ASN

什么是 ASN(Autonomous System Number 自治系统号)

在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的号码,有时我们把这个号码叫做自治系统号(ASN)。

在互联网中,一个自治系统(英文:Autonomous system, AS)是指在一个(有时是多个)实体管辖下的所有 IP 网络和路由器的全体,它们对互联网执行共同的路由策略。参看 RFC 1930 中更新的定义。比如国内阿里云 ASN:37963、腾讯云 ASN:133478、华为云 ASN:55990 等等,当然还有移动、联通、电信都有他们各自的 ASN 甚至各个地区都有。

被 CC 攻击过的如果仔细观察日志会发现每次实施 CC 攻击的时候用的代理 IP 都不一样,看似很没有规律几乎遍布全球各地,其实借助上述的 ASN 可以非常好的过滤和应对这些 IP,准确率几乎都在 80%以上。

第二项合法机器人爬虫

这个是 CloudFlare 的大数据了,理论上来说合法的爬虫 IP 地址库都是固定的,至少不会经常的变,像谷歌爬虫官方都专门发布过具体的 IP 地址段和 UA,所以 CloudFlare 拥有一个这样的大数据也一点儿都不奇怪了,规则里加上这条主要是为了不拦截合法爬虫的。

第三项用户代理

这里的用户代理就是我们常说的 UserAgent(简称 UA),至于恶意 UA 随便百度一下就一大堆,大家根据自己的需要搜索添加即可,当然也可以复制下面明月分享的表达式粘贴到 CloudFlare 使用:


(ip.geoip.asnum in {37963 45090 55990 45102 12816 12786 18450 197540 24961 26496 46606 54600 60068 22773 18978 7922 61317 6079 397391 46562 22616 26347 45916 22394 202594 40676 398101 396362 6167 54290 135981 21686 7303 138997 22418 140224 46475 20001 43959 41378 29802 10013 9824 4766 209 43260 7565 40676 3786 28438 13287 3786 24641 54548 43754 205544 6461 141995 8047 35916 396253 64096 40021 32097 394380 9286 16509 9370 9318 6921 7713 4788 262186 13489 21353 13213 20473 2914 24940 8100 45102 36352 63949 14061 54994 12876 14618 36351 16276 133478} and not cf.client.bot and http.user_agent contains "grapeshotMJ12botDotBotAhrefsBotSemrushBotUptimebotZoominfoBotBLEXBotExtLinksBotaiHitBotResearchscanDnyzBotspbotMegaIndex.ruMail.RucensysExpansegdnplusALittleproximictoutiaoPulsePointfenqarchive.orgadmantxAppEngineElectronpetalbotnetnewswireCriteobazquxnetsystemsresearchNeevaChrome/6Chrome/5Chrome/4Chrome/7Chrome/8Chrome/9Hello, worldThinkChaosJava/lib?pythonhttp-clientokhttpl9explorel9tcpid")


上述的表达式代码使用很简单,CloudFlare 安全——WAF 里创建 WAF 规则点击“编辑表达式”后粘贴进去保存即可,如下图:

1693931773-2-1024x294-1

CloudFlare 所有的 WAF 规则都可以以这样的方式汇总编辑修改的,可以说是非常科学的。

第二个规则

1693931785-3-1024x726-1

对于国内网站来说借助 DNS 的多线路解析可以很好的拦截境外恶意请求,那么对于境外站点呢?当然也是有办法的,CloudFlare 的规则里可以非常灵活的来解决,就想上面这个规则就仅允许中国、香港、台湾、澳门的 IP 请求,其他地区的一律需要“托管质询”(可以理解为国内 CDN 的验证)。

当然下面还有几个条件,统一解释下来的意思就是请求来源 IP 不是中国、香港、台湾、澳门范围内的 IP 且不是合法爬虫或者IP 威胁分数(CloudFlare 的大数据表现之一)大于等于 30 分又或者用户代理包含了"Mozilla/"以及HTTP 版本不包含 HTTP/2、HTTP/3、SPDY/3.1 的一律要“托管质询”,详细表达式如下:


  • (not ip.geoip.country in {"CN" "HK" "MO" "TW"} and not cf.client.bot) or (cf.threat_score ge 30) or (not http.user_agent contains "Mozilla/") or (not http.request.version in {"HTTP/2" "HTTP/3" "SPDY/3.1"})

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注