T Techclick ← Cloudflare hub
Cloudflare · Edge proxy · Session factory · Interactive lesson

Cloudflare is an edge session factory. Orange cloud, then stamps.

The Slack paste says “Cloudflare blocked login.” That sentence names a brand, not a factory step. DNS decides whether the request even enters. Proxied (orange cloud) is the reverse-proxy door that prints a Ray ID. WAF and Rules stamp that ticket. Cache or origin answers. Until you can say which of those four desks failed, you do not get to say “turn the WAF off.”

20 min read · L2 primary · Quiz at end · Dummy lab only

⚡ Quick Answer

Cloudflare is an edge session factory: DNS → orange-cloud proxy → WAF/Rules phases → cache or origin. Prove the ticket with Ray ID, Service, and CF-Cache-Status.

After this page you can

Quick answer

Cloudflare is an edge session factory, not one switch. Official: if the zone is active and the DNS record is Proxied, Cloudflare answers with anycast IPs and reverse-proxies HTTP/HTTPS. That request gets a Ray ID (cf-ray). Security features then run in a fixed phase order. A terminating action stops later phases. If the request is allowed, cache may answer with CF-Cache-Status: HIT and never reach origin. If the edge does fetch origin under Full (strict) and the origin certificate fails validation, users see 526 — that is TLS, not WAF. Quote Ray ID + Service + Action + cache header before you change a rule.

Say this out loud

I do not start with features. I ask whether the hostname is orange-clouded, whether a Ray ID exists, which Service stamped the ticket, and whether cache or origin answered. Grey cloud is not a WAF ticket. HIT is not a failed deploy. 526 is not a 403.

1. Why “Cloudflare blocked us” is not a diagnosis

Concept: Every other blog starts with “enable the WAF.” That is why students freeze. The real object is the request that entered the edge. Features are only stamps the factory puts on that ticket.

Official How Cloudflare works: when the domain status is active and the queried record is proxied, Cloudflare responds with an anycast IP instead of the origin IP in your DNS table. HTTP/HTTPS then routes through Cloudflare on the way between client and origin. Official Proxy status: Proxied is the orange-cloud icon. DNS-only is the grey cloud — Cloudflare returns the origin IP and does not route HTTP/HTTPS through its network.

Users collapse four failures into one sentence. A 403 from a managed rule, a Managed Challenge from Super Bot Fight Mode, a 526 from Full (strict), and a stale HIT after a deploy all look like “the orange cloud is broken.” They are four desks. The Ray ID is how you stop guessing.

Hero · the factory floor
Teaches: a browser request becomes an edge ticket that walks DNS, orange-cloud proxy, WAF stamps, then cache or origin
Notice: the client talks to the edge, not straight to origin, only when the DNS record is Proxied (orange cloud).

What the ticket asked

“Cloudflare blocked login.” That sentence is a hypothesis. The factory may have challenged, cached, or failed origin TLS. It may never have seen the hostname.

What you prove first

Proxy status, then the Ray ID, then Service + Action in Security Events. The evidence desk is the night-shift version of this order.

Path

DNS → orange-cloud reverse proxy → security phases → cache lookup → origin (if not HIT / not blocked).

Do

Collect cf-ray. Confirm Proxied. Name the desk. Change the smallest object. Re-test with a new Ray ID.

The lie every L1 repeats

“Pause Cloudflare so we can see if it’s us.” Pause takes the whole factory offline. Official: you have not named Service or Action yet. A login challenge, a 526, and a cache HIT all survive that pause for different reasons — and you just removed DDoS, WAF, and cache together.

Lab values only

Zone app.example.test, hostname app.example.test, origin 192.0.2.20:443, client 203.0.113.88, Ray ID 8a1b2c3d4e5f6789-BOM. Nothing here is a live tenant. Never paste a customer Ray ID with PII into a public ticket.

2. Mental model — door, ticket, stamps, answer

Hold four parts. Interviews fail when people mix them.

1. The door is DNS / proxy status

