CLOUDFLARE APPLICATION SERVICES: CASE UITWERKING

Cloudflare-implementatie
voor een e-commercesite

Aanpak en implementatie voor de case, opgebouwd rond drie fases: Health Check, Implementation & Optimization en Watchtower.

ScopeWebshop + installatievideo's voor erkende plaatsers
RandvoorwaardeOrigin blijft eigen infra
OutputPresentatie + playbook
De situatie

Wat de klant vraagt

Een e-commercesite, gehost op eigen servers, moet achter Cloudflare komen, met oog voor security, performance, DNS en beschikbaarheid.

Publiek: de webshop

Wereldwijde klanten

Bezoekers ver van de origin ervaren tragere laadtijden.

Publiek: de webshop

Terugkerende aanvallen

SQL-injection, DDoS en Slowloris tasten de beschikbaarheid aan.

Beperkt: installatievideo's

Toegang installatievideo's

Instructievideo's bij een specifiek product mogen niet publiek toegankelijk zijn.

Randvoorwaarde

Origin blijft eigen infra

Geen migratie: Cloudflare komt ervoor, de website zelf verhuist niet.

De aanpak

Drie fases

De aanpak volgt drie fases: van analyse, via implementatie, naar doorlopend beheer.

01 · eenmalig

Health Check

Infrastructuur, huidige configuratie en prioriteiten in kaart brengen, vóór er iets wijzigt.

02 · eenmalig

Implementation & Optimization

DNS, WAF, performance en toegangsbeheer effectief opzetten en afstellen.

03 · doorlopend

Watchtower

Maandelijkse review, rule-tuning en rapportage, zodat de omgeving blijft mee-evolueren.

Fase 01: Health Check

Eerst kennen, dan pas configureren

Elke keuze verderop in dit voorstel hangt af van de antwoorden op deze vragen. Voor deze oefening worden op de volgende slide expliciete aannames gemaakt zodat de implementatie concreet uitgewerkt kan worden.

  • Infrastructuur: één server of meerdere/load balancer? Bepaalt de Tunnel-beslissing in fase 2.
  • Huidige DNS-setup: full of partial, welke records vandaag al bestaan.
  • Bestaande security-instellingen: is er al iets actief, en waar zaten de false positives.
  • Oorsprong van de SQLi/DDoS/Slowloris-vaststelling: eigen logs, bestaande tool, of extern gemeld? Bepaalt of het origin-IP al rechtstreeks bereikt is, en dus of IP-rotatie na migratie nodig is.
  • Omvang installatievideo's: bestandsgroottes t.o.v. cache-limieten (512 MB tot 5 GB).
  • Identity-behoeften plaatsers: bestaat er al een lijst/systeem van erkende partners?
Fase 01: Aannames

Op deze aannames bouwt dit voorstel verder

Deze aannames worden bevestigd tijdens de effectieve Health Check bij de klant. Waar een aanname niet blijkt te kloppen, wijzigt de aanpak in fase 2.

  • Eén origin-server, geen load balancer: maakt Cloudflare Tunnel eenvoudig te implementeren (één cloudflared-instantie volstaat), dus wordt Tunnel de baseline voor de volledige origin-bescherming, niet enkel voor de installatievideo's.
  • Cloudflare nog niet eerder actief op dit domein: dus een full DNS setup (Cloudflare wordt authoritative), geen partial/CNAME-only migratie.
  • Erkende plaatsers vormen een beperkte, gekende groep: geen self-service registratie nodig, dus Access met One-Time PIN volstaat zonder externe identity provider.
  • Installatievideo's blijven onder de cacheable bestandslimiet: te bevestigen; bij grotere bestanden moet er gekeken worden naar een Cloudflare Stream-implementatie.
  • Cloudflare Business-plan of hoger: nodig voor het WAF Attack Score Class-veld en rate limiting rules. Custom rules bestaan al vanaf Pro, maar met een limiet van 20, wat voor deze case waarschijnlijk te krap is.
Fase 02: DNS & onboarding

Proxy en origin-bescherming

Alle relevante records worden proxied (orange-clouded). Pas dan gelden WAF, cache en DDoS-bescherming.

Bezoeker
Cloudflare edge
Origin (eigen server)

Proxied DNS

Origin-IP niet langer publiek zichtbaar in DNS-lookups, de eerste stap tegen alle drie de genoemde aanvalstypes.

