← Cloudflare DDoS Protection / ddos-protection / advanced-ddos-systems / api / programmable-flow-protection
Типичные вызовы API
В следующих разделах приведены примеры запросов для распространённых вызовов API. Список доступных конечных точек API см. в Конечные точки.
Получить список всех программ
В этом примере получаются все программы Programmable Flow Protection в аккаунте.
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/programs" \
--header "Authorization: Bearer <API_TOKEN>"{
"result": [
{
"id": "<PROGRAM_ID>",
"name": "rate-limiter",
"status": "success",
"created_on": "<TIMESTAMP>",
"modified_on": "<TIMESTAMP>"
}
],
"success": true,
"errors": [],
"messages": []
}Загрузить программу
В этом примере загружается новая программа eBPF, написанная на C. Исходный код программы отправляется в теле запроса с Content-Type: text/plain.
Добавьте необязательный X-Program-Name заголовок, чтобы указать понятное человеку имя программы. Если он не указан, API создаёт UUID в качестве имени программы.
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/programs" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: text/plain" \
--header "X-Program-Name: my-rate-limiter" \
--data-binary "@/path/to/program.c"{
"result": {
"id": "<PROGRAM_ID>",
"name": "my-rate-limiter",
"status": "success",
"created_on": "<TIMESTAMP>",
"modified_on": "<TIMESTAMP>"
},
"success": true,
"errors": [],
"messages": []
}Если программа не проходит компиляцию или проверку, API возвращает подробное сообщение об ошибке:
{
"result": null,
"success": false,
"errors": [
{
"code": 1001,
"message": "Program verification failed: invalid memory access at line 42"
}
],
"messages": []
}Обновить программу
В этом примере обновляется существующая программа с новым исходным кодом. Программу можно обновить, даже если она используется одним или несколькими правилами. Если новая программа не проходит компиляцию или проверку, обновление завершается ошибкой, а существующая программа остается активной.
curl --request PATCH \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: text/plain" \
--data-binary "@/path/to/updated-program.c"{
"result": {
"id": "<PROGRAM_ID>",
"name": "program",
"status": "success",
"created_on": "<TIMESTAMP>",
"modified_on": "<TIMESTAMP>"
},
"success": true,
"errors": [],
"messages": []
}Удаление программы
В этом примере удаляется программа. Нельзя удалить программу, на которую ссылается активное правило.
curl --request DELETE \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}" \
--header "Authorization: Bearer <API_TOKEN>"{
"result": null,
"success": true,
"errors": [],
"messages": []
}Получить список всех правил
В этом примере получаются все правила Programmable Flow Protection в аккаунте.
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/rules" \
--header "Authorization: Bearer <API_TOKEN>"{
"result": [
{
"id": "<RULE_ID>",
"program_id": "<PROGRAM_ID>",
"scope": "global",
"name": "global",
"mode": "enabled",
"expression": "",
"created_on": "<TIMESTAMP>",
"modified_on": "<TIMESTAMP>"
}
],
"success": true,
"errors": [],
"messages": []
}Создание правила
В этом примере создается правило Programmable Flow Protection с глобальной областью действия в режиме мониторинга.
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/rules" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"program_id": "<PROGRAM_ID>",
"scope": "global",
"name": "global",
"mode": "monitoring"
}'{
"result": {
"id": "<RULE_ID>",
"program_id": "<PROGRAM_ID>",
"scope": "global",
"name": "global",
"mode": "monitoring",
"expression": "",
"created_on": "<TIMESTAMP>",
"modified_on": "<TIMESTAMP>"
},
"success": true,
"errors": [],
"messages": []
}См. Объекты JSON для получения дополнительной информации о полях в теле JSON.
Создание правила с региональной областью действия
В этом примере создается правило с областью действия, ограниченной регионом Западная Европа, с фильтром по выражению.
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/rules" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"program_id": "<PROGRAM_ID>",
"scope": "region",
"name": "WEUR",
"mode": "enabled",
"expression": "ip.dst in { 192.0.2.0/24 }"
}'{
"result": {
"id": "<RULE_ID>",
"program_id": "<PROGRAM_ID>",
"scope": "region",
"name": "WEUR",
"mode": "enabled",
"expression": "ip.dst in { 192.0.2.0/24 }",
"created_on": "<TIMESTAMP>",
"modified_on": "<TIMESTAMP>"
},
"success": true,
"errors": [],
"messages": []
}См. Объекты JSON для получения дополнительной информации о полях в теле JSON.
Обновить правило
В этом примере обновляется существующее правило. Можно изменить режим, область действия и выражение, но не программу. Чтобы изменить программу, удалите правило и создайте новое.
curl --request PATCH \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"mode": "enabled"
}'{
"result": {
"id": "<RULE_ID>",
"program_id": "<PROGRAM_ID>",
"scope": "global",
"name": "global",
"mode": "enabled",
"expression": "",
"created_on": "<TIMESTAMP>",
"modified_on": "<TIMESTAMP>"
},
"success": true,
"errors": [],
"messages": []
}См. Объекты JSON для получения дополнительной информации о полях в теле JSON.
Удаление правила
В этом примере удаляется существующее правило.
curl --request DELETE \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}" \
--header "Authorization: Bearer <API_TOKEN>"{
"result": null,
"success": true,
"errors": [],
"messages": []
}Отладка программы с помощью PCAP
В этом примере программа запускается на файле PCAP для отладки. API возвращает аннотированный файл PCAP с вердиктом программы для каждого пакета.
Тело запроса должно содержать файл PCAP в двоичном формате. API автоматически определяет смещение IP-заголовка на основе входного файла PCAP. Чтобы переопределить автоматическое определение, используйте необязательный ip_offset для указания количества байт смещения заголовка IP в каждом пакете (например, 14 для кадров Ethernet).
curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}/pcap" \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/vnd.tcpdump.pcap" \
--data-binary "@/path/to/input.pcap" \
--output output.pcapВыходной файл PCAP содержит те же пакеты, что и входной файл, но с аннотациями к каждому пакету. Аннотация Packet Comment может содержать:
- Возвращаемое значение программы:
CF_EBPF_PASSилиCF_EBPF_DROP Ignored: если входящий пакет не является UDP-пакетомAnalytics tag: пользовательский тег Network Analytics, заданный программой для этого пакета, если он естьChallenge packet: challenge-пакет, отправленный программой обратно клиенту, если он есть