Een klant met een webshop in Hulst belde me eind mei. Haar server-logs toonden ruim 500 login-pogingen per dag op /wp-login.php, vanaf willekeurige IP-adressen in Rusland, Vietnam en Brazilië. Klassieke situatie voor iedere Nederlandse ondernemer die zelf een web application firewall wordpress mkb kiezen wil.
Ze had eerder al Wordfence Free draaien, twijfelde over Cloudflare Pro, en las tegelijk over Sucuri en Ninja Firewall. Zulke vergelijkingen heb ik zelf al meer dan twintig keer gedaan, voor klanten in Zeeuws-Vlaanderen en West-Vlaanderen. Er zit patroon in wie welke tool nodig heeft.
In dit stuk lees je hoe de drie WAF-lagen werken, welke tool bij welk verkeersprofiel past en welke combinaties conflicteren. Geen whitepapers, geen Reddit-threads. Reken op 20 minuten lezen, en je weet wat je nodig hebt.

Wat een WAF doet, en op welke laag hij zit
Een web application firewall filtert HTTP-requests op kwaadaardige patronen. Denk aan SQL-injectie, cross-site scripting, path-traversal, credential stuffing, brute-force login-pogingen en scans naar bekende plugin-kwetsbaarheden. Waar hij dat doet is bepalend voor performance, false-positives en welke tool je überhaupt kan gebruiken.
Er zijn drie plekken waar een WAF kan draaien:
- Cloud- of DNS-niveau. Je verkeer wordt door DNS-wijziging (nameservers of A-record) via een proxy geleid. Cloudflare en Sucuri Firewall werken zo. De request bereikt je server pas nadat de proxy hem heeft gefilterd. Voordeel: DDoS wordt opgevangen vóór je hosting. Nadeel: als de proxy uitvalt, is je site onbereikbaar.
- Endpoint- of plugin-niveau. Een WordPress-plugin die de PHP-request evalueert nadat hij op de server is aangekomen. Wordfence, Ninja Firewall en Solid Security werken zo. Voordeel: kent context van je site (welke gebruiker, welk endpoint) en kan malware scannen. Nadeel: je server draagt al de last van botverkeer.
- Server- of ruleset-niveau. ModSecurity met de OWASP Core Rule Set (CRS), of Imunify360, ingebakken in cPanel of DirectAdmin. Draait onder Apache/LiteSpeed of Nginx. Voordeel: onafhankelijk van WordPress, blokkeert vóór PHP laadt. Nadeel: veel false-positives op WordPress admin-POSTs bij hoge paranoia-niveaus, volgens de OWASP CRS-documentatie zelf een reëel probleem.
De drie lagen hebben ieder duidelijke voordelen en nadelen. In de volgende tabel zet ik ze naast elkaar.
| Laag | Voorbeelden | Sterke punten | Zwakke punten |
|---|---|---|---|
| Cloud/DNS | Cloudflare, Sucuri Firewall | DDoS-absorptie, geen server-load, CDN inbegrepen | Vendor lock-in op DNS, propagatie-tijd bij switch |
| Endpoint/plugin | Wordfence, Ninja, Solid Security | Context-aware, malware-scan, gedetailleerde logs | Verbruikt PHP-resources, blokkeert pas ná request |
| Server/ruleset | ModSecurity + CRS, Imunify360 | Hoge performance, breed toepasbaar | False-positives, technische configuratie |
Voor het MKB draait de keuze in 90% van de gevallen tussen laag 1 (Cloudflare) en laag 2 (Wordfence of Ninja). Server-laag komt in beeld bij VPS-hosting of hoster-inclusief. Dat verklaart waarom de vergelijking hierna vooral op laag 1 en 2 focust.
Feature-matrix: alle populaire WAF-opties naast elkaar
De volgende matrix vergelijkt de meest voorkomende tools op de features die ik in klant-audits controleer. Prijzen zijn geverifieerd via de leveranciersites in augustus 2026.
| WAF | Type | Prijs 2026 | DDoS | Rate limit | Bot-detectie | Malware scan | Cleanup incl. | 2FA | GDPR NL |
|---|---|---|---|---|---|---|---|---|---|
| Cloudflare Free | DNS | €0 | Basis | Nee | Basis | Nee | Nee | Ja | Ja |
| Cloudflare Pro | DNS | $25/mnd | Geavanceerd | Ja (10k/mnd) | Beter | Nee | Nee | Ja | Ja |
| Cloudflare Business | DNS | $250/mnd | Vol | Ja (onbeperkt) | Bot Management add-on | Nee | Nee | Ja | Ja |
| Sucuri Basic | DNS | $199,99/jr | Ja | Ja | Ja | Ja | 1x/jr | Ja | Ja |
| Sucuri Pro | DNS | $299,99/jr | Ja | Ja | Ja | Ja | Onbeperkt | Ja | Ja |
| Wordfence Free | Endpoint | €0 | Nee | Basis | Nee | Basis (30 dagen delay) | Nee | Ja | Ja |
| Wordfence Premium | Endpoint | $149/jr | Nee | Ja | Ja | Real-time | Nee | Ja | Ja |
| Wordfence Care | Endpoint | $590/jr | Nee | Ja | Ja | Real-time | Managed | Ja | Ja |
| Wordfence Response | Endpoint | $1.250/jr | Nee | Ja | Ja | Real-time | 1u SLA | Ja | Ja |
| Ninja Firewall Free | Endpoint | €0 | Nee | Basis | Basis | Nee | Nee | Nee | Ja |
| Ninja Firewall WP+ | Endpoint | vanaf ~$45/jr | Nee | Ja | Ja | Nee | Nee | Nee | Ja |
| MalCare Protect | Hybride | $99/jr | Nee | Ja | Ja | Ja | Nee | Ja | Ja |
| MalCare Repair | Hybride | $299/jr | Nee | Ja | Ja | Ja | Onbeperkt | Ja | Ja |
| Solid Security Pro | Endpoint | $99/jr | Nee | Ja | Ja | Patchstack | Nee | Ja | Ja |
| Imunify360 (hoster) | Server | vanaf $12/mnd | Beperkt | Ja | Ja | Ja | Nee | n.v.t. | Ja |
Prijzen te verifiëren via Cloudflare Plans, Wordfence Pricing en de Sucuri prijspagina.
De belangrijkste conclusies uit deze matrix zijn:
- Cloudflare Free biedt DNS-proxy en CDN voor €0, maar geen malware-scan.
- Wordfence Free scant wel, maar zonder real-time signatures (30 dagen vertraging).
- Sucuri is de enige tool met cleanup-garantie in het basispakket.
- Ninja Firewall Pro is de goedkoopste betaalde optie met echte rate-limiting, maar mist 2FA en malware-scan.
Web application firewall WordPress MKB kiezen: beslisboom per situatie
Er is geen universeel goede keuze. Wel is er per bezoekersprofiel een combinatie die in mijn praktijk 8 op de 10 keer de juiste blijkt. Onderstaande roadmap is de beslisboom die ik zelf gebruik bij een klant-intake:
- Traffic onder 5.000 bezoekers/maand, budget €0. Cloudflare Free + Wordfence Free. Cloudflare doet DNS-proxy, verbergt je origin-IP en absorbeert basale DDoS. Wordfence Free voegt login-lockdown en 2FA toe. Nadeel: malware-signatures 30 dagen vertraagd. Voor een corporate site of blog zonder e-commerce is dat acceptabel.
- Traffic 5.000–50.000 en actieve brute-force problemen. Cloudflare Pro ($25/mnd) + Wordfence Premium ($149/jr). Zet in Cloudflare een rate-limit rule op
/wp-login.php(max 5 per minuut per IP) en Wordfence’s login-throttle op 3 fouten voor lockout. Deze combi elimineert 95% van brute-force zonder gebruikers te hinderen. - E-commerce met Mollie, Stripe of Adyen. Cloudflare Pro + Wordfence Premium, met expliciete allowlist voor webhook-IP’s. Bij WooCommerce is een fout in de webhook-flow duurder dan de false-positive zelf: één gemiste iDEAL-callback en de order blijft op “pending” hangen. IP-ranges voor Mollie staan gedocumenteerd op de Mollie-developerspagina.
- Financieel, juridisch of gezondheid (high-risk target). Sucuri Pro ($299,99/jr) met onbeperkte cleanup. Voor een YMYL-site die persoonsgegevens verwerkt is een cleanup-SLA meer waard dan een goedkopere plugin. Meldplicht datalek bij de Autoriteit Persoonsgegevens begint bij 72 uur, dus wachten op een externe cleaner is geen optie.
- Managed hosting (Kinsta, WP Engine, Cloudways, Savvii). Kinsta bundelt Cloudflare Enterprise-WAF in elke plan vanaf $35/mnd, WP Engine heeft ingebouwde WAF via hun global edge network. In die gevallen extra: Wordfence Free voor 2FA en malware-scan, geen tweede DNS-laag toevoegen (dubbele proxy = brekende redirects).
- Freelance-webmaster of agency met 10+ klant-sites. Wordfence heeft een Multisite Care/Response, maar de betere prijs zit in Patchstack of MalCare’s site-management dashboard. Ninja Firewall’s centralized-logging is dan meer waard dan de individuele feature-parity.
Deze zes situaties dekken 90% van wat ik in Zeeland en Vlaanderen tegenkom. Voor de 10% niches (headless WordPress, multi-region CDN, PCI DSS Level 1 scope) is de matrix niet toereikend en heb je een audit nodig.
Welke WAF past bij jouw WordPress-site?
Beantwoord zes vragen. Je krijgt een praktische keuze, een alternatief en precies de waarschuwingen die bij jouw situatie horen.
Een WAF is een extra laag. Updates, sterke accounts en goede back-ups blijven de basis.
Voor deze eenvoudige situatie is een aparte WAF niet automatisch nodig.
Voeg een edge-WAF toe als verkeer, aanvallen of beschikbaarheid daar later aanleiding toe geven.
- Updates en ongebruikte plugins opruimen.
- 2FA, sterke accounts en login-beperking.
- Offsite back-ups en monitoring.
Een indicatie op basis van je situatie. Test WAF-regels altijd op false positives, bijvoorbeeld bij webhooks en Belgische bezoekers. Prijzen en functies kunnen veranderen.
Overlap: welke feature van welke tool?
Wanneer je Cloudflare en Wordfence naast elkaar draait, doen ze een deel van hetzelfde werk. Welke van de twee neemt welke feature? De volgende tabel is het uitgangspunt dat ik in klant-installaties hanteer:
| Feature | Cloudflare | Wordfence | Aanbevolen bron |
|---|---|---|---|
| SSL/TLS-terminatie | Ja, gratis inbegrepen | Nee | Cloudflare |
| DDoS-mitigatie (L3/L4) | Ja | Nee | Cloudflare |
| Login brute-force | Rate-limit rule | Login attempts + 2FA | Wordfence (context-aware) |
| Malware-scan van bestanden | Nee | Ja | Wordfence |
| CDN + caching | Ja | Nee | Cloudflare |
| WAF-rules (SQLi, XSS) | Managed Ruleset | Custom firewall | Beide, exclusion-lijsten overlappen |
| Bot-detectie | Bot Fight Mode | Live Traffic bot-tag | Cloudflare voor volume, Wordfence voor context |
| Country-blocking | Firewall Rules | Country-blocking (Premium) | Cloudflare (edge = geen server-load) |
| IP-allowlist | Ja | Ja | Beide, propagatie-volgorde belangrijk |
| Vulnerability scanning | Nee | Ja (plugin/theme) | Wordfence |
Vuistregel: wat Cloudflare op de edge kan filteren, laat je door Cloudflare doen (bespaart PHP-resources). Wat context nodig heeft ("wie is deze user? welk endpoint?") laat je door Wordfence doen. De overlap in WAF-rules is meestal ok, mits je de logs van beide monitort en dubbele blocks (allowlist in Cloudflare, block in Wordfence) oplost.
Setup per hostingpaneel
De praktische kant. Wat kost het om een WAF live te krijgen op de meest voorkomende Nederlandse en Belgische hostingpanelen?
Cloudflare DNS-routering activeren
- Maak een gratis account op cloudflare.com en voeg je domein toe.
- Cloudflare scant je bestaande DNS-records en toont ze in een preview.
- Kopieer de twee nameservers die Cloudflare toewijst (bijvoorbeeld
chloe.ns.cloudflare.comenoliver.ns.cloudflare.com). - Wijzig nameservers in je registrar:
- TransIP: Domeinen → jouwsite.nl → Nameservers → "Andere nameservers gebruiken" → beide invoeren.
- Antagonist: Klantenservice → Domeinen → nameservers wijzigen → beide invoeren.
- Combell: Configuratie → Domeinnaam → DNS-instellingen → nameservers overschrijven.
- Wacht 15 minuten tot 24 uur op DNS-propagatie. Cloudflare stuurt een e-mail zodra de switch actief is.
Cloudflare Transform Rule voor XML-RPC-block
XML-RPC is een klassiek brute-force en pingback-doel. Blokkeer het via een custom rule in Cloudflare:
(http.request.uri.path eq "/xmlrpc.php")
Action: BlockVoeg toe onder Security → WAF → Custom Rules → Create rule → paste bovenstaande expression → Action: Block. Werkt op elk plan, ook Free.
Wordfence installatie via WP-CLI
Voor SSH-gebruikers is de snelste installatie:
# Wordfence installeren en activeren
wp plugin install wordfence --activate
# Activatie-timestamp registreren
wp option update wordfence_activation_time $(date +%s)
# API-key koppelen (interactief, uit e-mail)
wp option update wordfence_api_key JOUW_KEY_HIERDaarna in wp-admin: Wordfence → Firewall → Optimize the Firewall → volg de learning-mode-wizard van 7 dagen. Wordfence leest je server-config (Apache/Nginx/LiteSpeed) en installeert een .user.ini waardoor de firewall vóór WordPress laadt.
Voor extra login-bescherming in wp-config.php:
// Wordfence Login Security captcha op v3 zetten
define('WORDFENCE_LS_CAPTCHA', 'v3');Sucuri Firewall API-keys setup
- Log in op je Sucuri-dashboard, ga naar Website Firewall → Settings → API.
- Kopieer de "API key" en "Secret" (beide 32-tekens hex).
- Installeer de gratis Sucuri Security-plugin uit de WP-repository.
- Ga naar Sucuri Security → Firewall → API Key → plak beide in.
- Wijzig in je DNS:
A-record voor je root enwwwnaar het IP dat Sucuri opgeeft (varieert per klant, staat in Firewall → General Settings).
DirectAdmin ModSecurity aanzetten
Voor Neostrada en Argeweb (DirectAdmin-basis):
- Log in op DirectAdmin → Account Manager → ModSecurity.
- Toggle "Enable ModSecurity" naar Aan.
- Selecteer ruleset "OWASP CRS" (voorkeur boven Comodo, minder false-positives op WooCommerce).
- Zet Paranoia Level op 1 (niet 2 of 3, dat blokkeert legitieme WP-admin POSTs).
- Whitelist rule 218500 en 942100 (bekende WooCommerce/WordPress false-positives).
Bij twijfel: eerst 48 uur in "detection mode" draaien, ModSecurity-log lezen via DirectAdmin → Advanced Features → Access & Error Logs, dan pas naar "blocking mode".
cPanel WHM ModSecurity
Voor Antagonist, Vimexx en Hostnet (cPanel-basis, WHM-toegang bij VPS):
- Log in op WHM → Security Center → ModSecurity Vendors.
- Installeer "OWASP ModSecurity Core Rule Set" als vendor.
- Ga naar ModSecurity Configuration → SecRuleEngine → zet op "DetectionOnly" voor 48 uur.
- Log naar
/etc/apache2/logs/modsec_audit.logschrijft nu welke rules zouden triggeren. - Whitelist per site via WHM → ModSecurity Tools → Hits List → "Disable Rule for this site".
- Zet daarna SecRuleEngine op "On".
Zonder WHM-toegang (shared cPanel-hosting) is ModSecurity meestal al aan of vergrendeld. Vraag support om per-site false-positives te whitelisten.

