Skip to content

Actions

You choose what happens when a rule matches in the console’s Actions section; the headings on this page match the console boxes one-to-one. Several actions can be combined; only one protection action and only one parameterized action per rule. The THEN {key} notation in the examples is a representative summary written with the action’s technical name.


Single select — one protection decision per request; click again to deselect.

In the consoleKeyWhat it does
BlockblockBlocks the request and shows the block page (403)
CAPTCHAcaptchaRequires CAPTCHA verification
JS ChallengejsApplies a JavaScript challenge — invisible to the user
AllowallowLifts blocks applied by earlier rules and skips the remaining rules
Log (observe only)logOnly writes to the Access Logs; nothing else happens
IF ip.country in RU, CN, KP
THEN block
IF waf.bot_score ge 70
THEN captcha
IF waf.client.ip_type == hosting
THEN js
IF ip.list in "office-ips"
THEN allow
IF http.request.base_uri has_prefix /admin
THEN log

With these selections in the console:

  • Country block — Field Country · Operator in list · Value RU, CN, KP → Action Block
  • CAPTCHA on bot score — Field Bot Score (0–100) · Operator greater or equal · Value 70 → Action CAPTCHA
  • JS for datacenters — Field IP Infrastructure Type · Operator equals · Value hosting → Action JS Challenge
  • Allow the office list — Field IP List · Operator in list · Value office-ips → Action Allow
  • Observe the admin panel — Field Path (without query) · Operator starts with · Value /admin → Action Log (observe only)

Multi-select — exempts the matching request from active challenge and limit layers. Apply to trusted sources only.

In the consoleKeyWhat it skips
Bypass CAPTCHAbypasscaptchaThe active CAPTCHA mode
Bypass JSbypassjsThe active JS challenge
Bypass Rate LimitbypassratelimitThe domain-wide rate limit
In the consoleKeyWhat it skips
Bypass Deny ListbypassdenylistThe Threat Intelligence deny list
Bypass Managed RulesbypassmanagedruleHEIMWALL Managed Rules
Bypass OWASPbypassowaspOWASP signature scanning
# Office IPs exempt from CAPTCHA
IF ip.list in "office-ips"
THEN bypasscaptcha
# Partner services exempt from rate limits
IF ip.list in "trusted-partners"
THEN bypassratelimit
# CMS admin panel exempt from managed rules
IF ip.list in "cms-admins"
AND http.request.base_uri has_prefix /wp-admin
THEN bypassmanagedrule

With these selections in the console:

  • Office IPs exempt from CAPTCHA — Field IP List · Operator in list · Value office-ips → Action Bypass CAPTCHA
  • Partners exempt from rate limits — Field IP List · Operator in list · Value trusted-partners → Action Bypass Rate Limit
  • CMS admin exempt from managed rules — Field IP List · Operator in list · Value cms-admins AND Field Path (without query) · Operator starts with · Value /wp-admin → Action Bypass Managed Rules

Turns off the related speed optimisation for this request. Does not conflict with protection actions and can be selected alongside them; it only switches things off — if the optimisation is already disabled, it has no effect.

In the consoleKeyWhat it does
Bypass CachebypasscacheThe response is neither served from nor written to the cache — it comes fresh from the origin
Bypass MinifybypassminifyTurns off automatic minification (auto-minify) — so fragile JS/CSS doesn’t break
Bypass Image OptimizationbypassimageoptTurns off image optimisation — the original (lossless) image is served
# Real-time API always from the origin
IF http.request.base_uri has_prefix /api/live
THEN bypasscache

With these selections in the console: Field Path (without query) · Operator starts with · Value /api/live → Action Bypass Cache


Only one can be used per rule; each opens extra fields in the console.

In the consoleKeyParameters
RedirectredirectTarget URL + status code (301/302/303/307/308); the URL may contain variables like $request_uri
Rate LimitratelimitRequest count (1–100000) + window (5–600 s) + IPv6 prefix — token bucket
Change BackendbackendThe name of a backend group defined in the console
Select UpstreamoriginRoutes the request to a different upstream (origin) group
Request HeaderrequestheaderAdds a name=value header to the request sent to the origin (value is written as-is, no templates)
Response HeaderresponseheaderAdds a name=value header to the response returned to the user
Set Cookiesetcookiename, value, path, max_age, httponly, secure, samesite
Delete CookiedeletecookieThe name of the cookie to delete
# Rate limit the login endpoint
IF http.request.base_uri == /login
THEN ratelimit 10/60s
# Redirect an old URL to the new one
IF http.request.base_uri has_prefix /old
THEN redirect https://example.com/new
# Add a marker header the origin can recognise
IF http.request.base_uri has_prefix /api
THEN requestheader X-Edge-Verified=1
# Add a CORS header
IF http.request.base_uri has_prefix /api
THEN responseheader Access-Control-Allow-Origin=*

With these selections in the console:

  • Rate limit the login — Field Path (without query) · Operator equals · Value /login → Action Rate Limit (10 requests / 60 s)
  • Redirect the old URL — Field Path (without query) · Operator starts with · Value /old → Action Redirect (target https://example.com/new)
  • Add a marker header — Field Path (without query) · Operator starts with · Value /api → Action Request Header (X-Edge-Verified = 1)
  • Add a CORS header — Field Path (without query) · Operator starts with · Value /api → Action Response Header (Access-Control-Allow-Origin = *)

Multi-select — protects heavy endpoints from concurrent load and slow-origin pressure.

In the consoleKeyParameter
Concurrent Request Limitmaxconcurrent0–100000; excess requests get a direct 503 (0 = unlimited)
Origin Response Time (this rule)origintimeoutSeconds (1–600); shortens the origin timeout for this request — the domain ceiling cannot be exceeded
# Concurrency cap on the report endpoint
IF http.request.base_uri == /report/generate
THEN maxconcurrent 5
# Cut off a slow origin early on a fast endpoint
IF http.request.base_uri == /health
THEN origintimeout 2

With these selections in the console:

  • Cap the report endpoint — Field Path (without query) · Operator equals · Value /report/generate → Action Concurrent Request Limit (5)
  • Cut the origin short on /health — Field Path (without query) · Operator equals · Value /health → Action Origin Response Time (2 s)

In the consoleKeyDescription
Failban (IP ban counter)failbanIncrements the matching IP’s ban counter; the IP is banned once the threshold is exceeded. Runs in the response phase
Trigger WebhookwebhookMakes a webhook call on a match
Stop processing after this rulestopIf the rule matches, the remaining rules in the list are not evaluated; used together with another action
# Increment the failban counter when the origin returns 401
IF http.response.status == 401
THEN failban
# Let a trusted IP through and stop the rule chain
IF ip.list in "trusted-ips"
THEN allow stop

With these selections in the console:

  • Count the 401s — Field Origin Response Status · Operator equals · Value 401 → Action Failban (IP ban counter) (the console locks the action for this field)
  • Allow and stop — Field IP List · Operator in list · Value trusted-ips → Action Allow + Stop processing after this rule