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