In het artikel WordPress bruteforce beveiliging? las je al dat bepaalde vertragingstechnieken niet altijd de beste oplossing tegen WordPress bruteforce-aanvallen op wp-login.php zijn. Het is vaak beter een IP-adres whitelist te maken om aanvallers buiten de deur te houden, en in dit artikel laat ik je zien hoe je dit eenvoudig doet…

WordPress wp-login.php beveiliging met een IP whitelist

Zoals gezegd, een IP whitelist is mijns inziens de beste beveiliging tegen bruteforce-aanvallen op WordPress’ wp-login.php loginmechanisme. Om een IP-adres whitelist aan te leggen is het handig om zo min mogelijk andere gebruikers binnen jouw blog te hebben. Alle gebruikers moeten kunnen inloggen en moeten dus met hun IP-adres opgenomen zijn in de whitelist.

Als een WordPress blogbeheerder moet jij die IP-adressen kennen en bijhouden.

Whitelist? Blacklist?
Verduidelijking: in een whitelist neem je alleen adressen op van diegenen die toegang verleend hebben gekregen. Het tegenovergestelde is een blacklist: iedereen heeft toegang tenzij die opgenomen is in de blacklist. Omdat een blacklist standaard iedereen toegang geeft (tenzij…), is dat een minder veilige optie.

Tegenwoordig noemt met een whitelist vaak een allowlist. Dat is inclusiever.

Wat is mijn IP-adres?

Als je een IP whitelist wilt maken moet je natuurlijk weten wat jouw IP-adres is. Op https://ip.sidn.nl/ vind je jouw IPv4- en IPv6-adres. Heb je meer dan één gebruiker, dan moeten alle gebruikers die website bekijken en hun IP-adres aan jouw doorgeven.

Let wel, vaak is een IP-adres dynamisch, en dat betekent dat er een nieuw IP wordt uitgedeeld op het moment dat het ADSL- of kabelmodem wordt gereset. Dan moet dat nieuwe IP-adres opgenomen worden in de whitelist.

Windows Server IIS web.config

In een Windows Server IIS webhosting-omgeving, zoals bij Vevida, kun je web.config-bestanden gebruiken om bepaalde zaken te configureren. Waaronder een IP-adres blacklist of whitelist. Gelukkig kan WordPress goed met web.config-bestanden overweg tegenwoordig en zul je er één aantreffen in de webroot met daarin WordPress’ PermaLinks-rewrites.

Uitgaande van deze standaard web.config voor WordPress, moet je de volgende code helemaal onderaan opnemen, op de regel nèt boven </configuration>:

<!--  WordPress wp-login.php IP adres whitelist:  alleen de hieronder vermelde IP adressen hebben toegang tot de  /wp-login.php locatie. Alle andere krijgen een Access Denied  melding. Dit werkt met de IIS IP and Domain Restrictions -  of IP Security - module.--><location path="wp-login.php">  <system.webServer>    <security>      <ipSecurity allowUnlisted="false"> <!-- deze regel blokkeert alle IP adressen, behalve die hieronder staan vermeld -->        <add ipAddress="203.0.113.15" allowed="true" />        <add ipAddress="203.0.113.16" allowed="true" />      </ipSecurity>    </security>  </system.webServer></location>

Om deze wijziging te maken kun je het web.config-bestand via FTP downloaden en wijzigen. De fictieve IP-adressen 203.0.113.15 en 203.0.113.16 moet je aanpassen naar jouw echte IP-adressen.

Beschikt jouw Windows webhoster over Helicon Ape als IIS module, dan kun je ook onderstaand .htaccess-bestand gebruiken.

Apache .htaccess

Op een Linux met Apache systeem kun je .htaccess-bestanden gebruiken om configuraties te maken of aan te passen. Eén is het uitvoeren van een IP-adres controle met daaraan gekoppeld een actie: deny of allow.

Neem in jouw .htaccess-bestand het volgende op om jouw IP-adres(sen) te whitelisten:

<Files wp-login.php>  order deny,allow  deny from all  Allow from 203.0.113.15  Allow from 203.0.113.16</Files>

Vervang 203.0.113.15 en 203.0.113.16 weer met de relevante IP-adressen. Laat je hier <Files> en </Files> achterwege, dan geldt de IP-whitelist voor héél WordPress, wat mij onwenselijk lijkt.

Bovenstaande .htaccess syntaxis is verouderd, en werkt alleen op oude Apache 2.2 (en 2.4 tot 2.4.6) webservers! Hierom is het belangrijk dat je de goede syntaxis gebruikt zoals ik uitleg in mijn Saotn.org artikel WordPress .htaccess security best practices in Apache 2.4.6+! Zie hieronder over mod_authz_host.

Apache 2.4 en mod_authz_host
Als jij gebruik maakt van Apache 2.4 met de mod_authz_host module, dan moet je rekening houden met een andere syntaxis. Namelijk:

# Block access to wp-login.php.<Files wp-login.php>  Require ip 203.0.113.15</Files>

Voor meerdere IP adressen:

# Block access to wp-login.php.<Files wp-login.php>  Require ip 203.0.113.15 203.0.113.16 203.0.113.17  # of het hele netwerk / IP netblok:  # Require ip 203.0.113.0/255.255.255.0</Files>

Op Saotn.org ga ik in het artikel WordPress .htaccess security best practices in Apache 2.4.6+ dus verder in op .htaccess-bestanden en Apache’s mod_authz_core.

WordPress IP Whitelist Plugins

Uiteraard zijn er ook WordPress plugins beschikbaar voor het aanleggen van een IP whitelist. Hieronder volgt een aantal. Ik heb geen banden of ervaring met deze plugins, sommige plugins zijn al lange tijd niet meer bijgehouden. Let op, dit kan verouderd zijn!

Limit Attempts by BestWebSoft

Limit Attempts by BestWebSoft

De plugin Limit Attempts by BestWebSoft

(…) Limit the number of failed login attempts per user and block user IP for a certain period of time based on your settings.

Conclusie

Het is relatief eenvoudig om jouw WordPress loginpagina te beveiligen tegen allerlei aanvallen, zoals bruteforce. Toch gebeurt dit nog te weinig; lang niet alle WordPress websites zijn afdoende beveiligd tegen eenvoudige aanvallen zoals bruteforce.

In dit artikel heb ik je twee website-configuratiebestanden (web.config en .htaccess) gegeven om alleen jouw IP-adres toegang te geven tot de WordPress inlogpagina. Ook heb ik vrij snel eenvoudige plugins kunnen vinden die iets soortgelijks doen, en dan heb ik de welbekende beveiligingsplugins iThemes Security, NinjaFirewall, Wordfence of Sucuri Security – Auditing, Malware Scanner and Security Hardening nog niet aangehaald.

Laat een reactie achter

Reacties

Nog geen reacties. Waarom begin je de discussie niet?

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *