• 0510217318
  • [email protected]
SqueezeMindSqueezeMindSqueezeMindSqueezeMind
  • Home
  • Servizi
  • Collaborazioni b2b
  • Ci hanno scelto
  • Blog
Contattaci Adesso
✕

Home » Blog » Guide tecniche » Proteggere WordPress da attacchi bruteforce con Fail2ban

Proteggere WordPress da attacchi bruteforce con Fail2ban

1 Luglio 2019
Tag
  • Wordpress
fail2ban per Wordpress

Fail2ban è un servizio lato server che consente di monitorare file di log al fine di individuare tentativi di accesso non autorizzati o attacchi bruteforce e bannare gli indirizzi IP degli attackers.

Può essere utilizzato con qualsiasi servizio che fa uso di file di log, come ad esempio SSH, postfix, dovecot, Nginx, Apache ecc. WordPress nativamente non registra informazioni sui login falliti o altri tentativi malevoli su file di log, nonostante PHP lo consenta nativamente mediante l’utilizzo della funzione syslog.

Come spesso accade in queste situazioni, esiste un plugin molto utile ci consentirà di utilizzare Fail2ban con WordPress in pochi minuti. Il plugin è WP Fail2ban.

Questo plugin si occuperà di registrare su syslog non solo i tentativi di login falliti ma anche ad esempio l’enumerazione di utenti sfruttando xmlrpc.php, spam nei commenti ecc.. al fine di consentire di bannare gli indirizzi IP degli attackers utilizzando Fail2ban.

Per facilitare la configurazione, insieme al plugin vengono rilasciati dei filtri Fail2ban da copiare e incollare all’interno di /etc/fail2ban/filters.d. Tutto ciò che rimane da fare è configurare il plugin e creare la jail su /etc/fail2ban/jail.d.

Con questa guida imparerai a proteggere WordPress da attacchi bruteforce e login non autorizzati usando Fail2ban. Se non lo hai mai usato prima ti invitiamo a leggere la nostra guida a Fail2ban.

Indice dei Contenuti

Installazione e configurazione di WP Fail2ban

Come per qualsiasi altro plugin presente nei repository di WordPress basta accedere al backend del sito come amministratore, recarsi nella sezione Plugin, cliccare su Aggiungi nuovo, cercare WP Fail2ban, installarlo e attivarlo.

A questo punto occorre aprire il file wp-config.php di WordPress per inserire le regole di configurazione del plugin. È possibile saltare questo passaggio ed utilizzare l’interfaccia grafica acquistando la versione pro.

Come prima cosa bisogna decidere quali sono gli eventi da monitorare. È possibile visualizzare la lista completa degli eventi supportati da WP Fail2ban in questa pagina. In questa guida andiamo a configurare i seguenti eventi:

  • Login fallito
  • Tentativo di login con username admin
  • Spam nei commenti
  • Enumerazione utenti

Inserire all’interno di wp-config.php le seguenti costanti PHP:

define('WP_FAIL2BAN_BLOCKED_USERS', '^admin$');
define('WP_FAIL2BAN_LOG_SPAM', true);
define('WP_FAIL2BAN_BLOCK_USER_ENUMERATION', true);

I tentativi di login falliti e quelli andati a buon fine vengono già loggati dal plugin, ergo non occorre far nulla per abilitare questo evento.

Di default gli eventi vengono tracciati utilizzando LOG_AUTH di syslog. È possibile utilizzare anche LOG_AUTHPRIV inserendo in wp-config.php la seguente costante:

define('WP_FAIL2BAN_AUTH_LOG', LOG_AUTHPRIV);

Su Ubuntu server syslog inserisce i log tracciati con LOG_AUTH e LOG_AUTHPRIV in /var/log/auth.log.

Salvare wp-config.php e proseguire con la verifica dei log.

Verifica dei log

Prima di configurare le jail su Fail2ban assicuriamoci che gli eventi vengano loggati con successo. Proviamo dunque ad effettuare un login errato e controllare /var/log/auth.log. Se tutto andrà per il verso giusto visualizzeremo un log simile al seguente:

Jun 28 10:27:39 squeezemind-server-1 wordpress(www.squeezemind.it)[6794]: Authentication attempt for unknown user mario from 97.57.139.142

Se proviamo a loggarci con la username admin visualizzeremo un log simile al seguente:

Jun 28 10:54:33 squeezemind-server-1 wordpress(www.squeezemind.it)[7697]: Blocked authentication attempt for admin from 97.57.139.142

A questo punto non rimane che configurare Fail2ban.

Configurazione di Fail2ban

Come già detto il plugin contiene al suo interno tre filtri Fail2ban che si trovano all’interno della directory filter.d. Come prima cosa occorre copiare tali filtri all’interno di /etc/fail2ban/filter.d come utente amministratore del server.

Fatto questo inserire le jail all’interno del file di configurazione presente su /etc/fail2ban/jail.d/ o creare un nuovo file .conf:

[wordpress-hard]
enabled = true
filter = wordpress-hard
logpath = /var/log/auth.log
maxretry = 3
bantime = 24h
findtime = 3m
port = 80,443

In questo caso si è deciso di utilizzare il filtro wordpress-hard.conf che consente di tracciare tutti gli eventi loggati da WP Fail2ban. La regola banna per 24 ore tutti gli indirizzi IP sulle porte 80 e 443 che effettuano un minimo di 3 tentativi non autorizzati nell’arco di 3 minuti.

