Bloccare l’accesso al file wp-login.php

È da molti mesi che riscontro tentativi continui di accesso non autorizzato alla dashboard di WordPress: qualcuno/qualcosa tenta senza sosta di indovinare il nome utente dell’amministratore e della sua password. Me ne accorgo dalle segnalazioni che mi arrivano tramite il plugin Limit login attempts.

Il plugin, che pare non essere più mantenuto (e per questo motivo cerco un’alternativa), fa bene il suo lavoro ma, nonostante ciò, non è bello per me ricevere tutte quelle email giornaliere da parte sua. Per cui ho deciso di risolvere alla base il problema.

Negare l’accesso

Poiché l’azione che si tenta è quella di autenticarsi, la via di ingresso è il file wp-login.php: è sufficiente quindi bloccare l’accesso a questo file. Bloccare l’accesso al file significa, però, che neanche noi riusciremo a entrare nella dashboard di WordPress: dovremo quindi permettere l’accesso al nostro indirizzo IP.

Basta aggiungere poche righe al file .htaccess presente nella directory radice del proprio dominio:

<Files ~ "wp-login.php">
	Order Deny,Allow
	Deny from all
	Allow from 12.
</Files>

Con queste righe stiamo dicendo ad Apache di bloccare l’accesso al file wp-login.php a tutti (Deny from all) tranne a coloro il cui indirizzo IP inizia con 12. (Allow from 12.). Chiaramente questo numero è quello che interessa a me, per cui dovete conoscere con quale range di indirizzi generalmente il vostro provider vi fa accedere ad Internet. Se avete un indirizzo IP statico, potete aggiungerlo per intero:

Allow from 123.123.123.123

A coloro il cui indirizzo IP non inizia con 12. o non è quello esatto che avete definito, Apache restituirà un errore 403 “Accesso negato”, che eventualmente potete anche personalizzare, se il vostro hosting provider ve lo permette.

Una volta messe in opera quelle righe, il log del server mostrerà qualcosa del genere:

[Sat Jan 31 02:10:30 2015] [error] [client 5.196.253.201] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/ 
[Sat Jan 31 02:10:31 2015] [error] [client 5.196.253.201] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/wp-login.php?action=register 
[Sat Jan 31 02:32:18 2015] [error] [client 192.240.201.20] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/ 
[Sat Jan 31 02:32:18 2015] [error] [client 192.240.201.20] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/wp-login.php?action=register 
[Sat Jan 31 03:02:45 2015] [error] [client 104.143.23.249] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/ 
[Sat Jan 31 03:02:46 2015] [error] [client 104.143.23.249] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/wp-login.php?action=register 
[Sat Jan 31 03:28:20 2015] [error] [client 173.232.118.182] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/ 
[Sat Jan 31 03:28:21 2015] [error] [client 173.232.118.182] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/wp-login.php?action=register 
[Sat Jan 31 03:29:33 2015] [error] [client 198.23.134.163] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/ 
[Sat Jan 31 03:29:33 2015] [error] [client 198.23.134.163] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/wp-login.php?action=register 
[Sat Jan 31 03:33:08 2015] [error] [client 37.59.75.59] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/ 
[Sat Jan 31 03:33:08 2015] [error] [client 37.59.75.59] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/wp-login.php?action=register 
[Sat Jan 31 03:36:43 2015] [error] [client 88.251.177.222] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php 
[Sat Jan 31 03:39:33 2015] [error] [client 151.80.69.186] client denied by server configuration: /path/to/domain.tld/folder/wp-login.php, referer: http://www.domain.tld/

con la conferma che Apache sta bloccando gli accessi (client denied by server configuration). E le email di Limit login attempts sono terminate.

I motori di ricerca

Per evitare errori di scansione dei motori di ricerca ho inserito nel file robots.txt due righe che evitino la scansione delle pagine legate all’autenticazione, ad esempio:

User-agent: *
Disallow: /wp-login.php
Disallow: /wp-login.php?action=register

Chiaramente quanto sopra forse non è la soluzione migliore al problema, ma devo dire che sta funzionando bene per me ed è di facilissima implementazione.

Autore: Aldo Latino

Aldo Latino usa con entusiasmo Linux nella distribuzione Ubuntu, è un appassionato di WordPress e si diletta a fare il blogger. Ha anche una lista dei desideri. Per altre informazioni visita la sua .

4 pensieri riguardo “Bloccare l’accesso al file wp-login.php”

    1. Ciao Emanuele, .htpasswd viene utilizzato, congiuntamente a .htaccess, per determinare quali utenti possano accedere a determinate directory. Nel caso di cui parlo nel post, invece, nego l’accesso a uno script PHP.

      1. Il difetto/limite della tua soluzione è che appena sei fuori casa non puoi più accedere al pannello di amministrazione di WordPress perché il tuo IP è cambiato. La soluzione in tal caso è accedere via FTP e aggiornare adeguatamente il file .htaccess
        Con .htpasswd puoi richiedere la password di accesso ad una directory o a un determinato file (usando FileMatch nell’.htaccess).
        In questo modo tra l’altro puoi anche bloccare l’accesso a tutta la directory wp-admin irrobustendo la sicurezza di WordPress.
        Ciao,
        Emanuele

        1. È che non ho esigenza di accedere al pannello da luoghi diversi dove ho un IP tipo 12.x.x.x. È chiaro che il post è molto verticalizzato su di me: non consentirebbe, ad esempio, ad altri utenti di accedere alla dashboard.

          I limiti di questa soluzione sono molto grossi, ma per le mie esigenze è ottima. :-)

I commenti sono chiusi