Wordpress, Permissions und Fail2ban

Um Wordpress zumindest ein wenig sicherer zu machen, sollte man einigen Anregungen auf der Seite https://kinsta.com/de/blog/wordpress-sicherheit beachten. 

Fail2ban

Wie andere zurecht bemerkten, ist fail2ban nicht die beste Art. Bei DDOS Angriffen reicht fail2ban nicht aus. Aber vor einfachen BruteForce-Attacken kann es schützen. 

/etc/fail2ban/jail.d/wordpress.conf
[wordpress-domain.url]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 3
/etc/fail2ban/filter.d/wordpress.conf
# Filter WordPress wp-login

[INCLUDES]
before = common.conf
 
[Definition]
failregex = <HOST>.*POST.*(wp-login\.php|xmlrpc\.php).* 200
datepattern = %%d/%%b/%%Y:%%H:%%M:%%S %%z

Wordpress setzt im Log bei nicht erfolgreichen Login-Versuchen den Status-Code 200.

Verschiedene logpath Angaben  im Jail können entweder in verschiedenen Abschnitten [wp-domain-01], [wp-domain-02] angegeben werden oder unter logpath können mehrere Logs angegeben werden.

logpath  = /var/www/vhosts/site1.com/log/errorlog
           /var/log/apache*/*error.log
           /var/www/vhosts/site1.com/subdom/log/errorlog
           /var/www/vhosts/site3/log/errorlog
           /var/www/vhosts/site4/log/errorlog  

File Permissions

Unter https://developer.wordpress.org/advanced-administration/server/file-permissions/ wird ausführliche auf die in verschiedenen Szenarien zu setzenden File-Permissions beschrieben. 

Es hilft, dies per Script zu lösen.

#!/bin/sh
#############################
# DATE: 2023-09-30
# NAME: wp-sec-mod.sh
# PROGRAM: Set secure read, write, exec mode for files and directories
#          for wordpress install.
# HOWTO: wp-sec-mode.sh [WORDPRESS-INSTALL-DIR]
# [WORDPRESS-INSTALL-DIR]: relative or absolute path
#############################

## VARS
W_DIR="${1}"
D_MODE="750"
N_MODE="644"
S_MODE="400"

## PROG
find ${W_DIR} -type d -exec chmod ${D_MODE} '{}' \;
find ${W_DIR} -type f -exec chmod ${N_MODE} '{}' \;
find ${W_DIR} -type f -name "wp-config.php" -exec chmod ${S_MODE} '{}' \;

xml-rpc blocken

Im Apache blockt die folgende Angabe in den einzelnen vhosts den Zugriff vollständig.

location ~* ^/xmlrpc.php$ {
return 403;
}

Das obige Verfahren hat unter apache2.4 seltsamerweise zu Problemen geführt. Daher anderer Vorschlag:

<FilesMatch "(^\.|wp-config\.php|xmlrpc\.php|(?<!robots)\.txt|(liesmich|readme)\.*)">
   Require all denied
</FilesMatch>

Extra Admin-URL

https://403.ie/how-to-serve-wp-admin-from-a-separate-subdomain/