Salvare e controllare che non vi siano errori di sintassi:

sudo fail2ban-server -t
OK: configuration test is successful

Non rimane che riavviare Fail2ban per rendere operativo il monitoring:

sudo service fail2ban restart

WP Fail2ban e Cloudflare

Se il server è dietro Cloudflare occorre utilizzare le API gratuite per bannare l’indirizzo IP reale dell’attacker utilizzando il firewall Cloudflare.

Come prima cosa estrapolare la Global API Key in fondo alla pagina del profilo Cloudflare:

cloudflare global api key

Fatto questo modificare il file /etc/fail2ban/action.d/cloudflare.conf e settare cftoken e cfuser corrispondenti rispettivamente alla Global API key e all’indirizzo email dell’account Cloudflare:

cftoken = 1234567890abcdefghijklmopqrstuvwxyz99

cfuser = [email protected]

Salvare e modificare la jail appena creata inserendo la direttiva action = cloudflare:

[wordpress-hard]
enabled = true
filter = wordpress-hard
logpath = /var/log/auth.log
maxretry = 3
bantime = 24h
findtime = 3m
port = 80,443
action = cloudflare

A questo punto non rimane che mettere in white list gli indirizzi IP di Cloudflare. Per farlo inserire in wp-config.php la costante WP_FAIL2BAN_PROXIES riportando tutti gli indirizzi IP e le subnet da filtrare separati da virgola:

define('WP_FAIL2BAN_PROXIES','173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/12,172.64.0.0/13,131.0.72.0/22');

Salvare e riavviare Fail2ban. A questo punto non rimane che fare dei test di tentativi di login falliti per far scattare il ban. Se tutto andrà a buon fine, dopo qualche minuto verrà aggiunta una nuova regola sul firewall di Cloudflare:

indirizzo ip bannato su cloudflare

A questo punto se si tenta di accedere di nuovo al sito web, Cloudflare ne impedirà l’accesso restituendo l’errore 1006 Access denied:

errore 1006 cloudflare

Sempre dalla pagina di Cloudflare sarà possibile monitorare tutti gli eventi scatenati dal firewall:

log del firewall di Cloudflare

Monitoraggio

Come per tutte le altre regole è possibile monitorare l’operato di Fail2ban con il seguente comando:

sudo fail2ban-client status wordpress-hard

Status for the jail: wordpress-hard
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

Nel caso in cui si volesse togliere un ban ad un indirizzo IP specifico – ad esempio 97.57.139.142 – utilizzare il seguente comando:

sudo fail2ban-client set wordpress-hard unbanip 97.57.139.142

Se ti è piaciuta questa guida e vuoi essere aggiornato sulla pubblicazione delle nuove, iscriviti gratuitamente alla nostra newsletter! Non riceverai mail email di spam, le odiamo tanto quanto te!

Questo articolo ti è tornato utile? Condividilo su

Cerca sul sito

✕

Iscriviti alla Newsletter

Ricevi i prossimi articoli comodamente via email. Non riceverai mail pubblicità o spam.

La nostra web agency

SqueezeMind è un’agenzia web specializzata nella realizzazione di siti web professionali ed in strategie di web marketing. Il nostro obiettivo è portare le aziende online con strumenti in grado di aumentare i fatturati analiticamente. Per farlo ci serviamo solo dei migliori professionisti in grado di offrire un servizio di eccellente qualità e risultati garantiti.

Entra in contatto con noi

Hai un progetto web e vuoi parlarne con noi? Contattaci ad uno dei seguenti recapiti:
  • 0510217318
  • [email protected]

Categorie del blog

  • Guide Web Marketing
  • Guide SEO
  • Guide E-commerce
  • Guide tecniche
  • Marketing Ristorazione
  • Guide Social Media Marketing

Le nostre certificazioni

google-partner
© SqueezeMind srl - P. IVA 06334160824
capitale sociale € 10.000 i.v. - Tutti i diritti riservati
  • Lavora con noi
  • Mappa del sito
  • Dove siamo
  • Contatti
  • Informativa Privacy
  • Cookie Policy
Contattaci Adesso
Gestisci Consenso
Per fornire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Il consenso a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su alcune caratteristiche e funzioni.
Funzionale Sempre attivo
L'archiviazione tecnica o l'accesso sono strettamente necessari al fine legittimo di consentire l'uso di un servizio specifico esplicitamente richiesto dall'abbonato o dall'utente, o al solo scopo di effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica.
Preferenze
L'archiviazione tecnica o l'accesso sono necessari per lo scopo legittimo di memorizzare le preferenze che non sono richieste dall'abbonato o dall'utente.
Statistiche
L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici. L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici anonimi. Senza un mandato di comparizione, una conformità volontaria da parte del vostro Fornitore di Servizi Internet, o ulteriori registrazioni da parte di terzi, le informazioni memorizzate o recuperate per questo scopo da sole non possono di solito essere utilizzate per l'identificazione.
Marketing
L'archiviazione tecnica o l'accesso sono necessari per creare profili di utenti per inviare pubblicità, o per tracciare l'utente su un sito web o su diversi siti web per scopi di marketing simili.
  • Gestisci opzioni
  • Gestisci servizi
  • Gestisci {vendor_count} fornitori
  • Per saperne di più su questi scopi
Visualizza le preferenze
  • {title}
  • {title}
  • {title}