:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

WordPress sicherer – wp-admin und wp-login.php zusätzlich absichern – htaccess

php, Webserver, Wordpress

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.

3 Comments

  1. Brian

    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ö.

    Antworten

Leave a comment

Loading Facebook Comments ...