Immer wieder werden die Anmeldeseiten von Webseiten angegriffen und dabei werden dann in kurzer Zeit bekannte Namen und Passworte ausprobiert.
Unter den vielen Anfragen leidet dann die Performance der Webseite, weil die Anfragen bearbeitet werden müssen und das regelmäßig recht teure Anfragen sind.

Daher ist es sinnvoll, die Anzahl der Abrufe auf eine Anmeldeseite (hier am Beispiel Wordpress) zu einzuschränken.

Es gibt für WordPress selber verschiedene Module, die solche BruteForce Angriffe abwehren können. Sinnvoller ist es aber diese so früh wie möglich zu unterbinden. D.h. noch bevor der Webserver diese Anfragen bearbeiten muss.

In meinem Beispiel verwende ich den nginx als Reverse-Proxy vor einem Apache-Webserver, der eigentliche Arbeit erledigt.

Zuerst definieren wir unsere Zugriffszone und die Limits.

/etc/nginx/conf.d/10_limit.conf

limit_req_zone $binary_remote_addr zone=ZONENAME:10m rate=2r/m;

zone = Name der Zone (ZONENAME ersetzen) und Zeitfenster (hier 10minuten) rate = Anzahl von Verbindungen pro Zeiteinheit

/etc/nginx/sites_available/domain.de.conf

    location ~* ^/(wp-login|xmlrpc).php$ {
        limit_req zone=ZONENAME burst=5 nodelay;
        limit_req_log_level info;
        proxy_pass http://apache;
    }

burst=5 5 zusätzliche Versuche bei den ersten Verbindungen
nodelay keine Wartezeit sondern Fehler 503 (s.u.)

    location / {
        proxy_pass       http://apache;
    }

Alle anderen Anfragen werden an den Apache weitergeleitet.

Optional: Custom Errorpage für Error 503

    error_page 503 @ratelimit;
    location  @ratelimit {
        root  /var/www/errors;
        rewrite ^(.*)$ /error503.html break;
    }

Zuletzt noch die Konfiguration aktivieren.

nginx -t&&systemctl reload nginx

Ab sofort limiert der Nginx die Zugriffe auf wp-login.php und xmlrpc.php.

An der Apache Konfiguration müssen keine Änderungen vorgenommen werden.

Trotz dieser Maßnahme, sollten die WordPress Module nicht abgeschaltet werden.

Ohne einen ReverseProxy oder bei einem normalen Webhoster, lässt sich die Anmeldeseite auch einfach per .htaccess mit einem Passwort schützen.
Das ist für die meisten Angriffe ausreichend.

Previous Post Next Post