← Cloudflare One / cloudflare-one / traffic-policies / packet-filtering
Výrazy formuláře
Pravidla se zapisují v jazyce Cloudflare Rules: doménově specifickém jazyce (DSL), který má napodobovat sémantiku nástroje Wireshark. Další informace najdete v Rules language dokumentace.
Pro začátek se podívejte na jednoduchý příklad, jak porovnat zdrojovou IP adresu. V tomto výrazu ip.src označuje zdrojovou IP adresu příchozího paketu a == znamená „rovná se“:
ip.src == 192.0.2.0Výrazy mohou být složitější, pokud spojíte více klauzulí pomocí logického operátoru (&& znamená AND, || znamená OR). Následující výraz odpovídá paketům z 192.0.2.1 které mají také nastaven příznak TCP PUSH nebo RESET:
ip.src == 192.0.2.1 && (tcp.flags.push || tcp.flags.reset)Možnosti
Pomocí Cloudflare Network Firewall můžete přeskočit nebo blokovat pakety na základě zdrojové nebo cílové IP adresy, zdrojového nebo cílového portu, protokolu, délky paketu nebo bit field match.
Omezení
Nástroj pro vyhodnocování výrazů podporuje zápis CIDR (rozsahy IP adres, například 192.0.2.0/24), ale pouze uvnitř množin ve složených závorkách. Holé porovnání nebude fungovat podle očekávání:
ip.src == 192.0.2.0/24 # bad
ip.src in { 192.0.2.0/24 } # goodVýrazy mají limit složitosti, kterého lze snadno dosáhnout, pokud výraz obsahuje mnoho spojených nebo vnořených klauzulí. Zde je příklad:
(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)Pokud je limit dosažen, odpověď bude obsahovat 400 stavový kód a chybovou zprávu ruleset exceeds complexity constraints. Rozdělte výraz do více pravidel a zkuste to znovu. Každé pravidlo může zpracovat podmnožinu podmínek a firewall je vyhodnocuje v pořadí.