WordPress oder wp-login.php via .htpasswd und .htaccess absichern

5 Kommentare Autor: Jürgen (jdo)

Eigentlich bin ich schon fast auf dem Weg nach Spanien und habe bereits gesagt, dass ich ein paar Wochen nur wenig Zeit habe. Irgendwie scheinen nervige, lästige Angreifer das aber zu riechen und nötigen mich, eine weitere Security-Schicht für meinen WordPress Blog einzurichten. Ich wollte das eigentlich schon lange machen, habe es aber ehrlich gesagt vergessen oder immer wieder verdrängt. Dabei ist es so einfach und setzt nur das Erstellen einer Datei mit Namen .htaccess voraus.

Mein Server (VPS / root-Server) ist eigentlich ganz gut abgesichert und fail2ban funktioniert gut. Das Backup schnurrt ebenfalls, wie es soll.

wp-login.php ist eigentlich abgesichert, aber …

Bei meiner Installation von fail2ban sind fehlgeschlagene Login-Versuche via wp-login.php bereits aktiv. Dafür ist ein Filter zuständig, der sich hier /etc/fail2ban/filter.d/apache-wp-login.conf befindet.

Das Dumme ist nur, dass ich heute aufgewacht bin und dann ein paar E-Mails der Art hatte: Jemand hat das Zurücksetzen des Passworts für folgendes Benutzerkonto angefordert:

Das ist zwar nicht sooooo schlimm, aber ganz geheuer ist mir die Sache auch nicht. Deswegen schieben wir dem Treiben einen Riegel vor und schützen wp-login-php mit einem Webserver-seitigen Passwort. In meinem Fall ist das Apache.

.htpasswd erstellen

Die Datei .htaccess kommt mit der WordPress-Installation und die brauchen wir später noch. Zunächst einmal musst Du eine Datei namens .htpasswd erstellen (den Punkt vor der Datei beachten!) und dort den Benutzernamen und den Hash des gewünschten Passworts hinterlegen.

Die Datei .htpasswd muss sich nicht im root-Verzeichnis Deiner WordPress-Installation befinden und bei mir ist sie da auch nicht. Die liegt irgendwo im System und das ist ein weiteres Rätsel für eventuelle Angreifer. Das Passwort ist zwar nicht im Klartext hinterlegt, aber trotzdem. Gut versteckt ist gut versteckt. Außerdem würden wir Apache später anweisen, Dateien von Typ .ht* sowieso nicht auszuliefern.

Du kannst den entsprechenden Eintrag über htaccesstools.com/htpasswd-generator/ generieren. Traust Du dem Frieden nicht, gibt es dort ebenfalls eine Anleitung, wie Du das Passwort über Deinen eigenen Server erstellen kannst. Dazu legst Du eine PHP-Datei an und rufst sie entsprechend auf.

Hier ein Beispiel mit dem Anwender STRENGGEHEIM und Passwort NOCHGEHEIMER. Da kommt dann Folgendes raus:

.htpasswd erstellen

.htpasswd erstellen

Apache anweisen, das Passwort zu verlangen

Ist die Datei .htpasswd erstellt, dann passt Du die Datei .htaccess an. Wie das funktioniert, ist auch auf der WordPress-Seite beschrieben. Da findest Du die Anleitung, solltest Du nicht Apache, sondern Nginx verwenden.

Nachfolgend findest Du, wie ich das implementiert habe.

# Stop Apache from serving .ht* files
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

# Protect wp-login
<Files wp-login.php>
AuthUserFile /ABSOLUTER/PFAD/.htpasswd
AuthName "Private access"
AuthType Basic
require user GEHEIMERANWENDER
</Files>

Gibt es Probleme mit dem Einloggen, dann schau in der Datei /var/log/apache2/error.log nach. Es ist Samstag in der Früh und ich hatte mich vertippt. Das endete dann in einem 500 Internal Server Error. Ich habe den Vertipper aber nicht gleich gesehen und gedacht: #$@§%&!

cat /var/log/apache2/error.log

hat dann Licht ins Dunkel gebracht und die Fehlermeldung war:

[authn_file:error] [pid 4235] (2)No such file or directory: [client XX.XXX.XX.X:51090] BLABLA: Could not open password file: /XXX/XXXXX/XXX/.htpasswd

Nun funktioniert aber alles und will ich mich bei meinem WordPress Backend anmelden, dann ist eine weitere Schutzschicht implementiert.

Wordpress und wp-admin oder wp-login.php noch besser geschützt

WordPress und wp-admin oder wp-login.php noch besser geschützt




 Alle Kommentare als Feed abonnieren

5 Kommentare zu “WordPress oder wp-login.php via .htpasswd und .htaccess absichern”

  1. Didi says:

    Ich habe meine Login-Seite mit Rename wp-login.php versteckt: https://de.wordpress.org/plugins/rename-wp-login/

    • jdo says:

      Das ist sicherlich nicht dumm, aber mir nicht so ganz geheuer. Im Endeffekt sicherst Du WordPress mit einem WordPress-Plugin ab. Ich setze da lieber auf eine komplett separate Schicht. Aber Deine Lösung ist auf jeden Fall besser als meine zuvor -> gar kein Schutz 🙂

  2. Didi says:

    Schon klar. Zumindest habe ich jetzt keine fehlgeschlagenen Logins mehr. Mal sehen, wie lange es dauert, bis man die Seite findet. Dann würde ich mich an Deiner Lösung versuchen.

  3. gadean says:

    Ich hab einen ähnlichen Ansatz gewählt, aber statt eines Passworts habe ich einfach alle IP Adressen bis auf eine gesperrt.

    Funktioniert natürlich nur wenn man eine statische Adresse hat (direkt über den ISP, zweiten Server oder via VPN).

  4. Jens says:

    Password-Files für den Apache erstellt man üblicherweise mit dem Tool htpasswd, welches dem Apache beiliegt. Auf gar keinen Fall erzeugt man Passwörter online, da man sie damit ja schon aus der Hand gegeben hat.