← Cloudflare Network Firewall / cloudflare-network-firewall / how-to
Выражения форм
Правила пишутся на языке Cloudflare Rules language, предметно-ориентированном языке (DSL), имитирующем семантику Wireshark. Дополнительную информацию вы найдёте в Язык правил документация.
Начните с простого случая и посмотрите ниже, как можно сопоставить 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-адреса, исходного или целевого порта, протокола, длины пакета или bit field match.
Ограничения
Сравнения Wirefilter поддерживают нотацию CIDR, но только внутри наборов. Например:
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. Разделите выражение на несколько правил и повторите попытку.