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.
1 2 3 4 |
<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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<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.
1 2 3 4 |
<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:
1 2 3 4 5 6 7 8 9 |
<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:
1 2 3 4 5 6 7 8 9 |
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).
1 2 |
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:
1 2 3 4 |
<FilesMatch .php> Order deny,allow Deny from all </FilesMatch> |
Nginx:
1 2 3 |
location ~ ^/wp-content/uploads/.+\.php$ { return 444; } |
-Dominion
1