Hurtigt og enkel blokering af bruteforce-angreb mod WordPress-sider

For et par dage siden afholdte WordPress Copenhagen deres månedlige meetup her, hos os.

Emnet var sikkerhed, og et af de problemer som blev diskuteret var de bruteforce-angreb, som har hærget siden i vinter. Metoden er ganske simpel, og kan sammenlignes med at man forsøger at bryde en kombinationslås op, ved at prøve én kombination af gangen.

Foruden at der findes en risiko for at angrebet faktisk lykkedes, så skaber denne type angreb et problem, både for webserveren og for webmastere, eftersom at et angreb kan få en hel del alarmklokker til at ringe.

De fleste webhoteller, inklusive Surftown, har en blokering mod disse angreb. Der er dog nogle undtagelser, såsom VPS-servere og lignende, og i disse tilfælde kan det være fordelagtigt at blokere angreb på en anden måde.

Hvordan gør man så?
Den hyppigste form for blokering er at tilføje almindelig HTTP-godkendelse for wp-admin/ og wp-login.php. Det fungerer i princippet for alle, men kræver et ekstra sæt legitimationsoplysninger. At whiteliste IP-adresser virker også fint, men administrationen heraf kan blive irriterende, hvis du har mange forskellige personer, som har behov for at logge på administrationen.

Som et alternativ kan du bruge mod_rewrite til at blokere alle forsøg på login, som ikke kommer fra det rigtige sted. For at gøre dette, så skal du først oprette en separat login-side til din WordPress-installation.

Der er flere plugins, som giver mulighed for at tilføje en login-formular på en anden side. I dette eksempel opretter vi en login-side, som kaldes ‘minloginside’ og tilføjer en login-formular ved blot at kopiere HTML-koden fra den normale login-side, og derefter indsætte det på min ‘minloginside’.

Bagefter åbner vi filen .htaccess, som er placeret som en skjult fil i din WordPress-mappe. Hvis den ikke findes, så kan du oprette en tom tekstfil og navngive den .htaccess.

I toppen af filen skal vi indsætte følgende kode:

RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^https://mitdomæne.tld/minloginside/$ [NC]
RewriteRule ^wp-login.php$ – [F,L]

For at dette virker for netop din hjemmeside, så skal adressen til din loginside selvfølgelig rettes. Når dette er gjort, så skal du bare gemme filen, og er dit websted beskyttet mod loginforsøg, som ikke kommer fra din loginside. Mislykkede forsøg vil resultere i en fejl 403.

4 Comments

  1. FM
    09/10/13 @ 09:26

    Tilføj captcha på login siden så har du løst problemet

  2. cmquist
    09/10/13 @ 09:57

    Hej FM!

    Du har helt ret i at det vil fjerne sikkerhedsrisikoen. Den mængde indloggningsforsøg der kommer vil dog fortsat kunne nedlægge en side, hvis det får brugeren til att ramme en begrænsning, fx. for CPU-forbrug på en delt server. At blokere dem bruger også langt mindre båndebredde. ^CQ

  3. Johnny Lai-Kristiansen
    13/10/13 @ 16:28

    Super tak Connie!

  4. Mark
    18/02/15 @ 14:27

    Hvorfor kan jeg ikke rette min .htaccess? Er det denne linje, der forhindrer det? Har prøvet at rette på serveren, men også at downloade og derefter rette.

    # Added by Surftown to prevent brute force attack against wp-login.php

    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} POST
    RewriteCond %{HTTP_COOKIE} !^.*wordpress_test_cookie.*$ [NC]
    RewriteRule wp-login.php – [F,L]