Hoe kan je jouw WordPress back-end beschermen via IP whitelisting
Om WordPress veiliger te maken gebruik je in eerste instantie een stevig wachtwoord, maar daar hoeft het niet bij te blijven. Door de toegang tot je WordPress back-end te limiteren tot specifieke IP-adressen, krijgen kwaadwillenden zelfs de kans niet om naar je wachtwoord te raden.
Het beveiligen van je WordPress website is van groot belang. Niet alleen voor je bedrijfsimago, maar ook voor je technische SEO. Een stevig wachtwoord gebruiken is een goed begin, maar zolang je inlogpagina open staat voor iedereen, kunnen kwaadwillenden nog steeds naar je wachtwoord raden.
Daarom gaan we via IP whitelisting de toegang tot onze back-end (en het inlogscherm in het algemeen) beperken tot een specifiek IP-adres. Hiervoor gebruik je jouw publiek IP-adres (dit kan je vinden via een site zoals whatismyip.com).
Belangrijke bedenkingen
Let wel, de meeste gebruikers beschikken standaard over een dynamisch IP-adres, dit betekent dat je IP-adres regelmatig verandert! Wanneer je werkt met zaken zoals whitelisting, is het dan ook aangeraden om bij je internetprovider een vast (fixed) IP-adres te vragen. Gezien het aantal IP-adressen beperkt is, kan dit vaak enkel bij zakelijke abonnementen, en tegen betaling.
Nog een belangrijke bedenking: deze whitelisting limiteert alle toegang tot de inlogpagina. Als je een website hebt waar gebruikers ook kunnen inloggen (zoals een webshop), dan kan je de specifieke regel voor het blokkeren van wp-login.php best weghalen.
En een laatste bedenking: het is belangrijk om admin-ajax.php niét te blokkeren. Dit wordt namelijk gebruikt door heel wat plugins en thema’s om je website vlot te doen werken. Wanneer dit endpoint geblokkeerd wordt, gaan er dus heel wat functionaliteiten op je website breken.
De voordelen en nadelen van IP whitelisting
Het gebruik van IP whitelisting voor je WordPress back-end heeft enkele belangrijke voordelen:
- Je bepaalt specifiek welke adressen toegang mogen hebben tot je WordPress back-end. Zelfs wanneer iemand je wachtwoord heeft, kan deze persoon dus nog niet inloggen.
- Je bent niet kwetsbaar voor brute force attacks, waarbij een aanvaller probeert om naar je wachtwoord te raden.
- Je reduceert de druk op je server. Dagelijks zijn er heel wat bots die specifiek zoeken naar pagina’s zoals wp-login.php om daar geautomatiseerde inlogpogingen te ondernemen. Door deze pagina’s volledig te blokkeren, verlies je geen server resources aan dergelijke bot traffic.
- Je moet geen extra plugin installeren voor deze extra beveiligingslaag, aangezien je dit instelt via het .htaccess bestand.
Uiteraard zijn er ook enkele nadelen waar je rekening mee moet houden:
- Wanneer je het IP-adres van jouw thuisadres whitelist, heb je enkel via dat adres toegang tot jouw WordPress back-end. Wanneer je op verplaatsing bent kan je dus niet zomaar even inloggen op je WordPress back-end via een publieke hotspot of via mobiele data. Je moet dan eerst een VPN-verbinding opzetten met je thuisadres. Dit zorgt ervoor dat je – ook vanop afstand – hetzelfde IP-adres kan gebruiken.
- Wanneer je geen vast (fixed) IP-adres hebt, is het slechts een kwestie van tijd vooraleer je plots een nieuw IP-adres hebt gekregen en je daardoor bent buitengesloten. Dan dien je jouw nieuwe IP-adres te gaan whitelisten.
- Wanneer reguliere gebruikers op jouw website ook gebruikmaken van wp-admin (bijvoorbeeld voor het wijzigen van hun wachtwoord), zullen zij ook geen toegang meer hebben. Deze setup is dus niet geschikt voor elke website.
IP Whitelisting instellen via .htaccess
Voor de whitelisting voeg je volgende regels toe aan je .htaccess file, net boven de standaard WordPress rules:
# Whitelisting
<IfModule mod_rewrite.c>
RewriteEngine On
# Block wp-admin for everyone except your IP
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$
RewriteRule ^wp-admin/? - [F,L]
</IfModule>
# Protect login
<Files "wp-login.php">
Require ip 123.456.789.000
</Files>
# Allow AJAX
<Files "admin-ajax.php">
Require all granted
</Files>
En wat als je meerdere IP-adressen wil whitelisten? Dan kan je simpelweg extra regels toevoegen:
# Whitelisting
<IfModule mod_rewrite.c>
RewriteEngine On
# Block wp-admin for everyone except these IPs
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$
RewriteCond %{REMOTE_ADDR} !^111\.222\.333\.444$
RewriteCond %{REMOTE_ADDR} !^555\.666\.777\.888$
RewriteRule ^wp-admin/? - [F,L]
</IfModule>
# Protect login
<Files "wp-login.php">
Require ip 123.456.789.000
Require ip 111.222.333.444
Require ip 555.666.777.888
</Files>
# Allow AJAX
<Files "admin-ajax.php">
Require all granted
</Files>