Proxied (orange cloud) sends HTTP/HTTPS through the edge. DNS-only (grey cloud) returns the origin IP. Only A, AAAA, and CNAME used for IP resolution can be proxied. MX and TXT are always DNS-only.

2. The ticket is the Ray ID

Official: a Ray ID is given to every request that goes through Cloudflare. It appears as cf-ray to the browser and to origin. Format encodes the data center, for example 8a1b2c3d4e5f6789-BOM.

3. The stamps are WAF / Rules

Custom rules, rate limiting, Managed Rules (Cloudflare Managed Ruleset + OWASP Core), Super Bot Fight Mode. They judge the request. Action can be Block, Managed Challenge, Skip, Log.

4. The answer is cache or origin

HIT = edge already had the object. MISS = cacheable, fetched from origin. DYNAMIC = not eligible, no cache lookup. Origin TLS fail under Full (strict) is 526. Handshake fail is 525. Origin refused is 521.

Flow 1 · one ticket, four desks
Edge factory · Ray ID 8a1b2c3d4e5f6789-BOM Browser asks /login DNS orange vs grey Orange-cloud edge anycast · prints Ray ID Origin 192.0.2.20 only if not HIT / not blocked WAF stamp payload / managed / custom attack score 1–99 Bot stamp automation, not payload bot score 1–99 Cache stamp who already has the file HIT · MISS · DYNAMIC Origin TLS Full (strict) validates 526 cert · 525 handshake Grey cloud never reaches the four desks. A Block or Managed Challenge can skip later phases and cache. HIT returns bytes from the edge. Origin is only fetched on MISS / EXPIRED / DYNAMIC / BYPASS — and only if security allowed the request. Quote: Ray ID · Service · Action · CF-Cache-Status · SSL/TLS encryption mode

Read left → right, then the four stamps. Grey cloud is a different ticket. HIT can skip origin the way a later packet rides a firewall session.

Proxy status answers “did this hostname even enter the factory?” Official: Proxied records get Cloudflare anycast IPs, TTL Auto (300 seconds, not editable), and Cloudflare can apply WAF, cache, and redirect rules. DNS-only records expose the origin IP and get DNS analytics only — no HTTP/HTTPS analytics, no WAF, no Ray ID from Cloudflare.

WAF answers “does this request look like an attack?” Official attack score: 1 almost certainly malicious, 99 likely clean. That is not bot score. Official: attack score finds variations of attacks that Managed Rules miss; bot score finds whether the client looks automated.

Bot answers “does this client look automated?” Official bot score: 1 quite certain automated, 99 quite certain human. Super Bot Fight Mode (Pro and above) can be skipped with a custom Skip. Bot Fight Mode (Free) is an on/off toggle and cannot be skipped.

Cache answers “did the edge already have the bytes?” Official CF-Cache-Status: HIT found in cache; MISS eligible but fetched from origin; DYNAMIC not eligible, no lookup; BYPASS eligible at request time but origin response was not cacheable. HIT after a deploy is a successful CDN, not a failed WAF.

Hard words, before the runbook

Ray ID — per-request identifier (cf-ray). Look it up in Security Events Sampled logs. Not guaranteed to appear if sampling hid it — narrow the time window.
Security Events — mitigated or flagged requests only. Security Analytics — all traffic, including allowed.
Service — which product acted (Managed rules, Rate limiting rules, Super Bot Fight Mode, IP Access rules…).
Terminating action — Block or Managed Challenge stops later Ruleset Engine phases.
Full (strict) — visitor↔edge and edge↔origin are HTTPS, and the origin cert must be unexpired, publicly trusted or Origin CA, with a CN/SAN that matches the hostname.
HIT — resource found in Cloudflare cache. Success for the CDN. Stale if you just shipped new bytes to origin.

3. Factory path — DNS to origin

Path: flowchart first. The first request of a new URL walks the whole factory. A later request for a cacheable object can be answered as HIT and never reach origin — that is the edge’s version of a fast path. A terminating security action never reaches cache or origin at all.

