Un sito WordPress su internet riceve tentativi di accesso e sonde tutti i giorni. Su web1 le difese stanno prima di WordPress, nel server web e nel firewall.
nginx, per tutti i siti
- Pagina di accesso: al massimo 10 richieste al minuto per indirizzo; oltre, risposta 429.
- Elenco degli utenti (
?author=N, l’APIwp/v2/users): solo per chi è collegato a WordPress. Serve a non regalare i nomi utente a chi prova le password. Se un’app ne ha bisogno, si apre sito per sito. - xmlrpc.php chiuso;
wp-config.php, file nascosti, backup e dump (.sql,.bak,.log…) non si scaricano. - Nessun PHP eseguibile in
wp-contentfuori da plugin e temi: upload, cache, lingue, cartelle scrivibili. I dati del firewall di Wordfence (wflogs) non si leggono nemmeno. - Pagine di installazione di WordPress chiuse.
fail2ban
| Regola | Blocca chi… |
|---|---|
| SSH | sbaglia l’accesso SSH 5 volte in 10 minuti. |
| Anteprima | sbaglia la password di anteprima 5 volte in 10 minuti. |
| Accesso a WordPress | sbaglia 5 accessi o supera il limite di nginx. |
| Sonde | fa 3 sonde: SQL injection, file di configurazione, percorsi fuori dal sito. |
| Recidivi | viene bloccato 5 volte in un giorno: resta fuori una settimana, da tutto il server. |
Il blocco normale dura un’ora, sulle porte della regola (SSH o web). Attenzione alle chiavi: un client che prova troppe chiavi SSH sbagliate prima di quella giusta fa bloccare il proprio indirizzo.
I siti non chiamano fuori
Ogni sito ha un utente Linux proprio, e il firewall permette a quegli utenti solo DNS, web (80, 443) e invio di posta (587), e non li lascia interrogare il servizio interno del fornitore cloud con i dati del server (i metadati). Un malware che prova ad aprire una connessione verso il suo server di comando viene fermato, e l’allarme «connessioni in uscita bloccate» dice quale sito ci ha provato.
Leggere i tentativi
La pagina Sicurezza conta, per ogni sito, i tentativi delle ultime 24 ore dal log di nginx: accessi falliti e oltre il limite, sonde, elenco utenti respinto, richieste fermate dall’anteprima, con gli indirizzi più attivi. Numeri alti non sono per forza un problema: vuol dire che le difese stanno lavorando. Il segnale vero è un allarme dei controlli.
Più sotto, nell’Andamento, gli stessi tentativi giorno per giorno per tutti i siti, gli indirizzi bloccati da fail2ban e gli allarmi di ogni mattina; nella scheda di un sito, i suoi tentativi per giorno. Un picco dice quando è cominciato un attacco (vedi I grafici: come leggerli).
Da shell
site-scan.py attacchi esempio.it
fail2ban-client status wordpress-login