Drie concrete scenario's uit klantpraktijk
Scenario A: Cloudflare Pro te aggressive voor Belgische bezoekers
Klant in Kaprijke merkte dat Vlaamse bezoekers challenge-pages kregen op checkout. Nederlandse bezoekers stroomden wel gewoon door. Zo'n challenge-page is een JavaScript-check. Cloudflare's "Bot Fight Mode" bleek te agressief op Belgacom-IP-blocks.
Fix: Cloudflare dashboard → Security → Bots → Bot Fight Mode → Off. Vervangen door custom rule:
(cf.threat_score gt 30 and http.request.uri.path contains "/wp-login")
Action: Managed ChallengeAlleen challenge bij verdachte score EN login-URL. Vlaamse checkout-flow onaangetast.
Scenario B: Wordfence blokkeert Mollie-webhook
Een klant in Sint-Niklaas kreeg iDEAL-orders die "pending" bleven omdat Wordfence de Mollie-webhook-POST als "suspicious pattern" blokkeerde. Live Traffic-log toonde 403 Blocked by firewall rule 39.
Fix: Wordfence → Firewall → All Firewall Options → Whitelisted URLs → toevoegen /wc-api/mollie_return en /wc-api/mollie_wc_gateway_ideal_webhook. Daarnaast Mollie's IP-range whitelisten via Wordfence → Blocking → IP Access Rules → Allow: 104.211.238.0/24. Webhook binnen 10 minuten weer werkend, geen verloren orders.
Scenario C: Sucuri cleanup na hack
Klant in Middelburg belde op zaterdagavond: site redirected bezoekers via Google-zoekresultaten naar een Turkse gok-affiliate. Wordfence Free had de infectie 3 dagen eerder al gedetecteerd maar mail-notificaties gingen naar een oude adres.
Wat gebeurde:
- Zaterdag 22:00: contact opgenomen met Sucuri via Emergency Cleanup ($199).
- Zondag 04:00 (6 uur later): eerste diagnose. Twee backdoors in
wp-content/uploads/2023/en één inmu-plugins/. - Zondag 14:00: cleanup afgerond, wachtwoorden gereset, secret keys in
wp-config.phpopnieuw gegenereerd. - Maandag: klant overgestapt naar Sucuri Pro-jaarabonnement ($299,99) voor onbeperkte cleanups.
Kosten: €175 emergency + €280 abonnement + 2u van mij voor DNS-migratie en post-mortem = €600 totaal. Zonder Sucuri had de klant richting €1.500 gezeten en 2 dagen downtime.
WAF-stapelen: overlap, conflict en volgorde
Meerdere WAF-lagen tegelijk kán werken, maar loopt vaak stuk op IP-propagatie. Wat je moet weten:
- Cloudflare proxied verkeer → jouw server ziet Cloudflare-IP, niet echte bezoeker. Installeer de Cloudflare-plugin voor WordPress of voeg de volgende snippet toe aan
wp-config.php.
// Echte bezoeker-IP uit Cloudflare-header halen
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}Zonder deze snippet blokkeert Wordfence Cloudflare-IP's in plaats van aanvallers.
- Log-diagnostics om te zien wie blocked. Bij een klacht "ik kom niet op de site" loop je dit af.
- Check Cloudflare dashboard → Security → Events → filter op bezoeker-IP.
- Als geen event: check Wordfence → Tools → Live Traffic → filter op IP.
- Als geen event: check server error-log (cPanel: Metrics → Errors; DirectAdmin: Access & Error Logs) voor ModSecurity-hits.
- IP-allowlist volgorde: Cloudflare → server → WordPress. Wanneer je een IP wilt whitelisten, doe het in alle lagen. Anders blokkeert de tweede laag alsnog. Volgorde in mijn workflow.
- Cloudflare Firewall Rules → Allow IP.
- Server-level (
.htaccessof firewall van hoster) → Allow IP. - Wordfence Blocking → IP Access Rules → Allow.
- Wanneer overlap OK is: Cloudflare voor DDoS + Wordfence voor endpoint-context. Cloudflare doet globale rate-limits, Wordfence de fijnmazige rules.
- Wanneer conflict optreedt: Cloudflare Pro's Managed Ruleset + Wordfence Firewall op Extended Protection kunnen dezelfde SQLi-poging dubbel loggen. Niet gevaarlijk, wel verwarrend. Los op door één van beide te configureren op "Log only" en de ander op "Block".