Path · which desk owns this ticket
Teaches: a decision split between WAF payload inspection and Bot automation scoring on the edge path
Notice: the diamond is not allow/deny. It is “which factory desk stamped this Ray ID?”
Flow 2 · official order (student labels)
Resolver → proxy door → stamps → cache or origin 1 DNS query app.example.test Proxied? orange Grey / DNS-only origin IP · no Ray ID 2 Orange-cloud reverse proxy — print Ray ID anycast · TLS to the edge · cf-ray assigned ddos_l7 HTTP DDoS custom http_request_firewall_custom rate limit http_ratelimit managed OWASP + CF managed SBFM http_request_sbfm 3 Cache lookup — HIT is the edge fast path HIT returns bytes · MISS / EXPIRED fetch origin · DYNAMIC skips lookup · BYPASS origin said not cacheable 4 Origin TLS Full (strict) validates 526 / 525 / 521 cert · handshake · refused 200 + headers back to the browser cf-ray · CF-Cache-Status · status Official facts students invert 1. Terminating actions stop later phases. A custom Block never reaches Managed Rules or SBFM. 2. Bot Fight Mode and IP Access rules sit outside the Ruleset Engine. Custom Skip cannot bypass Bot Fight Mode. 3. If at least one A/AAAA on the same name is Proxied, Cloudflare treats all A/AAAA on that name as Proxied.

Read left → right, then the green cache bar. Decision diamond = “is this record Proxied?” Do not open SSL/TLS for a Bot challenge. Do not skip OWASP for a 526.

Official security-related request phases, in execution order: ddos_l7 (HTTP DDoS Attack Protection) → http_request_firewall_custom (custom rules) → http_ratelimit (rate limiting rules) → http_request_firewall_managed (Managed Rules, including OWASP) → http_request_sbfm (Super Bot Fight Mode). Within each phase, account-level rulesets run before zone-level rulesets. Source: Security features interoperability.

Features evaluated independently, not in that phase list: IP Access rules, Zone Lockdown, User Agent Blocking, Browser Integrity Check, Hotlink Protection, Security Level. A Skip you wrote for Managed Rules does not cover an IP Access rule.

#1 student trap — disable OWASP for a challenge

A Managed Challenge on /login with Service = Rate limiting rules is not SQLi rule 100203. Official: a terminating action in an earlier phase stops later phases. Tuning the login rate-limit (or skipping SBFM for that path) leaves the Cloudflare Managed Ruleset on. Bot Fight Mode cannot be skipped at all — upgrade to Super Bot Fight Mode or turn that toggle off under Security → Settings.

4. How to choose the desk you touch

You are not choosing a product to buy. You are choosing which factory desk printed this ticket. The “first control” is the smallest change that can close it.

You seeDeskDo not touchFirst control
No cf-ray, DNS record grey-clouded DNS / proxy status Security rules Confirm whether the hostname should be Proxied. Pending zones stay DNS-only until active.
Security Events Service = Managed rules, action Block, rule id present WAF Managed Rules / OWASP SSL mode, cache purge, Bot Fight Mode WAF exception or disable that rule for a scoped expression
Service = Rate limiting rules, action Managed Challenge on /login Rate limiting OWASP Core Ruleset Tune threshold, or Skip rate limiting for known office IPs
Service = Super Bot Fight Mode; bot score 12 Bot Managed Ruleset global off Custom rule Skip → Super Bot Fight Mode for that path. Bot Fight Mode cannot be skipped.
Status 526, SSL/TLS = Full (strict) Origin TLS WAF, Bot, cache Fix origin cert (dates, SAN, chain) or install Origin CA. Flexible is a workaround, not the close.
Status 525 Origin TLS handshake WAF Port 443, SNI, cipher match, a certificate installed
Status 521 Origin refused the edge WAF Origin up? Cloudflare IPs allowed on the origin firewall?
CF-Cache-Status: HIT, Age high, origin already new Cache WAF rollback Caching → Configuration → Custom Purge → URL, then confirm MISS → HIT
Only one office blocked; HQ fine IP Access rules / allow-list OWASP Quote the IP rule. IP Access sits outside the Ruleset Engine skip you wrote for OWASP.

