Snabb och enkel blockering av brute force-angrepp mot WordPress-sidor

För ett par dagar sedan så hade WordPress Copenhagen sitt månatliga möte, och eftersom mötet hölls i våra lokaler så passade vi på att lyssna med.

Ämnet för kvällen var säkerhet, och ett av de problem som diskuterades var de brute force-angrepp som har härjat i sedan i vintras. Metoden är väldigt enkel och kan närmast liknas vid att man försöker bryta upp ett kombinationslås genom att testa en kod åt gången.

Förutom att det finns en risk för angreppet rent faktiskt lyckas, så utgör den här typen av angrepp ett problem både för webbservrar och för webbmasters eftersom de kan får en hel del alarmklockor att ringa.

De flesta webbhotell, Surftown inkluderat, har någon form av blockering för de här angreppen. Vissa undantag finns, som t.ex. VPS-servrar och liknande, och i de här tillfällena kan det vara en fördel att blockera angreppen på ett annat sätt.

Så, hur gör man?
Den absolut simplaste formen för blockering är att lägga till vanlig HTTP-autentisering för wp-admin/ och wp-login.php. Det fungerar i princip för alla, men kräver en extra uppsättning inloggningsuppgifter. Att vitlista IP-adresser fungerar utmärkt, men administrationen kan bli jobbig om man har många olika personer som behöver logga in.

Som ett alternativ, så kan man använda mod_rewrite, för att blockera alla loginförsök som inte kommer ifrån rätt plats. För att göra detta så behöver du först skapa en separat loginsida till din WordPress-installation.

Det finns flera plugins som ger möjlighet att lägga ett loginformulär på en annan sida. I det här exemplet skapar vi en loginsida, som heter minloginsida, och lägger ett loginformulär genom att helt sonika kopiera HTML-koden ifrån den vanliga loginsidan, och sedan klistra in den på minloginsida.

Efteråt så öppnar vi filen .htaccess, som ligger som en dold fil i WordPress-katalogen. Om den inte finns, så kan man skapa en tom textfil och ge den namnet .htaccess.

Överst i filen så klistrar vi in följande kodsnutt:

RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^http://mindomän.tld/minloginsida/$ [NC]
RewriteRule ^wp-login.php$ – [F,L]

För att det här skall fungera för just din sida, så skall adressen till loginsidan naturligtvis rättas. När det är gjort så skall du bara spara filen, och sedan är din sida skyddad ifrån inloggningsförsök som inte kommer ifrån din nya loginsida. Misslyckade loginförsök ifrån andra sidor kommer att resultera i ett 403-fel.