
Je beveiligingsplugin of je host meldt ineens honderden mislukte inlogpogingen op je site, en je vraagt je af of je moet schrikken. Beveilig de WordPress-login met tweestapsverificatie, een limiet op inlogpogingen, een uniek beheerdersaccount zonder de naam admin, sterke wachtwoorden uit een wachtwoordmanager en waar mogelijk een gewijzigde inlog-URL of IP-beperking op wp-admin. Mislukte pogingen zijn normaal, een gelukte is het probleem. Hieronder lees je welke maatregelen het meeste opleveren en welke ingangen bijna iedereen vergeet.
Wat een brute-force-aanval op je login is
Een brute-force-aanval is het automatisch uitproberen van gebruikersnamen en wachtwoorden op wp-login.php, net zo lang tot er één werkt. Daar zit zelden een persoon achter. Het is een bot die je inlogpagina heeft gevonden, en dat is niet moeilijk, want /wp-admin en /wp-login.php zitten bij elke WordPress-site op dezelfde plek. Een slimmere variant is credential stuffing. Daarbij probeert de bot geen willekeurige wachtwoorden, maar combinaties van e-mailadres en wachtwoord die bij een datalek op een andere site zijn uitgelekt. Gebruik je overal hetzelfde wachtwoord, dan is dat binnen een paar pogingen raak. Zie je honderden pogingen per dag in je logs, dan betekent dat dus niet dat je site gehackt is, alleen dat hij gevonden is. Log daarnaast altijd in via https, zodat je wachtwoord niet onderweg kan worden onderschept. Bij ons is SSL standaard en gratis via Let’s Encrypt.
Tweestapsverificatie: de maatregel met het meeste effect
De maatregel met het meeste effect is tweestapsverificatie, een andere inlog-URL heeft het minste effect. Tweestapsverificatie (2FA) vraagt naast je wachtwoord om een tweede bewijs, meestal een code uit een app op je telefoon. Een gelekt wachtwoord is dan niet meer genoeg, want de aanvaller heeft je telefoon niet. Zie het als een tweede slot op de deur dat alleen opengaat met iets wat jij bij je draagt. 2FA is overigens de meest gebruikte vorm van meervoudige verificatie (MFA), dus als je die term tegenkomt, gaat het om hetzelfde idee. Mijn advies is een authenticator-app (TOTP) in plaats van codes per e-mail of sms. Sommige plugins ondersteunen ook een hardwaresleutel of passkey, en dat is nog sterker. Zo stel je WordPress 2FA in met een plugin zoals Two Factor of WP 2FA.
- Installeer en activeer de plugin.
- Ga naar Gebruikers > Profiel en kies de authenticator-app als methode.
- Scan de QR-code met je app en voer de code ter controle in.
- Sla de back-upcodes op in je wachtwoordmanager.
- Maak 2FA in de plugin verplicht per rol, in elk geval voor beheerders en redacteuren.
- Test de nieuwe login in een privévenster voordat je uitlogt.
Die laatste stap sla ik nooit over. Klopt er iets niet, dan ben je nog ingelogd en kun je het herstellen zonder jezelf buiten te sluiten.
Wachtwoorden, inlogpogingen en het admin-account
Een uniek wachtwoord per site maakt credential stuffing kansloos, en dat is belangrijker dan of het wachtwoord lang of ingewikkeld is. Laat een wachtwoordmanager het genereren en onthouden, dan hoef je er zelf niet over na te denken. Meer daarover lees je in wachtwoordmanagers en veilige wachtwoorden.
Een limiet op inlogpogingen remt brute force af en blokkeert een IP-adres tijdelijk na een paar mislukte pogingen. Dat kan met een plugin zoals Limit Login Attempts Reloaded, of op de server zelf. Het verschil is groter dan het lijkt. Een plugin grijpt pas in als WordPress al geladen is, terwijl een limiet op serverniveau de poging blokkeert voordat WordPress start, bijvoorbeeld met een captcha-pagina na meer dan tien mislukte pogingen. Die serverkant hoort bij goede managed WordPress hosting, en meer over de afweging lees je bij firewall op serverniveau. Wel eerlijk is dat zo’n limiet minder helpt tegen botnets die vanaf duizenden IP-adressen tegelijk proberen. Daarom staat 2FA bovenaan.
Heet je beheerdersaccount nog admin, dan geef je de bot de helft van de inloggegevens cadeau. Maak een nieuwe beheerder aan, draag de content over en verwijder het oude account. Let ook op je weergavenaam. Is die gelijk aan je inlognaam, dan staat je gebruikersnaam gewoon in het auteursarchief van je site. Geef ook niet iedereen de beheerdersrol. In gebruikersrollen in WordPress lees je welke rol bij welke taak past.
wp-admin afschermen en de inlog-URL wijzigen
Met een IP-beperking is wp-admin alleen bereikbaar vanaf vaste IP-adressen, zoals het netwerk van je kantoor. Dat stel je in via .htaccess of je hostingpaneel. Het werkt goed voor kleine teams op een vaste plek, maar met een wisselend IP-adres thuis of onderweg sluit je jezelf buiten. Heb je geen vast IP-adres, dan is een extra wachtwoord op de map een goed alternatief. In cPanel heet dat Directory Privacy, en het werkt met HTTP-authenticatie. Zorg wel dat admin-ajax.php bereikbaar blijft, want veel plugins en thema’s gebruiken dat bestand ook voor bezoekers.
Een andere inlog-URL vermindert de ruis in je logs, maar is geen echte beveiliging. Het is alsof je je voordeur naar de zijkant van het huis verplaatst. De meeste bots lopen er dan langs, maar wie zoekt, vindt hem toch. Wil je het doen, gebruik dan een plugin zoals WPS Hide Login en pas nooit core-bestanden aan, want de volgende update draait dat terug. Na het wijzigen werkt /wp-admin niet meer als bladwijzer. Hoe je dan wel inlogt, staat in inloggen op je WordPress-website.
Vergeet de achterdeuren naast je inlogpagina niet
Je inlogpagina is niet de enige ingang, en de andere ingangen worden bij controles het vaakst vergeten. XML-RPC (xmlrpc.php) is een oudere koppeling waarmee apps op afstand inloggen, en aanvallers gebruiken die om veel wachtwoorden tegelijk te proberen. Zet het uit als je het niet gebruikt, maar check eerst of Jetpack of de WordPress-app er niet van afhankelijk zijn. Kijk ook onder Gebruikers > Profiel naar applicatiewachtwoorden. Die omzeilen 2FA bij toegang via de API, dus verwijder alles wat je niet herkent.
Daarna kom je buiten WordPress uit. Je hostingpaneel geeft toegang tot alles, dus zet 2FA op je klantaccount op my.surver.nl en op cPanel, en gebruik SFTP met een sterk, uniek wachtwoord. Vergeet ook het e-mailaccount van de beheerder niet. Een wachtwoordreset loopt via mail, dus 2FA op WordPress zonder een goed beveiligde mailbox is half werk. Dat geldt ook voor de mailbox bij je e-mail hosting. Gaat er een medewerker of bureau weg, verwijder of degradeer dan het account en log via Gebruikers > Profiel alle sessies elders uit.
Wat we bij Surver op alle shared hostingpakketten doen, is een groot deel van die inlogpogingen tegenhouden voordat WordPress laadt. Een ModSecurity-firewall, Bot Blocker en automatische IP-blokkades vangen het meeste botverkeer af. Binnen WordPress beheer komt daar vanaf Business login protection met 2FA en een activity log bij. Zie je al een onbekend beheerdersaccount of een inlog die je niet kunt verklaren, dan is er mogelijk al iemand binnen. Kijk dan bij WordPress gehackt of in de stappen om malware te verwijderen uit WordPress, en lees voor het grotere plaatje WordPress-beveiliging en de zeven oorzaken van een WordPress-hack.
Veelgestelde vragen
Ik ben mijn telefoon met de 2FA-app kwijt. Hoe kom ik erin?
Log in met een van je back-upcodes. Heb je die niet, hernoem dan via SFTP of File Manager tijdelijk de map van de 2FA-plugin in wp-content/plugins, zodat de plugin uitschakelt. Lukt het niet, neem dan contact op met je hostingpartij.
Welke 2FA-methode is het veiligst?
Een authenticator-app of een hardwaresleutel. Een gratis app zoals Google Authenticator of Authy volstaat prima. E-mailcodes zijn zo veilig als je mailaccount, en sms is de zwakste vorm.
Hoeveel inlogpogingen moet ik toestaan?
Een handvol per IP-adres met een tijdelijke blokkade is een goed uitgangspunt. Op Surver shared hosting krijgt een IP-adres na meer dan tien mislukte inlogpogingen, ook op wp-admin, automatisch een captcha-pagina.