WAF attack score and bot score are both 1–99 and they are not the same field. Official: attack score classifies how malicious the payload looks; bot score classifies how automated the client looks. Do not treat score 12 as “this user is a criminal.” Product owner decides challenge versus allow.

5. Runbook Side A → B → C

Do: three sides, in order. Side A is the factory door (DNS + the user’s browser). Side B is the dashboard products that stamp the ticket. Side C is proof you can paste into the change record. Dummy values only.

Side A — DNS and the browser (building the factory floor)

Primary source: Manage DNS records + Proxy status. Dashboard: DNS → Records.

  1. Collect the Ray ID from the user

    Error page, or DevTools → Network → the failing request → Response headers → cf-ray. Lab handle: 8a1b2c3d4e5f6789-BOM. Official: you can also curl -v the URL. If there is no Ray ID, Side A is already the story — grey cloud, pending zone, or the user never hit this hostname.

  2. Confirm proxy status on the exact hostname

    DNS → Records. Column Proxy status must be Proxied (orange cloud) for WAF, cache, and branded 5xx pages. Official: if one A/AAAA on this name is Proxied, Cloudflare treats all A/AAAA on this name as Proxied.

  3. Confirm the zone is active

    Official How Cloudflare works: pending domains stay DNS-only until nameservers are authenticated, even if the cloud icon is orange. A 24-hour pending warning is a DNS ticket, not a WAF ticket.

Dummy lab · collect the ticket from the wire
curl -sI https://app.example.test/login
HTTP/2 403
cf-ray: 8a1b2c3d4e5f6789-BOM
cf-cache-status: DYNAMIC
server: cloudflare

That response already names two desks. A Ray ID exists, so the request entered the factory. DYNAMIC means cache did not look up /login — expected for HTML login. The 403 is a security stamp, not a cache stamp. Side B names which Service wrote it.

Side B — WAF / Rules / SSL / cache (printing the ticket, choosing stamps)

Primary source: Security Events + Security features interoperability + SSL/TLS encryption modes. Dashboard: Security → Analytics → Events.

  1. Look up the Ray ID in Security Events

    In the Cloudflare dashboard, go to the Analytics page, then the Events tab. Add filter: Field = Ray ID, operator = equals, value = the user’s Ray ID. Read Service, Action, rule, path, IP. Official: Security Events may be sampled — pick a smaller timeframe if the row is missing.

  2. Name the layer that hit — do not say “WAF” yet

    Service = Managed rules is a payload stamp. Service = Rate limiting rules is a burst stamp. Service = Super Bot Fight Mode is an automation stamp. Service = IP Access rules sits outside the phase list.

  3. If the page is 526 or 525, leave Security rules alone

    Dashboard: SSL/TLS → Overview → SSL/TLS encryption mode. Official Full (strict): origin cert must be unexpired, issued by a publicly trusted CA or Cloudflare Origin CA, and the CN/SAN must match the hostname. 526 = invalid origin certificate. 525 = handshake failed (no cert, port 443 closed, SNI, cipher mismatch).

  4. If the release “didn’t go out,” read the cache header

    CF-Cache-Status: HIT plus a high Age means the edge still has yesterday’s object. That is not a WAF rollback. Official Instant Purge: single-file (purge by URL) is the recommended method.

Dummy lab · three different stamps, three different tickets
# Ticket A — payload (WAF)
Service=Managed rules  Action=Block  rule=100203  path=/search

# Ticket B — burst (rate limit)   ← this lab login
Service=Rate limiting rules  Action=Managed Challenge  path=/login

# Ticket C — automation (bot)
Service=Super Bot Fight Mode  Action=Managed Challenge  bot score=12

