
WordPress sicherer – wp-admin und wp-login.php zusätzlich absichern – htaccess
Wie schon erwähnt betreibe ich diverse WordPress-Seiten in einer WP-Multisite-Installation.
Wichtigstes Plugin ist Wordfence-Security, welches nach veränderten Files sucht und Benutzer aussperrt (auf IP-Adressen-Ebene), falls es zuviele fehlgeschlagene Login-Versucht gibt. Da sich die „Aussperrungen“ in letzter Zeit häuften (Bruteforce-Attacken aus Fernost), wollte ich das ganze ein wenig „sicherer“ gestalten. Also entschied ich mich, die Zugriffe auf /wp-login.php und /wp-admin via Browser-Authentification (den meisten als „htaccess“ bekannt) zu sperren. Dies bietet sich in meinem Fall besonders an, da ich nur zwei aktive Nutzer der Backends habe. Wichtig: das ganze macht nur Sinn, wenn die htaccess-Zugangsdaten nicht denen des WordPress-Backends entsprechen.
Hier nun meine entsprechende Nginx-Config
location / { try_files $uri $uri/ /index.php?$args; } #nur bei Multisite-Installationen relevant location ~ ^/files/(.*)$ { expires max; try_files /wp-content/blogs.dir/$blogid/$uri /index.php; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } error_page 404 /index.php; location ~ ^/wp-login\.php$ { auth_basic "You shall not pass!"; auth_basic_user_file htpasswd; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.wordpress.sock; include fastcgi_params; } location /wp-admin { location ~ /wp-admin/admin-ajax.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.wordpress.sock; include fastcgi_params; } location ~* (/wp-admin/.*\.php)$ { auth_basic "You shall not pass!"; auth_basic_user_file htpasswd; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.wordpress.sock; include fastcgi_params; } } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.wordpress.sock; fastcgi_index index.php; include fastcgi_params; }
Der Grund für die vielen „doppelten“ PHP-Handler-Parameter ist, dass nginx nur die erste (bei Regex die erste, sonst best-match, also die längste Regel, die passt) Location beachtet, wodurch die letzte (.php$) Location ignoriert wird, falls wp-admin bzw wp-login.php matcht. Für Vereinfachungsvorschläge bin ich jederzeit zu haben.
Auch wichtig: /wp-admin/admin-ajax.php und einige Styles bzw. Bilder unterhalb von /wp-admin/ müssen weiterhin erreichbar bleiben, weshalb ich die Regel NUR auf .php-Endende Dateien anwende.
Wir hatten mal nen Hackversuch und haben dann einfach wp-admin und login nur zugänglich gemacht mit Cookie. Da mehrere Leute drauf zugreifen müssen haben wir ne php Datei erstellt die nen cookie setzt und ohne den sagt die htaccess halt nö.
Klar. Auch ne Lösung. Allerdings schlecht wenn die URL zum cookie setzen bekannt wird.