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 %%zWordpress 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/