Say the word Service out loud before you write a Skip. A Skip of Managed Rules does not turn off Super Bot Fight Mode. A Skip of Super Bot Fight Mode does not turn off Bot Fight Mode — that toggle is not in the Ruleset Engine.

Side C — prove the two-way ticket and the smallest change

Primary source: Security Events + Purge by single-file + Full (strict). Success is a new Ray ID you can paste, not a green Deploy toast.

  1. Write the three-field close

    Ray ID 8a1b2c3d4e5f6789-BOM · Service = Rate limiting rules · Action = Managed Challenge on /login. CF-Cache-Status: DYNAMIC. SSL/TLS mode still Full (strict). Therefore not a site outage and not a 526.

  2. Change the smallest object

    Security → Security rules → Create rule → Custom rules for a scoped Skip, or tune the rate-limit threshold. Official Skip can bypass http_ratelimit, http_request_sbfm, and/or http_request_firewall_managed. Never “WAF off.” Never Pause Cloudflare for a login challenge.

  3. If this was a cache ticket, purge that URL

    Caching → Configuration → Purge Cache → Custom Purge → URL. Official: subsequent requests for that asset return MISS, then refill to HIT. Prefer hashed filenames so the next deploy is a new key.

  4. Re-test and keep the new evidence

    New Ray ID, Action = allow (or no Security Event), same path, same office IP. For 526, the page is 200 and encryption mode is still Full (strict). For cache, MISS then HIT on the new bytes.

Proof · quote the ticket, not the brand
Teaches: operators prove an edge request from Ray ID, Service, Action and cache headers, not from a Pause Cloudflare click
Notice: juniors stare at the orange cloud. Seniors stare at cf-ray, Service, and CF-Cache-Status.
Green success on this runbook

Proxy status = Proxied. A Ray ID exists. Security Events Service + Action named (or no event, and Security Analytics shows the allow). CF-Cache-Status matches intent — DYNAMIC or BYPASS on /login, HIT on hashed /app.[hash].js. SSL/TLS mode still Full (strict) after a 526 fix. User can complete the same click you used as the test.

6. Runtime after go-live

Once the zone is orange-clouded and Full (strict) is on, a production request looks like this. Use it in interviews when they ask “walk me through a request.”

Flow 3 · one live request after go-live
Resolver anycast IP TLS to edge Ray ID assigned Phases or terminate Cache HIT or fetch Origin / headers 526 · 525 · 521 · 200 Always Use HTTPS plus an origin that redirects HTTPS → HTTP is a different ticket (ERR_TOO_MANY_REDIRECTS). That is encryption mode vs origin redirects — still not WAF. Flexible sends HTTP to origin; do not leave it there after a 526. A custom rule Block is logged as CF-Cache-Status none/unknown — the response came from the edge before cache. Development Mode suspends cache for three hours and forces DYNAMIC. That is a cache desk, not a WAF desk.

Same order as Flow 2, compressed for the interview answer. Terminating action never reaches the green cache box.

Cache after go-live is where teams waste a night. Official default cached extensions cover common static types; HTML and JSON are usually DYNAMIC unless a Cache Rule says otherwise. A Cache Rule with Bypass cache also produces DYNAMIC. BYPASS means the request was eligible, then the origin sent Cache-Control: no-store / private, a Set-Cookie, or Vary: *. Do not purge a DYNAMIC URL and expect a HIT.

Login pages must not be HIT. Official dynamic-content guidance: if you see HIT or EXPIRED on /login and no Set-Cookie, add a more specific Cache Rule that bypasses /login, /account, /cart, /checkout. Confirm the fixed response is DYNAMIC, MISS, or BYPASS and still sets the cookie.

The night-shift version of this page is the evidence desk — first tool plus one official proof field per ticket type (Security Events Action + Rule, Trace, Analytics Web Traffic, Log Explorer / Logpush, SSL/TLS edge cert Status).

7. Traps + proof checklist