Cloudflare Tunnel als baseline

Eén cloudflared-instantie op de origin-server. Outbound-only verbinding, geen inbound firewall-regel nodig voor Cloudflare's IP-ranges.

Fase 02: Security: WAF

Drie lagen WAF-bescherming

Geen losse maatregel, maar een opbouw: het gekende wordt gevangen door signatures, het onbekende door machine learning. Relevant voor SQLi, maar ook voor andere aanvalstypes.

Laag 1 · primair

Managed Ruleset

Signature-based, door Cloudflare onderhouden. Dekt een brede set gekende aanvalspatronen, waaronder SQLi, en staat na deployment automatisch actief, zonder verdere configuratie.

Laag 2 · aanvulling

WAF Attack Score

ML-laag voor varianten en bypasses die signatures missen. Eigen SQLi-deelscore beschikbaar.

Laag 3 · optioneel

OWASP Ruleset

Extra dekking, maar meer false positives, daarom bewust niet als standaard aangeraden.

// Custom rule — block on attack score expression: cf.waf.score.class eq "attack" action: "block"
Fase 02: Security, DDoS & Slowloris

DDoS-bescherming en Slowloris-mitigatie

DDoS-bescherming

L3 / L4 / L7 altijd actief op Cloudflare's netwerk. Geen aparte configuratie nodig.

Slowloris

Wordt automatisch onschadelijk gemaakt: Cloudflare's proxy buffert het volledige HTTP-request vóór het naar de origin gaat. Een onvolledig request bereikt de origin nooit.

Rate Limiting

Aparte configuratiestap, niet automatisch afgeleid van WAF. Bescherming tegen misbruik op kritieke endpoints zoals checkout en login.

// Rate limiting rule — checkout & login expression: starts_with(http.request.uri.path, "/checkout") characteristics: ["ip.src"] period: 60 requests_per_period: 10 action: "managed_challenge"
Fase 02: Performance

Drie complementaire lagen

Elke laag vangt op wat de vorige niet kon: het meeste hoeft nooit naar de origin, de rest gaat er zo snel mogelijk naartoe.

Laag 1

CDN + Cache Rules

Statisch standaard gecachet. Dynamisch (cart, checkout) expliciet bypassed: nooit blind "Cache Everything" toepassen.

Laag 2

Tiered Cache

Hiërarchie van datacenters vangt cache-misses op vóór de origin geraakt wordt.

Laag 3

Argo Smart Routing

Snelste realtime pad op Cloudflare's backbone voor wat wél naar de origin moet, relevant voor verre bezoekers.

// Rule A — cache static assets expression: starts_with(http.request.uri.path, "/assets") action: "set_cache_settings" cache: true edge_ttl: "30d" // Rule B — bypass dynamic/personal routes expression: starts_with(http.request.uri.path, "/cart") or starts_with(http.request.uri.path, "/checkout") action: "set_cache_settings" cache: false
Fase 02: Toegangsbeheer installatievideo's

Enkel voor erkende plaatsers

Cloudflare Access

Deny-by-default op het specifieke pad. Verificatie via One-Time PIN, geen wachtwoord om te beheren of te lekken.

Cache + Access combineren

Veilig te combineren: Access valideert de sessie vóór de cache-fase, mits de cache-key en Cache-Control correct geconfigureerd zijn.

// Access policy decision: "allow" include: [{ email_domain: "erkendplaatser.be" }] // session: signed JWT in CF_Authorization cookie // session_duration bepaalt hoe snel een verwijderde plaatser buiten staat
Fase 03: Watchtower

Doorlopend beheer na oplevering

WAF-regels die vandaag correct staan, kunnen na verloop van tijd achterhaald raken door nieuwe aanvalspatronen. Deze fase houdt de configuratie actueel.

  • Maandelijkse review: security- en configuratiestatus.
  • WAF- en rule-tuning: bijstellen op basis van reëel verkeer.
  • False-positive-analyse: legitieme klanten blijven ongehinderd.
  • Rapportage: security events, helder voor niet-technisch publiek.
Fase 03: Vooruitblik

Optionele volgende stappen

Cloudflare Stream

Adaptive bitrate streaming voor de installatievideo's, buiten de huidige scope, maar een logische optimalisatie later. Relevant zodra bestanden de 512 MB-cachelimiet overschrijden (bv. een video van 1 GB wordt op Free/Pro/Business niet gecachet).

