Stappenplan om je WordPress website zo veilig mogelijk te maken (uitgebreid)

Deze handleiding is ervoor bedoeld om je bestaande WordPress installatie volledig te vergrendelen om hem zo veilig mogelijk te maken.

De volgende items zijn vereist voor deze handleiding:

  • cPanel account met één WordPress (meerdere WordPress sites in één cPanel account niet ondersteund)
  • WordPress geinstalleerd in de 'public_html'
  • Geldig SSL certificaat is geïnstalleerd op het domein
  • WordPress is geconfigureerd om via HTTPS te werken
  • SSH toegang

Voordelen:

  • WordPress is veiliger dan een standaard installatie

Nadelen:

  • Onderhoud aan de website moet handmatig gebeuren

Belangrijk
Het extra beveiligen van een WordPress betekent niet dat deze niet meer geupdate hoeft te worden voor kwetsbaarheden.

We gaan alle bestanden volledig vergrendelen, let op dat het hierdoor de volgende dingen niet meer mogelijk zijn:

  • Theme's uploaden via WordPress
  • Plugins uploaded via WordPress
  • Let's Encrypt SSL aanvragen via HTTP

Start met het inloggen via SSH

# ssh securewp@securewp.myhoasted.com

We passen als eerst de .htaccess aan om eventuele PHP in WordPress mappen te voorkomen. Voeg de volgende code toe aan het bestand 'public_html/.htaccess':

# nano public_html/.htaccess
File: public_html/.htaccess

# Voorkom listing van files
Options All -Indexes

# Blokkeer directe toegang tot error_log/wp.config.php/.htaccess bestanden
<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
	Order deny,allow
	Deny from all
</FilesMatch>

# Blokkeer directe toegang tot
<FilesMatch "(\.(zip|tar|gz|bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)|~)$">
	Order deny,allow
	Deny from all
</FilesMatch>

# Blokkeer directe toegang tot wp-includes bestanden
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>


# Blokkeer directe toegang tot wp-content/plugins/* bestanden
RewriteRule wp-content/plugins/(.*\.ph(?:p[345]?|t|tml))$ - [R=404,L]

# Blokkeer directe toegang tot wp-content/themes/* bestanden
RewriteRule wp-content/themes/(.*\.ph(?:p[345]?|t|tml))$ - [R=404,L]

# Blokkeer verborgen bestanden
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]

# Forceer HTTPS
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

# Forceer HTTPS op het domein permanent. HTTP gebruik is niet meer mogelijk.
<IfModule mod_headers.c>
    # Remove "includeSubDomains" if you don't want to enforce HSTS on all subdomains
    Header always set Strict-Transport-Security "max-age=31536000;includeSubDomains"
</IfModule>

#STANDAARD WP .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Sla het bestand op via:
CTRL + X
Druk 'Y' for Yes
Druk 'Enter' om het bestand op te slaan.

Blokkeer PHP bestanden in uploads map
Plaats vervolgens nog een .htaccess in de uploads map.

# nano public_html/wp-content/uploads/.htaccess
File: public_html/wp-content/uploads/.htaccess

# Sluit PHP bestanden uit in de uploads map
<Files ~ "\.ph(?:p[345]?|t|tml)$">
   deny from all
</Files>

Sla het bestand op via:
CTRL + X
Druk 'Y' for Yes
Druk 'Enter' om het bestand op te slaan.

IP Blokkade wp-login.php
Het is ook mogelijk om de 'wp-login.php' pagina enkel toegankelijk te maken tot bepaalde IP adressen. Voeg daarvoor de volgende code toe aan 'public_html/.htaccess'.

# nano public_html/.htaccess
File: public_html/.htaccess

#IP restrictie voor wp-login.php
<Files wp-login.php>
	Order Deny,Allow
	Deny from all
	Allow from xx.xx.xx.xx #IP1
	Allow from xx.xx.xx.xx #IP2
</Files>

#REST VAN .htaccess

Blokkeer bestandswijzigingen in WordPress

# nano public_html/wp-config.php
File: public_html/wp-config.php

###WORDPRESS CONFIG
define('WP_DEBUG', false);
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS',true);
define('UPLOADS','wp-content/uploads');

Sla het bestand op via:

CTRL + X
Druk 'Y' for Yes
Druk 'Enter' om het bestand op te slaan.

Blokkeer het bewerken van bestanden

Door het uitvoeren van de volgende regels worden (uitvoeren als losse regels zonder #)

# find ./public_html/ -type f -exec chmod 444 {} \;
# find ./public_html/ -type d -exec chmod 555 {} \;
# find ./public_html/.htaccess -type f -exec chmod 444 {} \;
# find ./public_html/wp-config.php -type f -exec chmod 400 {} \;
# find ./public_html/wp-content/uploads/ -name .htaccess -type f -exec chmod 444 {} \;
# find ./public_html/wp-content/uploads/ -type d -exec chmod 755 {} \;
# find . -name public_html -type d -exec chmod 555 {} \;

Deblokkeer de rechten

Als het tijd is om updates aan te brengen in de WordPress kan je de volgende regels uitvoeren via SSH om alles te deblokkeren:

# find . -name public_html -type d -exec chmod 775 {} \;
# find ./public_html/ -type f -exec chmod 644 {} \;
# find ./public_html/ -type d -exec chmod 755 {} \;

Nog steeds hulp nodig? Contact ons Contact ons