Mettere in sicurezza WordPress con Nginx è una operazione assolutamente necessaria considerando la facilità con cui può essere bucato da hacker e malintensionati che possono sfruttare bug più o meno noti.

E’ possibile inserire alcuni istruzioni in Nginx per ridurre al minimo il rischio di essere hackerati.

Mettere in sicurezza WordPress con Nginx e Plesk

Se si ha a disposizione il plesk, è possibile inserire facilmente le istruzioni andando sul dominio scelto in Impostazioni Apache & Nginx e incollarle nel campo “Direttive Nginx aggiuntive”.

ATTENZIONE. I passi di seguito riportati devono essere eseguiti da persone esperte in quanto sono potenzialmente pericolosi e potrebbero danneggiare il server. Se non sai cosa stai facendo puoi richiederci un preventivo gratuito.

Mettere in sicurezza WordPress con Nginx da terminale

Se si ha a disposizione il terminale, è possibile inserire facilmente le istruzioni inserendo le istruzioni all’interno di “http {” subito prima di “include /etc/nginx/conf.d/*.conf;”

sudo nano /etc/nginx/nginx.conf

Disattivare l’indice delle cartelle

E’ importante disattivare l’indice delle cartelle in modo che un hacker non possa sapere cosa c’è nelle cartelle.

## disable directory listing
autoindex off;

Bloccare accesso a xmlrpc.php

WordPress utilizza il file xmlrpc.php per consentire a terze parti di pubblicare contenuti all’interno del sito tramite le API XML-RPC. Viene in genere utilizzato dal Jetpack e dalla App WordPress. Nella maggior parte dei caso può essere tranquillamente disabilitato.

## block access to xmlrpc.php
location ~* /xmlrpc.php$ {
    deny all;
    access_log off;
    log_not_found off;
}

Impedire l’accesso ad alcuni files

Bloccare l’accesso diretto ad alcuni file

## block access to configuration files and other files
location ~* /(wp-config.php|readme.html|license.txt) {
    deny all;
}

Bloccare accesso diretto ai file php

In WordPress ci sono tanti file php a cui un utente esterno non dovrebbe mai poter accedere direttamente.

## block direct access to php file
location ~* /(?:files|wp-content|wp-includes|akismet)/.*.php$ {
    deny all;
    access_log off;
    log_not_found off;
}

Bloccare accesso ai file che iniziano con il punto

Come per i file php visti precedentemente, anche i file che iniziano con il “.” come .htaccess, .user.ini, e .git possono contenere informazioni sensibili e quindi l’accesso diretto deve essere bloccato.

## block direct access to dotfile like .htaccess, .user.ini, and .git
location ~ /\.(svn|git)/* {
    deny all;
    access_log off;
    log_not_found off;
}
location ~ /\.ht {
    deny all;
    access_log off;
    log_not_found off;
}
location ~ /\.user.ini { 
    deny all; 
    access_log off;
    log_not_found off;
}

Impedire l’accesso ai file di backup e di log

Assicurarsi di non esporre altri file sensibili come backup e log

# block direct access to backup extensions & log files
location ~* ^.+\.(bak|log|old|orig|original|php#|php~|php_bak|save|swo|swp|sql|wpress)$ {
    deny all;
    access_log off;
    log_not_found off;
}

Limitare le richieste di Login

La URL di login di WordPress è la stessa per milioni di siti, wp-login.php, ed è per questo che gli hacker potrebbero provare ad accedere al sito provando diverse combinazioni di username e password.

Si può inserire una regola che può limitere il numero di richieste che la pagina di login può gestire in 1 secondo.

Inserire nel file configurazione di nginx

sudo nano /etc/nginx/nginx.conf

riavviare nginx

systemctl restart nginx

la linea seguente all’interno di “http {” subito prima di “include /etc/nginx/conf.d/*.conf;”

limit_req_zone $binary_remote_addr zone=WPLOGINLIMIT:10m rate=2r/s;

N.B. Non inserire in caso di siti con molti accessi possibili come per esempio grandi ecommerce

quindi è possibile aggiungere

## limit login requests
location ~ \wp-login.php$ {
    limit_req zone=WPLOGINLIMIT;
}

Nascondere la versione di nginx

# hide nginx version
server_tokens off;

Nascondere la versione di php

# hide php version
fastcgi_hide_header X-Powered-By;
proxy_hide_header X-Powered-By;

Proteggere gli headers

## secure headers

### enforce browser to load your site from HTTPS
add_header Strict-Transport-Security "max-age=31536000";

### prevent content sniffing
add_header X-Content-Type-Options nosniff;

### prevent your site to load from an iframe
add_header X-Frame-Options SAMEORIGIN;

### prevent pages from loading when they detect reflected cross-site scripting
add_header X-XSS-Protection "1; mode=block";

Fonte:< a href="https://gist.github.com/nfsarmento/57db5abba08b315b67f174cd178bea88" rel="noopener" target="_blank" title="Wordpress e Nginx">https://gist.github.com/nfsarmento/57db5abba08b315b67f174cd178bea88

Preventivo Sicurezza Wordpress

    Contattaci per un preventivo gratuito