API-gestuurd partnerbeheer

Erkende plaatsers beheerd in de eigen applicatie van de klant, automatisch gesynchroniseerd naar de Access-policy via de Cloudflare API.

Samenvattend

Probleem → oplossing → fase

Probleem uit de caseOplossingFase
Trage laadtijden wereldwijdCDN, Tiered Cache, Argo Smart Routing02
SQL-injectionManaged Ruleset + WAF Attack Score02
DDoS & SlowlorisAltijd-actieve DDoS-bescherming + request buffering02
Beveiligde installatievideo'sCloudflare Access (OTP) + Tunnel02
Blijvend actuele beschermingMaandelijkse tuning & rapportage03
Verwachte vragen

FAQ

Is de Attack Score-rule het enige tegen SQLi?

Nee. Managed Ruleset (signatures) is de primaire laag, Attack Score (ML) vangt varianten en bypasses, OWASP is optioneel. Drie complementaire lagen, niet één regel.

Waarom wordt OWASP niet standaard aangeraden?

Cloudflare's eigen documentatie stelt expliciet dat de OWASP Core Ruleset gevoelig is voor false positives en slechts marginale meerwaarde biedt bovenop Managed Ruleset + Attack Score. Oorzaak: OWASP werkt met een cumulatief scoresysteem (elke matchende sub-regel telt punten op tot een drempel), waardoor grotere/complexere requests (zoals een uitgebreid checkout-formulier) sneller per ongeluk over die drempel gaan. Bron: developers.cloudflare.com/waf/managed-rules/reference/owasp-core-ruleset

Moet rate limiting apart ingesteld worden?

Ja, een apart ruletype met eigen expressie, drempel en actie, los van de WAF-managed rules.

Hoe verifieert Access de identiteit?

One-Time PIN per e-mail, geen wachtwoord om te beheren of te lekken. Sessie loopt via een ondertekende JWT in de CF_Authorization-cookie.

Waarom Tunnel i.p.v. firewall-lock voor de webshop?

Bij één origin-server is Tunnel even eenvoudig op te zetten én sterker beveiligd (geen open poort), dus baseline vanaf dag 1, geen upgrade-pad.

Waarom geen username/password voor plaatsers?

Access heeft geen native koppeling met de klantendatabase, en het vermengt twee gebruikerspopulaties met verschillend vertrouwensniveau. OTP heeft bovendien geen opgeslagen geheim dat kan lekken.

Log-mode vs. Block-mode: wat is het verschil?

Nieuwe of aangepaste regels starten in Log-mode. Na validatie in Security Events (minstens één werkdag) schakelen ze over naar Block. Cloudflare hanteert dit patroon zelf voor de eigen Managed Ruleset-updates.

Welk Cloudflare-plan past bij deze klant?

Business. Het WAF Attack Score Class-veld en rate limiting rules zijn pas vanaf dat plan beschikbaar. Custom rules bestaan al vanaf Pro, maar daar met een limiet van 20; gezien we voor deze case waarschijnlijk meer nodig hebben (SQLi, rate limiting-gerelateerde regels, en ruimte voor toekomstige regels), is Business ook op dat vlak de veiligere keuze met 100 custom rules. Enterprise wordt pas relevant als de video's boven de 512 MB-cachelimiet uitkomen.

Full of partial DNS-setup?

Full, aangenomen dat Cloudflare nog niet actief is op dit domein. Partial (CNAME) is vooral relevant bij grote organisaties met een reeds bestaand, strikt beheerd DNS-team, wat hier niet het profiel lijkt.

Kost Access per plaatser? Telt elk adres op @bedrijf.be als seat?

Zero Trust/Access is gratis tot 50 gebruikers, daarboven €7/gebruiker/maand. Ja, elke plaatser telt als één seat, ongeacht of de policy via een domeinmatch of individuele adressen werkt. Het gaat om alle unieke gebruikers die ooit authenticeerden (cumulatief), niet om gelijktijdig ingelogde gebruikers: eenmaal geauthenticeerd bezet iemand de seat tot een beheerder die actief verwijdert.

Waar komt de naam "Slowloris" vandaan? Een slow loris (Nycticebus coucang)
Afsluiting

Vragen?

Health Check → Implementation & Optimization → Watchtower.