SymptomLooks likeActuallyFirst move
P1 Slack, no Ray ID Turn WAF off You have not named Service or Action — maybe grey cloud DNS → Records, then cf-ray
User “can’t log in” Challenge = Block Managed Challenge can allow one second later HAR timestamps vs Sampled logs
Login loop after Super Bot Fight Mode Bot = WAF Different phase, different skip Skip SBFM, not OWASP. Bot Fight Mode cannot be skipped
Cert rotate night, 526 WAF 403 Full (strict) origin validation Fix the chain; keep Full (strict)
Both called “SSL errors” 525 = 526 525 handshake, 526 invalid cert, 521 origin refused Quote the number before SSL/TLS mode
Deploy ticket, old JS HIT = origin served new files HIT is the edge copy Purge that URL or hash the filename
No Ray ID, origin 403 Grey cloud still “has WAF” DNS-only never entered the factory Proxy status, not Security Events
origin health = healthy Health check proves /login Probe path may not be the failing URL Fetch the real path; read 526 vs 200
bot score = 12 Bot score = identity Signal, not a person Decide with the product owner
“I can’t find the allow” Security Events = all traffic Events are mitigated/flagged Security Analytics for allows
Pending zone, orange icon WAF should already run Pending domains stay DNS-only until active Nameserver / zone status first
One A Proxied, one A grey on same name Half the traffic bypasses Official: all A/AAAA on that name are treated as Proxied Do not use a second A as a “back door”
Proof checklist — the factory is actually working
Interview close you can steal

Cloudflare is an edge session factory. DNS decides whether the request enters. Orange-cloud reverse proxy prints a Ray ID. WAF and Rules stamp that ticket in a fixed phase order. Cache or origin answers. I prove the ticket with cf-ray, Service, Action, and CF-Cache-Status. I do not start with “turn WAF off.” 526 is origin TLS. HIT is cache. Challenge is not a block.

Related: Evidence desk — first tool + proof field · Cloudflare WAF hub · WAF skip tuning · Bot login abuse

Knowledge check

Six judgment questions. Map each miss back to the section named in the reason.

Q1

Cloudflare is an edge session factory. What is the official order a web request walks?

Correct: b. The door is Proxy status. The ticket is the Ray ID. Stamps are WAF/Rules. Cache or origin answers. Re-read Mental model and Factory path.
Q2

The hostname is DNS-only (grey cloud). Users see an origin 403 and there is no cf-ray. Why is Security Events the wrong first tool?

Correct: b. Official Proxy status: DNS-only returns the origin IP and does not route HTTP/HTTPS through Cloudflare. Re-read Why “Cloudflare blocked us” is not a diagnosis and Side A.
Q3

A custom rule Block matches /xmlrpc.php. Why is there no Managed Rules event for that same request?

Correct: b. Official interoperability: terminating actions stop the request evaluation workflow. Phase order is custom → rate-limit → managed → SBFM. Re-read Factory path.
Q4

Origin cert was replaced. Users see Cloudflare error 526. SSL/TLS mode is Full (strict). What failed?

Correct: c. Official Error 526: invalid SSL certificate under Full (strict). 525 is handshake failed. Re-read How to choose and Side B step 3.
Q5

After a frontend deploy, browsers still run yesterday’s app.js. Response shows CF-Cache-Status: HIT and Age: 812. Origin is already new. What do you do?

Correct: c. Official: HIT means the resource was found in Cloudflare’s cache. Single-file purge is the recommended method; the next fetch is MISS. Re-read Side C and Runtime.
Q6

A user pastes Ray ID 8a1b2c3d4e5f6789-BOM and says Cloudflare blocked login. What is the first console move?

Correct: b. The Ray ID is the ticket handle. Official: all customers can filter Sampled logs by Ray ID. Re-read Side B and the proof checklist. Field-by-field work is the evidence desk.

Sources

Related: The Cloudflare evidence desk · WAF skip tuning · Bot login abuse · Cloudflare WAF hub · Dummy lab