Wanneer je géén WAF nodig hebt
Niet elke site verdient de configuratie-overhead. Situaties waar ik géén WAF adviseer:
- Low-traffic personal blog zonder logins. Als je site geen wp-admin openbaar toont (via
.htaccessIP-restrict) en geen forms heeft, is de aanvalsvector minimaal. Regelmatige backups + core-updates zijn genoeg. - Landingspagina zonder formulieren. Een statische campagnepagina op WordPress is functioneel een brochure. Cloudflare Free voor DDoS is nog verstandig, verder niets.
- Kortlevende marketing-site (onder 3 maanden). De setup-tijd van Wordfence learning-mode is 7 dagen. Voor een 8-weekse campagne loont dat niet. Cloudflare Free volstaat.
- Site achter een managed edge (Kinsta, WP Engine). Zoals eerder: dubbele proxy geeft brekende redirects. Enkel Wordfence Free voor 2FA volstaat.
Wanneer een webmaster inschakelen
Doe de setup zelf als je binnen 90 minuten via bovenstaande stappen bij een werkende configuratie bent. Bel iemand in als:
- Je een gehackte site hebt met omzet-impact (elke minuut redirect kost bezoekers).
- Je Cloudflare Business of Enterprise moet configureren met de Bot Management add-on (custom prijs op offerte-basis, doorgaans enterprise-tier).
- Je meer dan 5 klant-sites tegelijk beheert en centralized-logging nodig hebt.
- Je een PCI DSS-scope hebt en de WAF-configuratie moet documenteren voor auditors.
Voor mijn klanten kost een volledige WAF-setup (Cloudflare + Wordfence + config) 2 tot 3 uur werk (€140 tot €210), inclusief 7-daagse follow-up voor false-positive tuning.
Vast in de keuze?
Kom je er niet uit welke WAF-combinatie bij jouw MKB-site past, of loopt je huidige setup vast op false-positives? Stuur me een mail via /contact/. Ik doe een 30 minuten audit op basis van je site-URL en actuele config, en geef een concreet advies met setup-tijd en kosten. Factuur alleen daadwerkelijk bestede uren aan €70, zonder minimumafname.



