dev/notes

Spot a mistake? Highlight any text in a post and click Report — it goes straight to the author.

intermediate · Security · August 17, 2026 · 2 min read

How to Set Up Cloudflare WAF Rules and Rate Limiting

Harden your Cloudflare site with WAF custom rules and rate limiting. A practical guide to blocking bots and abusive traffic.

Defense at the edge

Cloudflare sits in front of your site, so it can drop bad traffic before it ever reaches your origin. Two features do most of the work: WAF custom rules for matching and blocking, and rate limiting for throttling abuse.

Step 1 — Turn on managed protection

Cloudflare → Security → WAF → Managed rules:

  • Enable the Cloudflare Managed Ruleset (OWASP-style signatures).
  • Enable Bot Fight Mode (or Super Bot Fight Mode on Pro) to challenge known bots.

These catch automated scanners with zero configuration.

Step 2 — Write a custom rule

Security → WAF → Custom rules → Create rule:

Block traffic to admin paths unless it’s you:

(http.host eq "example.com" and
 http.request.uri.path starts_with "/admin" and
 not ip.src in {203.0.113.10})

Actions: Block for hard stops, Managed Challenge for suspicious-but-maybe- human traffic. Start with Managed Challenge and tighten later.

Step 3 — Add a rate limiting rule

Security → WAF → Rate limiting rules → Create rule:

  • If: http.request.uri.path starts_with "/api/"
  • Rate: 60 requests per 1 minute
  • Action: Block for 1 minute

This is what stops credential stuffing and scripted API abuse. Set thresholds well above human usage — rate limits are a backstop, not a UX feature.

Step 4 — Send security headers

Rules → Transform Rules → Modify Response Header (or a Worker):

Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin

Step 5 — Test, don’t assume

  1. Hit the protected path from outside your IP — expect a block/challenge.
  2. Fire a burst of /api/ requests — expect 429 after the threshold.
  3. Watch Security → Events to confirm your rules (not something else) fired.

Troubleshooting

  • Legitimate users blocked — rules match in order; make allowlists (ip.src in {…}) come first, or switch to Managed Challenge.
  • Your own IP got blocked — add it to IP Access Rules → Allow.
  • Rate limit never triggers — confirm the expression matches your real path and that requests aren’t cached at the edge.

Summary

You now drop bots at the edge, challenge suspicious requests, throttle API abuse, and ship hardening headers — before traffic reaches your origin.

Related posts

Comments

One comment per thread every 30 minutes · edits are unlimited.