ルールは Cloudflare Rules language で書きます。Wireshark の意味論に似せたドメイン特化言語(DSL)です。詳細は Rules language のドキュメントを参照してください。
簡単な例として、送信元 IP に一致させる書き方を確認します。この式では、ip.src は着信パケットの送信元 IP アドレスを指し、== は「等しい」を意味します。
ip.src == 192.0.2.0論理演算子で複数の句をつなぐと、式はより複雑になります(&& は AND、|| は OR)。次の式は、192.0.2.1 からのパケットのうち、TCP の push フラグまたは reset フラグが立っているものに一致します。
ip.src == 192.0.2.1 && (tcp.flags.push || tcp.flags.reset)Cloudflare Network Firewall では、送信元または宛先の IP、送信元または宛先のポート、プロトコル、パケット長、ビットフィールド一致 に基づいて、パケット をスキップまたはブロックできます。
式エンジンは CIDR 表記(192.0.2.0/24 のような IP アドレス範囲)に対応しますが、中括弧のセット内でのみ使えます。単純な比較では期待どおり動きません。
ip.src == 192.0.2.0/24 # bad
ip.src in { 192.0.2.0/24 } # good式には複雑さの上限があり、結合や入れ子の句が多いと簡単に達します。次がその例です。
(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 になります。式を複数のルールに分割して、もう一度試してください。各ルールが条件の一部を担当し、ファイアウォールは順に評価します。