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”.
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