{"id":731,"date":"2026-02-09T09:00:00","date_gmt":"2026-02-09T08:00:00","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/sicurezza-wordpress-brute-force\/"},"modified":"2026-02-18T18:04:21","modified_gmt":"2026-02-18T17:04:21","slug":"sicurezza-wordpress-brute-force","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/sicurezza-wordpress-brute-force\/","title":{"rendered":"Come Metto in Sicurezza WordPress da Attacchi Brute Force: La Mia Procedura"},"content":{"rendered":"<p>Se gestisci siti WordPress da qualche anno come faccio io, sai benissimo che gli attacchi brute force su <strong>wp-login.php<\/strong> sono all&#8217;ordine del giorno. Non \u00e8 questione di &#8220;se&#8221; verrai attaccato, ma di &#8220;quando&#8221;. Ogni singolo sito WordPress esposto su Internet riceve tentativi di accesso non autorizzati, spesso da botnet distribuite su centinaia di indirizzi IP diversi. Ho visto server con carichi CPU al 100% semplicemente perch\u00e9 migliaia di richieste POST venivano inviate contemporaneamente alla pagina di login. Il risultato? Siti lentissimi, utenti che non riescono ad accedere e, nel caso peggiore, account amministratore compromessi con conseguenze devastanti: defacement, malware iniettato, dati rubati e reputazione distrutta. Dopo anni di esperienza nella gestione di server e siti WordPress, ho sviluppato una procedura completa e stratificata che applico sistematicamente a ogni installazione che gestisco. In questo articolo ti condivido ogni singolo passaggio.<\/p>\n<p>La mia filosofia di sicurezza si basa su un principio fondamentale: la <strong>difesa in profondit\u00e0<\/strong>. Non mi affido mai a un singolo meccanismo di protezione, ma creo pi\u00f9 livelli di sicurezza sovrapposti, in modo che se uno fallisce, gli altri continuino a proteggere il sito. Questo approccio richiede un po&#8217; pi\u00f9 di lavoro iniziale, ma ti garantisco che nel lungo periodo ripaga enormemente. Ho messo in sicurezza oltre duecento installazioni WordPress nel corso degli anni, e questa procedura ha ridotto gli incidenti di sicurezza praticamente a zero. Ogni passaggio che troverai qui \u00e8 stato testato in produzione, affinato dopo aver analizzato migliaia di tentativi di attacco reali e ottimizzato per trovare il giusto equilibrio tra sicurezza e usabilit\u00e0. Non si tratta di teorie accademiche, ma di soluzioni concrete che puoi implementare subito sul tuo sito, anche se non sei un esperto di cybersecurity. Partiamo dall&#8217;inizio: come riconoscere che sei sotto attacco.<\/p>\n<h2>1. Identificare gli Attacchi Brute Force nei Log del Server<\/h2>\n<p>Il primo passo della mia procedura \u00e8 sempre quello di <strong>analizzare i log del server<\/strong> per capire l&#8217;entit\u00e0 del problema. Troppi amministratori non guardano mai i log e si accorgono degli attacchi solo quando il sito diventa irraggiungibile. Io dedico regolarmente tempo alla lettura dei log perch\u00e9 contengono informazioni preziosissime su cosa sta succedendo sul server. Ecco come procedo per identificare i tentativi di brute force in corso.<\/p>\n<ol>\n<li><strong>Accedi al server via SSH<\/strong> e naviga nella directory dei log di Apache o Nginx. Su server con Plesk, i log si trovano tipicamente in <b>\/var\/www\/vhosts\/tuodominio.it\/logs\/<\/b>. Su cPanel, cerca in <b>\/home\/utente\/access-logs\/<\/b> oppure <b>\/var\/log\/apache2\/<\/b> per configurazioni standard.<\/li>\n<li><strong>Cerca le richieste POST a wp-login.php<\/strong> con questo comando: <b>grep &#8220;POST \/wp-login.php&#8221; access_log | tail -100<\/b>. Se vedi decine o centinaia di richieste dallo stesso IP o da IP diversi in pochi minuti, sei sotto attacco brute force attivo.<\/li>\n<li><strong>Conta le richieste per IP<\/strong> per identificare gli attaccanti principali: <b>grep &#8220;POST \/wp-login.php&#8221; access_log | awk &#8216;{print $1}&#8217; | sort | uniq -c | sort -rn | head -20<\/b>. Questo comando ti mostra i 20 IP che hanno fatto pi\u00f9 tentativi di login, ordinati per numero di richieste.<\/li>\n<li><strong>Verifica anche xmlrpc.php<\/strong>, che \u00e8 un altro vettore di attacco molto comune: <b>grep &#8220;POST \/xmlrpc.php&#8221; access_log | wc -l<\/b>. Se il numero \u00e8 alto, hai un problema anche su quel fronte, che affronteremo pi\u00f9 avanti nella guida.<\/li>\n<li><strong>Controlla il log degli errori<\/strong> con <b>tail -500 error_log | grep -i &#8220;authentication&#8221;<\/b> per trovare eventuali errori di autenticazione fallita che confermano i tentativi di brute force.<\/li>\n<li><strong>Monitora in tempo reale<\/strong> con <b>tail -f access_log | grep &#8220;wp-login&#8221;<\/b> per osservare gli attacchi mentre accadono. Questo \u00e8 particolarmente utile quando stai per implementare le contromisure e vuoi verificare che funzionino immediatamente.<\/li>\n<\/ol>\n<p>Un segnale chiaro di attacco brute force \u00e8 vedere centinaia di richieste POST a wp-login.php con <strong>codice di risposta 200<\/strong> (la pagina viene caricata correttamente ogni volta) seguite da un redirect 302 solo in rari casi (che indicherebbe un login riuscito). Se noti un 302 tra tanti 200, significa che l&#8217;attaccante potrebbe aver indovinato le credenziali. In quel caso, cambia immediatamente tutte le password e verifica l&#8217;integrit\u00e0 del sito.<\/p>\n<h2>2. Limitare i Tentativi di Login con Plugin Dedicati<\/h2>\n<p>Il primo livello di protezione che installo sempre \u00e8 un plugin che <strong>limita il numero di tentativi di login<\/strong> consentiti da un singolo indirizzo IP. \u00c8 la contromisura pi\u00f9 semplice e immediata, e richiede letteralmente due minuti per essere configurata. Questo blocca la maggior parte degli attacchi brute force automatizzati, perch\u00e9 i bot tipicamente provano centinaia di combinazioni utente\/password in rapida successione.<\/p>\n<ol>\n<li><strong>Installa il plugin &#8220;Limit Login Attempts Reloaded&#8221;<\/strong> dalla dashboard WordPress: vai su Plugin \u2192 Aggiungi Nuovo \u2192 cerca &#8220;Limit Login Attempts Reloaded&#8221; \u2192 Installa e Attiva. Questo plugin \u00e8 gratuito, leggero, ben mantenuto e utilizzato da oltre due milioni di siti WordPress. Io lo preferisco ad alternative pi\u00f9 pesanti come Wordfence per questo specifico scopo perch\u00e9 ha un impatto minimo sulle performance.<\/li>\n<li><strong>Configura i parametri di blocco<\/strong> accedendo a Impostazioni \u2192 Limit Login Attempts. Io utilizzo questi valori: <b>4 tentativi consentiti<\/b>, <b>blocco per 20 minuti<\/b> dopo il superamento dei tentativi, <b>4 blocchi<\/b> prima di un blocco esteso di <b>24 ore<\/b>. Questi valori sono il risultato di anni di esperienza e bilanciano bene la sicurezza con la possibilit\u00e0 che un utente legittimo sbagli la password qualche volta.<\/li>\n<li><strong>Abilita le notifiche email<\/strong> per essere avvisato quando un IP viene bloccato. Imposta la notifica dopo il secondo blocco per evitare di essere sommerso di email durante un attacco massiccio, ma comunque restare informato sui tentativi pi\u00f9 persistenti.<\/li>\n<li><strong>Aggiungi alla whitelist il tuo IP<\/strong> (o il range di IP del tuo ufficio) per evitare di bloccarti fuori accidentalmente durante le sessioni di lavoro. Vai nella sezione &#8220;Whitelist&#8221; del plugin e inserisci il tuo indirizzo IP statico.<\/li>\n<li><strong>Verifica i log del plugin<\/strong> regolarmente dalla dashboard. Il plugin mostra statistiche dettagliate sui tentativi di login falliti, inclusi gli username provati e gli IP di origine. Queste informazioni sono utilissime per capire il pattern degli attacchi.<\/li>\n<\/ol>\n<p>Una nota importante: se il tuo sito \u00e8 dietro un <strong>reverse proxy o un CDN come Cloudflare<\/strong>, assicurati che il plugin sia configurato per leggere l&#8217;IP reale del visitatore dall&#8217;header corretto (tipicamente <b>X-Forwarded-For<\/b> o <b>CF-Connecting-IP<\/b>). Altrimenti vedrai tutti i tentativi provenire dallo stesso IP del proxy e il plugin diventer\u00e0 inefficace, oppure peggio, bloccher\u00e0 tutti i visitatori perch\u00e9 vedrebbe lo stesso indirizzo IP per chiunque si colleghi al sito.<\/p>\n<h2>3. Rinominare wp-login.php e Proteggere con .htaccess<\/h2>\n<p>Uno dei metodi pi\u00f9 efficaci nella mia procedura \u00e8 rendere <strong>invisibile la pagina di login<\/strong>. Se i bot non trovano wp-login.php, semplicemente non possono attaccarlo. Questo non \u00e8 &#8220;sicurezza tramite oscuramento&#8221; come unica misura, ma come livello aggiuntivo \u00e8 estremamente efficace. Abbinato alle altre protezioni, riduce drasticamente il volume di attacchi che il server deve gestire, con benefici anche sulle performance.<\/p>\n<ol>\n<li><strong>Installa il plugin &#8220;WPS Hide Login&#8221;<\/strong>, che \u00e8 leggero, gratuito e utilizzato da oltre un milione di siti. Dopo l&#8217;attivazione, vai su Impostazioni \u2192 WPS Hide Login e cambia l&#8217;URL di login da <b>\/wp-login.php<\/b> a qualcosa di personalizzato, ad esempio <b>\/accesso-riservato<\/b> o <b>\/mio-login-2024<\/b>. Evita URL troppo ovvi come \/login o \/admin. Annota il nuovo URL e comunicalo a tutti gli utenti del sito.<\/li>\n<li><strong>Configura la pagina di redirect<\/strong>: quando qualcuno prova ad accedere a \/wp-login.php, il plugin pu\u00f2 mostrare un errore 404 o reindirizzare a una pagina specifica. Io imposto sempre il redirect a una pagina 404 per non dare indicazioni all&#8217;attaccante sul fatto che il sito sia WordPress.<\/li>\n<li><strong>Aggiungi protezione .htaccess aggiuntiva<\/strong> alla directory wp-admin. Apri il file <b>.htaccess<\/b> nella root del sito e aggiungi questa regola per bloccare l&#8217;accesso diretto a wp-login.php anche bypassando il plugin:<\/li>\n<\/ol>\n<p>Ecco il codice <b>.htaccess<\/b> che utilizzo per proteggere la pagina di login con autenticazione HTTP aggiuntiva:<\/p>\n<pre>\n# Protezione wp-login.php con password HTTP\n&lt;Files wp-login.php&gt;\nAuthType Basic\nAuthName \"Area Riservata\"\nAuthUserFile \/home\/tuoutente\/.htpasswd\nRequire valid-user\n&lt;\/Files&gt;\n<\/pre>\n<p>Per creare il file <b>.htpasswd<\/b>, esegui da terminale: <b>htpasswd -c \/home\/tuoutente\/.htpasswd nomeutente<\/b> e inserisci la password quando richiesto. Il percorso del file .htpasswd deve essere <strong>fuori dalla document root<\/strong> del sito web, in modo che non sia accessibile via browser. Questo aggiunge un secondo livello di autenticazione: prima l&#8217;utente deve superare l&#8217;autenticazione HTTP, poi quella di WordPress.<\/p>\n<p>Un altro blocco .htaccess molto utile \u00e8 limitare l&#8217;accesso al pannello di amministrazione solo a determinati indirizzi IP:<\/p>\n<pre>\n# Limita accesso wp-admin per IP\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteCond %{REQUEST_URI} ^\/wp-admin [NC]\nRewriteCond %{REMOTE_ADDR} !^123.456.789.0$\nRewriteCond %{REMOTE_ADDR} !^111.222.333.444$\nRewriteRule ^(.*)$ - [F,L]\n&lt;\/IfModule&gt;\n<\/pre>\n<p>Sostituisci gli indirizzi IP con quelli da cui accedi normalmente. Se lavori da IP dinamico, questa soluzione \u00e8 meno pratica, ma resta utilissima per siti gestiti sempre dallo stesso ufficio con IP statico.<\/p>\n<h2>4. Implementare l&#8217;Autenticazione a Due Fattori (2FA)<\/h2>\n<p>L&#8217;autenticazione a due fattori \u00e8 forse la <strong>singola misura pi\u00f9 importante<\/strong> che puoi implementare. Anche se un attaccante dovesse indovinare username e password (cosa improbabile con le altre protezioni attive, ma non impossibile), senza il secondo fattore non potr\u00e0 comunque accedere. Personalmente considero il 2FA obbligatorio per qualsiasi account con privilegi di amministratore. Ecco la procedura che seguo per implementarlo su ogni sito che gestisco.<\/p>\n<ol>\n<li><strong>Installa il plugin &#8220;WP 2FA &#8211; Two-factor Authentication&#8221;<\/strong> dalla directory ufficiale di WordPress. Questo plugin \u00e8 sviluppato da WP White Security, un team specializzato in sicurezza WordPress, ed \u00e8 la soluzione che preferisco perch\u00e9 offre un ottimo equilibrio tra funzionalit\u00e0 e semplicit\u00e0 d&#8217;uso. La versione gratuita \u00e8 pi\u00f9 che sufficiente per la maggior parte dei siti.<\/li>\n<li><strong>Attiva il 2FA per tutti gli amministratori<\/strong>: durante il wizard di configurazione iniziale, seleziona &#8220;Tutti gli amministratori&#8221; come gruppo obbligatorio. Puoi anche estendere il requisito agli editor e agli autori per una protezione pi\u00f9 completa, soprattutto su siti multi-autore.<\/li>\n<li><strong>Scegli il metodo TOTP<\/strong> (Time-based One-Time Password) come metodo primario. Funziona con app gratuite come <b>Google Authenticator<\/b>, <b>Authy<\/b> o <b>Microsoft Authenticator<\/b>. Io preferisco Authy perch\u00e9 permette il backup cloud dei codici, quindi se perdi il telefono non resti tagliato fuori da tutti i tuoi siti.<\/li>\n<li><strong>Configura un metodo di backup<\/strong>: abilita i codici di backup monouso che l&#8217;utente pu\u00f2 stampare e conservare in un luogo sicuro. Ogni utente riceve tipicamente 10 codici di backup, ognuno utilizzabile una sola volta. Questo \u00e8 fondamentale per evitare lockout nel caso in cui il telefono con l&#8217;app di autenticazione non sia disponibile.<\/li>\n<li><strong>Imposta un periodo di grazia<\/strong> ragionevole: se rendi il 2FA obbligatorio, concedi agli utenti 3-5 giorni per configurarlo prima di forzare il blocco dell&#8217;accesso. Questo evita problemi con utenti meno tecnici che hanno bisogno di tempo per installare l&#8217;app sul telefono e capire il funzionamento del sistema.<\/li>\n<li><strong>Testa il funzionamento<\/strong> su un account di prova prima di forzarlo su tutti gli utenti. Verifica che il login funzioni correttamente con il codice TOTP, che i codici di backup funzionino e che il processo di recupero sia chiaro e documentato per tutti gli utenti del sito.<\/li>\n<\/ol>\n<p>Un&#8217;alternativa valida come plugin 2FA \u00e8 <strong>miniOrange Google Authenticator<\/strong>, che offre funzionalit\u00e0 simili con un&#8217;interfaccia leggermente diversa. Se gestisci molti siti, valuta anche soluzioni a livello server come moduli PAM per SSH con Google Authenticator, cos\u00ec proteggi sia l&#8217;accesso WordPress che quello al server stesso con un approccio unificato alla sicurezza.<\/p>\n<h2>5. Disabilitare XML-RPC e Proteggere Endpoint Vulnerabili<\/h2>\n<p>Il file <strong>xmlrpc.php<\/strong> \u00e8 uno dei vettori di attacco pi\u00f9 sfruttati dopo wp-login.php. Originariamente progettato per consentire la pubblicazione remota di articoli e la comunicazione tra siti WordPress (pingback e trackback), oggi \u00e8 utilizzato principalmente dagli attaccanti per effettuare brute force amplificati. Attraverso il metodo <b>system.multicall<\/b>, un singolo request HTTP pu\u00f2 testare centinaia di combinazioni di credenziali simultaneamente, rendendo gli attacchi molto pi\u00f9 efficienti e difficili da rilevare. Nella maggior parte dei siti che gestisco, XML-RPC non serve e pu\u00f2 essere disabilitato completamente senza alcuna conseguenza negativa.<\/p>\n<ol>\n<li><strong>Verifica se XML-RPC \u00e8 necessario<\/strong>: controlla se utilizzi l&#8217;app mobile di WordPress, Jetpack o servizi che richiedono XML-RPC. Se non usi nessuno di questi, puoi disabilitarlo senza problemi. L&#8217;API REST di WordPress, introdotta dalla versione 4.7, ha sostituito la maggior parte delle funzionalit\u00e0 di XML-RPC in modo pi\u00f9 sicuro e moderno.<\/li>\n<li><strong>Disabilita XML-RPC via .htaccess<\/strong> aggiungendo questo blocco al file nella root del sito:<\/li>\n<\/ol>\n<pre>\n# Blocca completamente xmlrpc.php\n&lt;Files xmlrpc.php&gt;\nOrder Deny,Allow\nDeny from all\n&lt;\/Files&gt;\n<\/pre>\n<ol start=\"3\">\n<li><strong>In alternativa, usa il plugin &#8220;Disable XML-RPC&#8221;<\/strong> se preferisci una soluzione gestibile dalla dashboard. Il plugin aggiunge semplicemente un filtro WordPress che disabilita tutte le funzionalit\u00e0 XML-RPC. \u00c8 la soluzione meno invasiva e pi\u00f9 facilmente reversibile.<\/li>\n<li><strong>Proteggi anche wp-cron.php<\/strong> da accessi esterni eccessivi. Sebbene non sia un vettore di brute force, un accesso massivo a wp-cron.php pu\u00f2 sovraccaricare il server. Disabilita il cron interno di WordPress aggiungendo in <b>wp-config.php<\/b>: <b>define(&#8216;DISABLE_WP_CRON&#8217;, true);<\/b> e configura un cron di sistema: <b>*\/15 * * * * wget -q -O &#8211; https:\/\/tuodominio.it\/wp-cron.php?doing_wp_cron &gt; \/dev\/null 2&gt;&amp;1<\/b><\/li>\n<li><strong>Blocca l&#8217;enumerazione degli utenti<\/strong> aggiungendo in .htaccess:<\/li>\n<\/ol>\n<pre>\n# Blocca enumerazione utenti via REST API e parametro author\nRewriteCond %{QUERY_STRING} ^author=([0-9]+) [NC]\nRewriteRule .* - [F,L]\n\n# Blocca accesso diretto alla REST API users endpoint per utenti non autenticati\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteCond %{REQUEST_URI} ^\/wp-json\/wp\/v2\/users [NC]\nRewriteCond %{HTTP_COOKIE} !wordpress_logged_in\nRewriteRule .* - [F,L]\n&lt;\/IfModule&gt;\n<\/pre>\n<p>L&#8217;enumerazione degli utenti \u00e8 spesso il primo passo di un attacco brute force: l&#8217;attaccante cerca di scoprire gli username validi visitando <b>\/?author=1<\/b>, <b>\/?author=2<\/b> e cos\u00ec via, oppure interrogando l&#8217;API REST. Bloccando questo vettore, costringi l&#8217;attaccante a indovinare sia l&#8217;username che la password, rendendo l&#8217;attacco esponenzialmente pi\u00f9 difficile.<\/p>\n<h2>6. Configurare Cloudflare e Regole Firewall Avanzate<\/h2>\n<p>L&#8217;ultimo livello della mia strategia di difesa \u00e8 <strong>Cloudflare<\/strong>, che agisce come primo bastione filtrando il traffico malevolo prima ancora che raggiunga il server. Anche il piano gratuito di Cloudflare offre funzionalit\u00e0 di sicurezza potentissime che, configurate correttamente, bloccano la stragrande maggioranza degli attacchi brute force a livello di rete, senza consumare risorse del tuo server. Questo \u00e8 particolarmente importante su hosting condivisi dove le risorse sono limitate e un attacco brute force sostenuto pu\u00f2 far sospendere il tuo account dall&#8217;hosting provider.<\/p>\n<ol>\n<li><strong>Attiva la modalit\u00e0 &#8220;Under Attack&#8221;<\/strong> temporaneamente se sei sotto un attacco massiccio in corso. Questa modalit\u00e0 presenta un challenge JavaScript a tutti i visitatori prima di farli passare, bloccando efficacemente i bot automatizzati. Non lasciarla attiva permanentemente perch\u00e9 rallenta l&#8217;accesso per i visitatori legittimi con un&#8217;attesa di circa 5 secondi.<\/li>\n<li><strong>Crea una regola WAF personalizzata<\/strong> per proteggere wp-login.php. Nella dashboard Cloudflare vai su Security \u2192 WAF \u2192 Custom Rules e crea una regola con queste condizioni: <b>URI Path contains &#8220;\/wp-login.php&#8221;<\/b> AND <b>IP Source Address is not in {il tuo IP}<\/b> \u2192 Action: <b>Managed Challenge<\/b>. Questo presenta un captcha a chiunque non sia tu prima di accedere alla pagina di login.<\/li>\n<li><strong>Crea una regola per bloccare xmlrpc.php<\/strong>: <b>URI Path contains &#8220;\/xmlrpc.php&#8221;<\/b> \u2192 Action: <b>Block<\/b>. Questo blocca tutte le richieste a XML-RPC a livello di Cloudflare, senza nemmeno raggiungere il tuo server.<\/li>\n<li><strong>Configura il Rate Limiting<\/strong>: crea una regola che limita le richieste alla pagina di login. Imposta un limite di <b>5 richieste per minuto<\/b> per IP verso URL che contengono &#8220;wp-login&#8221;. Quando il limite viene superato, Cloudflare blocca l&#8217;IP per un periodo configurabile. Questa funzionalit\u00e0 \u00e8 disponibile anche nel piano gratuito con alcune limitazioni.<\/li>\n<li><strong>Abilita il Bot Fight Mode<\/strong> nelle impostazioni di sicurezza. Questa funzione utilizza l&#8217;intelligenza di rete di Cloudflare per identificare e bloccare automaticamente il traffico proveniente da bot conosciuti come malevoli, compresi quelli usati per attacchi brute force su larga scala.<\/li>\n<li><strong>Configura le IP Access Rules<\/strong> per bloccare permanentemente interi range di IP che attaccano ripetutamente. Vai su Security \u2192 WAF \u2192 Tools e aggiungi blocchi per range di IP notoriamente malevoli. Puoi bloccare per singolo IP, per range CIDR o per intero ASN (Autonomous System Number) se gli attacchi provengono da un provider specifico.<\/li>\n<\/ol>\n<p>Un consiglio importante: dopo aver attivato Cloudflare, assicurati di configurare il tuo server per accettare connessioni <strong>solo dagli IP di Cloudflare<\/strong>. Altrimenti un attaccante che conosce l&#8217;IP reale del tuo server potrebbe bypassare completamente Cloudflare collegandosi direttamente. Su Apache puoi farlo con le direttive <b>Require ip<\/b> usando gli IP range di Cloudflare pubblicati nella loro documentazione ufficiale. Questo \u00e8 un passaggio che molti trascurano e che rende inutile tutta la protezione offerta dal CDN.<\/p>\n<h2>7. Policy sulle Password e Buone Pratiche Generali<\/h2>\n<p>Tutti i meccanismi tecnici del mondo diventano meno efficaci se le <strong>password degli utenti sono deboli<\/strong>. &#8220;admin123&#8221;, &#8220;password&#8221;, il nome del sito seguito dall&#8217;anno corrente: queste sono le prime combinazioni che ogni tool di brute force prova. Ho visto siti compromessi nonostante avessero Wordfence e Cloudflare attivi, semplicemente perch\u00e9 un editor aveva impostato &#8220;Mario2023&#8221; come password. Ecco le policy che impongo su ogni sito che gestisco e le pratiche quotidiane che raccomando ai miei clienti.<\/p>\n<ul>\n<li><strong>Password di almeno 16 caratteri<\/strong> che includano lettere maiuscole, minuscole, numeri e caratteri speciali. Utilizzo il generatore di password integrato di WordPress che crea password robuste automaticamente, e insisto affinch\u00e9 gli utenti non le modifichino con qualcosa di pi\u00f9 semplice da ricordare.<\/li>\n<li><strong>Non utilizzare mai &#8220;admin&#8221; come username<\/strong>. Se il tuo sito ha gi\u00e0 un utente &#8220;admin&#8221;, crea un nuovo account amministratore con un nome utente diverso, trasferisci tutti i contenuti al nuovo account e cancella quello vecchio. L&#8217;username &#8220;admin&#8221; \u00e8 il primo tentativo di ogni attacco brute force e utilizzarlo dimezza il lavoro dell&#8217;attaccante.<\/li>\n<li><strong>Utilizza un password manager<\/strong> come Bitwarden, 1Password o KeePass per generare e conservare password uniche per ogni sito. Io raccomando Bitwarden ai miei clienti perch\u00e9 \u00e8 open source, gratuito per uso personale e sincronizza le password tra tutti i dispositivi in modo sicuro.<\/li>\n<li><strong>Cambia le password regolarmente<\/strong>, almeno ogni 6 mesi per gli account amministratore. Puoi forzare il cambio password con il plugin &#8220;Force Password Change&#8221; che obbliga gli utenti a cambiare la password al successivo login dopo un periodo prestabilito.<\/li>\n<li><strong>Controlla regolarmente gli account utente<\/strong>: vai su Utenti \u2192 Tutti gli utenti e verifica che non ci siano account sconosciuti o con privilegi elevati non giustificati. Un segno di compromissione \u00e8 la comparsa di account amministratore che non hai creato tu. Limita il numero di amministratori al minimo indispensabile.<\/li>\n<li><strong>Mantieni WordPress, temi e plugin aggiornati<\/strong>. Le vulnerabilit\u00e0 note sono un vettore di attacco spesso pi\u00f9 efficace del brute force. Attiva gli aggiornamenti automatici per le minor release di WordPress e i plugin di sicurezza. Per i major update, testa prima su un ambiente di staging se ne hai la possibilit\u00e0.<\/li>\n<li><strong>Implementa un monitoraggio continuo<\/strong> con plugin come <b>WP Activity Log<\/b> che registra ogni azione eseguita nella dashboard, inclusi login, modifiche a post, installazione di plugin e cambio di impostazioni. Questo \u00e8 fondamentale per l&#8217;analisi forense nel caso in cui un account venga compromesso nonostante tutte le protezioni attive.<\/li>\n<\/ul>\n<h2>Domande Frequenti sulla Sicurezza Brute Force WordPress<\/h2>\n<h3>Come capisco se il mio sito WordPress \u00e8 sotto attacco brute force?<\/h3>\n<p>I segnali principali sono: rallentamento improvviso del sito, elevato consumo di CPU sul server, email dal tuo hosting provider che segnala uso eccessivo di risorse e, se hai un plugin come Limit Login Attempts Reloaded, numerose notifiche di blocco IP. Controlla i log di accesso del server cercando richieste POST ripetitive a <b>wp-login.php<\/b> e <b>xmlrpc.php<\/b>. Se vedi centinaia di richieste al minuto verso questi URL, sei sotto attacco attivo. Spesso gli attacchi avvengono nelle ore notturne, quindi potresti accorgertene solo al mattino trovando il sito rallentato o irraggiungibile.<\/p>\n<h3>Limit Login Attempts Reloaded rallenta il sito?<\/h3>\n<p>No, il plugin \u00e8 estremamente leggero. Utilizza le transient di WordPress per memorizzare i tentativi di login e non effettua query al database durante il caricamento normale delle pagine. Il suo impatto sulle performance \u00e8 trascurabile, nell&#8217;ordine di millisecondi, e in realt\u00e0 migliora le performance complessive del sito perch\u00e9 riduce il numero di richieste che WordPress deve processare bloccando i bot prima che raggiungano la fase di autenticazione vera e propria. Il vantaggio in termini di sicurezza supera enormemente qualsiasi micro-impatto sulle performance.<\/p>\n<h3>Posso usare sia Wordfence che Limit Login Attempts Reloaded?<\/h3>\n<p>Tecnicamente s\u00ec, ma io lo sconsiglio. Wordfence include gi\u00e0 una funzionalit\u00e0 di limitazione dei tentativi di login e usare entrambi i plugin per lo stesso scopo crea conflitti e ridondanza inutile. Se scegli Wordfence, disattiva Limit Login Attempts Reloaded e viceversa. Personalmente preferisco Limit Login Attempts per la sua leggerezza e dedico le risorse risparmiate ad altri strumenti. Wordfence \u00e8 un ottimo prodotto completo ma \u00e8 decisamente pi\u00f9 pesante in termini di risorse server e pu\u00f2 rallentare siti su hosting condivisi.<\/p>\n<h3>Il 2FA \u00e8 davvero necessario se ho gi\u00e0 le altre protezioni?<\/h3>\n<p>Assolutamente s\u00ec. Il 2FA \u00e8 l&#8217;unica protezione che funziona anche nel caso peggiore: quando un attaccante ha gi\u00e0 ottenuto username e password corretti, magari attraverso un data breach di un altro servizio dove l&#8217;utente ha usato le stesse credenziali. Nessuna delle altre misure protegge in questo scenario specifico. Il 2FA \u00e8 la tua ultima linea di difesa e per questo lo considero obbligatorio, non opzionale. Costa zero in termini di risorse server e richiede solo 10 secondi in pi\u00f9 ad ogni login per digitare il codice dall&#8217;app.<\/p>\n<h3>Cosa faccio se mi sono bloccato fuori dal sito dopo aver attivato le protezioni?<\/h3>\n<p>Accedi via FTP o SSH al server e rinomina la cartella del plugin che ti sta bloccando in <b>\/wp-content\/plugins\/<\/b>. Ad esempio, rinomina &#8220;limit-login-attempts-reloaded&#8221; in &#8220;limit-login-attempts-reloaded-disabled&#8221;. WordPress disattiver\u00e0 automaticamente il plugin al caricamento successivo. Se il blocco \u00e8 causato dal 2FA, puoi disabilitarlo allo stesso modo. Se il blocco \u00e8 a livello .htaccess, modifica il file via FTP rimuovendo le regole che hai aggiunto. Per questo motivo conserva sempre un backup delle credenziali FTP\/SSH aggiornate e indipendenti dal pannello WordPress.<\/p>\n<h3>Cloudflare gratuito \u00e8 sufficiente per la protezione brute force?<\/h3>\n<p>Per la maggior parte dei siti, il piano gratuito di Cloudflare offre una protezione eccellente contro gli attacchi brute force. Le Custom Rules del WAF, il Bot Fight Mode e la protezione DDoS di base sono incluse gratuitamente. Il piano Pro a 20 dollari al mese aggiunge il WAF gestito con regole specifiche per WordPress e il rate limiting avanzato, che sono utili per siti ad alto traffico o target frequente di attacchi sofisticati. Il piano gratuito combinato con le altre misure descritte in questo articolo \u00e8 pi\u00f9 che sufficiente per la stragrande maggioranza dei siti WordPress.<\/p>\n<h2>La Mia Soluzione Definitiva<\/h2>\n<p>La sicurezza di un sito WordPress contro gli attacchi brute force non si ottiene con un singolo plugin o una singola configurazione, ma con una <strong>strategia multilivello<\/strong> ben implementata. La mia procedura, affinata negli anni, prevede: limitazione dei tentativi di login, URL di login personalizzato e protetto con .htaccess, autenticazione a due fattori obbligatoria per tutti gli amministratori, disabilitazione di XML-RPC, regole firewall Cloudflare e una rigorosa policy sulle password. Ogni livello protegge il sito in modo diverso, e insieme creano una difesa praticamente impenetrabile contro gli attacchi brute force automatizzati e manuali. Implementa tutti i passaggi di questa guida e dormirai sonni molto pi\u00f9 tranquilli. Se hai bisogno di assistenza nell&#8217;implementazione di queste protezioni sul tuo sito o server, oppure se stai subendo un attacco in corso e hai bisogno di un intervento rapido, <a href=\"https:\/\/darioiannascoli.it\/#contatti\"><strong>contattami direttamente per una consulenza personalizzata<\/strong><\/a> e troveremo insieme la soluzione migliore per la tua situazione specifica.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Scopri come proteggere WordPress da attacchi brute force su wp-login.php. Procedura completa con limit login, 2FA, htaccess e best practice.<\/p>\n","protected":false},"author":1,"featured_media":816,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Come Proteggere WordPress da Attacchi Brute Force: Guida Completa","_seopress_titles_desc":"Scopri come mettere in sicurezza WordPress da attacchi brute force. Procedura completa con limit login, 2FA, htaccess e best practice per proteggere wp-login.","_seopress_robots_index":"","footnotes":""},"categories":[2],"tags":[18,10,12,9],"class_list":["post-731","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-errori-wordpress","tag-plugin-wordpress","tag-sicurezza-wordpress","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/731","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/comments?post=731"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/731\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/816"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}