Shield (WAF, DDoS en bots)
Web application firewall, DDoS-mitigatie en botdetectie per site, op basis van Bunny Shield.
Plan-gated. Elk Shield-endpoint retourneert 403 shield_not_in_plan
wanneer het product van de site Shield niet bevat. Premium-only writes
(botdetectie bijwerken, custom WAF-rule aanmaken) retourneren 403
shield_premium_required op een niet-premium plan. Reads die een ingerichte
shield-zone vereisen retourneren 409 shield_not_active. OAuth-scopes:
lezen sites:read, schrijven sites:write (deletes vereisen can_destroy).
Upstream Bunny-fouten retourneren 502.
Shield-zone
Shield-config ophalen
GET /api/sites/:site_id/shield
Retourneert 409 shield_not_active als de shield-zone niet is ingericht.
Geretourneerde params
- active: Boolean
- plan: String | basic, advanced, business, enterprise
- waf: Object | WAF-instellingen
- ddos: Object | DDoS-instellingen
- whitelabel_response_pages: Boolean
Shield activeren
POST /api/sites/:site_id/shield
Maakt de shield-zone aan. Retourneert 201. Retourneert 409 cdn_not_active
als er geen pull zone is om aan te koppelen.
Shield bijwerken
PATCH /api/sites/:site_id/shield
Params (allemaal optioneel)
- plan_type: Integer | 0=basic, 1=advanced, 2=business, 3=enterprise
- premium: Boolean | back-compat alias voor plan_type (true=1, false=0)
- learning_mode: Boolean
- waf_enabled: Boolean
- waf_execution_mode: Integer
- waf_disabled_rules:
Array<String>| ruleId-strings - waf_log_only_rules:
Array<String>| ruleId-strings - ddos_sensitivity: Integer
- ddos_execution_mode: Integer
- ddos_challenge_window: Integer
- whitelabel_response_pages: Boolean
Shield deactiveren
DELETE /api/sites/:site_id/shield
Soft deactivate — schakelt WAF en DDoS uit.
WAF
WAF-config ophalen
GET /api/sites/:site_id/shield/waf
WAF-config bijwerken
PATCH /api/sites/:site_id/shield/waf
Params (allemaal optioneel)
- waf_enabled: Boolean
- waf_execution_mode: Integer | 0=Log, 1=Block
- waf_disabled_rules:
Array<String>| ruleId-strings - waf_log_only_rules:
Array<String>| ruleId-strings
Beheerde WAF-rules weergeven
GET /api/sites/:site_id/shield/waf/rules
Retourneert een kale array van beheerde WAF-rulegroepen.
Custom WAF-rules
Weergeven
GET /api/sites/:site_id/shield/waf_custom_rules
Aanmaken
POST /api/sites/:site_id/shield/waf_custom_rules
Premium-only. Retourneert 201.
Params
- rule_name: String (vereist)
- rule_description: String (optioneel)
- rule_configuration: Object
- action_type: Integer | 1=Block, 2=Log, 3=Challenge, 4=Allow, 5=Bypass
- variable_type: String | bijv. REQUEST_HEADERS
- variable_subselector: String | bijv. "User-Agent"
- operator_type: Integer
- severity_type: Integer | 0=NOTICE, 1=WARNING, 2=CRITICAL
- value: String | de matchwaarde
Bijwerken
PATCH /api/sites/:site_id/shield/waf_custom_rules/:id
Niet premium-gated.
Verwijderen
DELETE /api/sites/:site_id/shield/waf_custom_rules/:id
Retourneert 204. Vereist de can_destroy-rol.
Botdetectie
Config ophalen
GET /api/sites/:site_id/shield/bot_detection
Config bijwerken
PATCH /api/sites/:site_id/shield/bot_detection
Premium-only (403 shield_premium_required).
Params (allemaal optioneel)
- execution_mode: Integer
- request_integrity_sensitivity: Integer
- ip_address_sensitivity: Integer
- browser_fingerprint_sensitivity: Integer
- browser_fingerprint_aggression: Integer
- browser_fingerprint_complex_enabled: Boolean
Rate limits
Weergeven
GET /api/sites/:site_id/shield/rate_limits
Aanmaken
POST /api/sites/:site_id/shield/rate_limits
Retourneert 201.
Params
- rule_name: String | alleen letters, cijfers en spaties (zie hieronder)
- rule_description: String | dezelfde tekenset als
rule_name; mag leeg zijn - rule_configuration: Object | letterlijk doorgestuurd naar Bunny's rate-limit-rule-schema
Tekenset voor namen
rule_name en rule_description mogen alleen ASCII-letters, cijfers en
spaties bevatten — Bunny weigert koppeltekens, underscores, punten en
niet-ASCII. Een ongeldige waarde wordt pre-flight opgevangen en retourneert
422 {"error":"Rule name can only contain letters, numbers, and spaces."}
(of "Rule description ..."), niet een 502 van Bunny.
Bijwerken
PATCH /api/sites/:site_id/shield/rate_limits/:id
Dezelfde params en naamvalidatie als Aanmaken.
Verwijderen
DELETE /api/sites/:site_id/shield/rate_limits/:id
Retourneert 204. Vereist de can_destroy-rol.
Access lists
Weergeven
GET /api/sites/:site_id/shield/access_lists
Enums weergeven
GET /api/sites/:site_id/shield/access_lists/enums
Beschikbare enum-waarden voor type van access lists.
Bekijken
GET /api/sites/:site_id/shield/access_lists/:id
Aanmaken
POST /api/sites/:site_id/shield/access_lists
Retourneert 201.
Params
- name: String
- description: String
- type: Integer
- content: String | door newlines gescheiden vermeldingen
- checksum: String
Bijwerken
PATCH /api/sites/:site_id/shield/access_lists/:id
Verwijderen
DELETE /api/sites/:site_id/shield/access_lists/:id
Retourneert 204. Vereist de can_destroy-rol.
Events
GET /api/sites/:site_id/shield/events
Shield WAF/DDoS-eventlog voor een bepaalde datum.
Params
- date: String |
MM-DD-YYYY(standaard vandaag) - continue: String | continuation-token voor paginatie (optioneel)
Geretourneerde params
- logs: Array
- hasMoreData: Boolean
- continuationToken: String
- startToken: String
Shield-metrics
Deze metric-endpoints zijn niet plan-gated, maar retourneren nog steeds
409 shield_not_active wanneer er geen shield-zone is of de upstream
stats-payload leeg terugkomt. Scope: sites:read.
Individuele stats
GET /api/sites/:site_id/metrics/shield
Individuele DDoS-, bot- en WAF-stats over de afgelopen 28 dagen.
Geretourneerde params
- ddos: Array van series | logged, verified, blocked, challenged
- bots: Array van series | logged, challenged
- waf: Array van series | getriggerde events
Elke serie: { name: String, data: [ { x: "2026-05-01", y: 0 } ] }.
Overzichtsstats
GET /api/sites/:site_id/metrics/shield/overview
DDoS-aanvallen + WAF-triggers over de afgelopen 28 dagen. Retourneert een kale
array van series: [ { name: "DDoS Attacks", data: [...] }, { name: "WAF Triggers", data: [...] } ].