规则是使用 Cloudflare 规则语言编写的——这是一种旨在模拟 Wireshark 语义的领域特定语言 (DSL)。欲了解更多信息,请参阅规则语言文档。
首先看一个简单的案例,了解如何匹配源 IP:
ip.src == 192.0.2.0通过逻辑运算符连接多个子句,表达式可以变得更加复杂:
ip.src == 192.0.2.1 && (tcp.flags.push || tcp.flags.reset)您可以使用 Cloudflare Network Firewall(前称 Magic Firewall)根据源或目标 IP、源或目标端口、协议、数据包长度或位字段匹配来跳过 (skip) 或阻止 (block)数据包。
Wirefilter 比较支持 CIDR 表示法,但仅限于在集合 (set) 内部。例如:
ip.src == 192.0.2.0/24 # 错误
ip.src in { 192.0.2.0/24 } # 正确表达式有复杂度限制,当表达式中包含许多连接或嵌套的子句时,很容易达到该限制。这里有一个示例:
(tcp.dstport == 1000 || tcp.dstport == 1001) && (tcp.dstport == 1002 || tcp.dstport == 1003) && (tcp.dstport == 1004 || tcp.dstport == 1005) && (tcp.dstport == 1006 || tcp.dstport == 1007) && (tcp.dstport == 1008 || tcp.dstport == 1009) && (tcp.dstport == 1010 || tcp.dstport == 1011) && (tcp.dstport == 1012 || tcp.dstport == 1013) && (tcp.dstport == 1014 || tcp.dstport == 1015) && (tcp.dstport == 1016 || tcp.dstport == 1017)如果达到了限制,响应将返回 400 状态码,并带有错误信息 ruleset exceeds complexity constraints (规则集超出复杂度限制)。请将表达式拆分为多个规则后重试。