← Cloudflare Ruleset Engine / ruleset-engine / custom-rulesets
Добавление правил в пользовательский набор правил
Чтобы добавить правила в существующий пользовательский набор правил, используйте Обновление набора правил уровня аккаунта или зоны операцию и передайте правила в массиве. У каждого правила есть выражение и действие.
Если вы используете Terraform, см. Настройка пользовательских правил WAF с помощью Terraform для примеров создания и развёртывания пользовательских наборов правил.
Если вы используете панель управления Cloudflare, обратитесь к Работа с пользовательскими наборами правил в дашборде.
Добавить правила
Следующий запрос добавляет два правила в пользовательский набор правил на уровне аккаунта с ID $RULESET_ID. Это будут единственные два правила в наборе правил.
В ответе будет указан ID новых правил в id поле.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Mass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteTransform Rules WriteSelect Configuration WriteAccount WAF WriteAccount Rulesets WriteLogs Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/$RULESET_ID" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"expression": "(ip.src.country in {\"GB\" \"FR\"} and cf.bot_management.score < 20 and not cf.bot_management.verified_bot)",
"action": "challenge",
"description": "challenge GB and FR based on bot score"
},
{
"expression": "not http.request.uri.path matches \"^/api/.*$\"",
"action": "challenge",
"description": "challenge not /api"
}
]
}'{
"result": {
"id": "<CUSTOM_RULESET_ID>",
"name": "Custom Ruleset 1",
"kind": "custom",
"version": "2",
"rules": [
{
"id": "<CUSTOM_RULE_ID_1>",
"version": "1",
"action": "challenge",
"expression": "(ip.src.country in {\"GB\" \"FR\"} and cf.bot_management.score < 20 and not cf.bot_management.verified_bot)",
"description": "challenge GB and FR based on bot score",
"last_updated": "2021-03-18T18:25:08.122758Z",
"ref": "<CUSTOM_RULE_REF_1>",
"enabled": true
},
{
"id": "<CUSTOM_RULE_ID_2>",
"version": "1",
"action": "challenge",
"expression": "not http.request.uri.path matches \"^/api/.*$\"",
"description": "challenge not /api",
"last_updated": "2021-03-18T18:25:08.122758Z",
"ref": "<CUSTOM_RULE_REF_2>",
"enabled": true
}
],
"last_updated": "2021-03-18T18:25:08.122758Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}Обновление правил
Чтобы обновить одно или несколько правил в пользовательском наборе правил, используйте Обновление набора правил уровня аккаунта или зоны операцию. Укажите идентификаторы правил, которые нужно изменить, в массиве rules и добавьте поля, которые нужно обновить. Запрос заменяет весь набор правил новой версией. Поэтому необходимо указать идентификаторы всех правил, которые нужно сохранить.
Следующие PUT запрос изменяет одно правило в пользовательском наборе правил на уровне аккаунта и обновляет порядок выполнения правил.
В ответе будет возвращён изменённый пользовательский набор правил. Обратите внимание, что номера версий обновлённого правила и набора правил увеличиваются.
Необходимые разрешения API-токена
Хотя бы одно из следующих права доступа токена требуется:Mass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteTransform Rules WriteSelect Configuration WriteAccount WAF WriteAccount Rulesets WriteLogs Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/$RULESET_ID" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"id": "<CUSTOM_RULE_ID_2>",
"expression": "not http.request.uri.path matches \"^/api/.*$\"",
"action": "js_challenge",
"description": "js_challenge when not /api"
},
{
"id": "<CUSTOM_RULE_ID_1>"
}
]
}'{
"result": {
"id": "<CUSTOM_RULESET_ID>",
"name": "Custom Ruleset 1",
"kind": "custom",
"version": "3",
"rules": [
{
"id": "<CUSTOM_RULE_ID_2>",
"version": "2",
"action": "js_challenge",
"expression": "not http.request.uri.path matches \"^/api/.*$\"",
"description": "js_challenge when not /api",
"last_updated": "2021-03-18T18:30:08.122758Z",
"ref": "<CUSTOM_RULE_ID_2>",
"enabled": true
},
{
"id": "<CUSTOM_RULE_ID_1>",
"version": "1",
"action": "challenge",
"expression": "(ip.src.country in {\"GB\" \"FR\"} and cf.bot_management.score < 20 and not cf.bot_management.verified_bot)",
"description": "challenge GB and FR based on bot score",
"last_updated": "2021-03-18T18:25:08.122758Z",
"ref": "<CUSTOM_RULE_ID_1>",
"enabled": true
}
],
"last_updated": "2021-03-18T18:30:08.122758Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}