adminForge

free | no tracking | no logging | no advertising

Das ist unser Motto. Mit adminForge bieten wir kostenlose Dienste an. Unser Ziel ist es, eine freie und datensparsame Alternative zu bekannten Diensten bereitzustellen. Seit 2014 betreiben wir adminForge gemeinsam mit Spaß an der Technik und an Open-Source.

WordPress via .htaccess absichern

Aus gegebenen Anlass, dieser Blog, möchte ich kurz erklären wie wir eine WordPress Webseite auch ohne Fail2Ban, nämlich per .htaccess, absichern können.

Punkt 1: Zugriffe auf die XML-RPC Schnittstelle abstellen

Um die Schnittstelle komplett zu deaktivieren, reichen diese vier Zeilen in der Apache Webserver Konfiguration oder .htaccess Datei aus.

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Nachteil: Kein Empfang von Trackbacks, keine Nutzung von Drittanbietersoftware wie WordPress for Android/iOS. Für Blogger, die auf Trackbacks setzen oder eine  Mobile App nutzen, kommt die Abschaltung kaum in Frage.

Punkt 2: Zugriffe auf die XML-RPC Schnittstelle einschränken

Mit einem aktivierten mod_setenvif Apache Modul kann der User Agent gefiltert werden.

<IfModule mod_setenvif.c>
  <Files xmlrpc.php>
    BrowserMatch "Poster" allowed
    BrowserMatch "WordPress" allowed
    BrowserMatch "Windows Live Writer" allowed
    BrowserMatch "wp-iphone" allowed
    BrowserMatch "wp-android" allowed

    Order Deny,Allow
    Deny from All
    Allow from env=allowed
  </Files>
</IfModule>

Im Beispiel-Code sind Zeile für Zeile folgende Clients freigegeben:
– Poster
– WordPress-Blogs
– Windows Live Writer
– WordPress for iOS
– WordPress for Android
Nicht benötigte Freigaben können zeilenweise entfernt werden.
Neue User Agents können hinzugefügt und somit freigeschaltet werden.

Punkt 3: Zugriff auf bestimmte Dateien unterbinden

Mit den folgenden Zeilen kann der Zugriff auf diverse Dateien verboten werden.

<FilesMatch "(\.htaccess|\.htpasswd|wp-config\.php|liesmich\.html|readme\.html|license\.txt)">
  order deny,allow
  deny from all
</FilesMatch>

Punkt 4: Absicherung der Login Seite wp-login.php

Die Login Seite können wir wie folgt mit einer extra HTTP Auth Abfrage ausstatten, für den Apache wahlweise in der vHost Konfiguration oder .htaccess Datei im Root-Ordner der WordPress Installation.
Allow from kann bei Bedarf auch weggelassen werden!

Apache:

<Files wp-login.php>
   Order deny,allow
   Deny from all
   AuthName "Restricted Admin-Area"
   AuthType Basic
   AuthUserFile ~/.htpasswd
   Require valid-user
   Allow from [DOMAIN.NAME] 
</Files>

 Nginx:

location = /wp-login.php {
   auth_basic "Restricted Admin-Area";
   auth_basic_user_file /etc/nginx/htpasswd;

   allow [IP.ADDRESSE]; 
   deny all;

   include /etc/nginx/conf.d/fastcgi.conf;
}

Die Kennwortdatei und das Passwort erstellen wir mit dem folgenden Befehl (1. Apache | 2. Nginx).

htpasswd -c ~/.htpasswd [BENUTZER]
htpasswd -c /etc/nginx/htpasswd [BENUTZER]

Punkt 5: Direkte Ausführung von PHP-Dateien unterbinden

Oftmals ist der Uploads Ordner unter /wp-content/uploads ein beliebter Einfallspunkt für Angreifer, da dieser in den meisten Fällen beschreibbar sein muss. Die Ausführung von PHP Dateien kann mit einer .htaccess Datei im genannten Ordner wie folgt unterbunden werden.

Apache:

<FilesMatch .php>
   Order deny,allow
   Deny from all
</FilesMatch>

Nginx:

location ~ ^/wp-content/uploads/.+\.php$ {
   return 444;
}

-Dominion