Se il tuo server riceve continuamente richieste a percorsi come /wp-admin, /phpmyadmin, /.env o /xmlrpc.php
— anche se non usi WordPress — significa che bot e scanner automatici scandagliano il tuo sito alla ricerca
di vulnerabilità. Con fail2ban puoi identificare questi IP e bannarli automaticamente.
PREREQUISITI
------------
- Server Linux con nginx
- fail2ban installato (apt install fail2ban)
- Accesso root o sudo
- Log di accesso nginx attivi
PASSO 1 — Creare il file filtro
--------------------------------
Il filtro definisce il pattern delle richieste sospette che fail2ban deve riconoscere nei log.
Apri l'editor:
nano /etc/fail2ban/filter.d/nginx-sensitive-files.conf
Incolla questo contenuto:
[Definition]
failregex = ^<HOST> .+ "(GET|POST|HEAD) /(wp-admin|wp-content|wp-includes|wp-login\.php|xmlrpc\.php|phpmyadmin|\.env|\.git)[^"]*" \d+ \d+
ignoreregex =
datepattern = \[%%d/%%b/%%Y:%%H:%%M:%%S %%z\]
Spiegazione:
- ^<HOST> → placeholder fail2ban per l'indirizzo IP del client
- .+ → copre la parte centrale del log (utente, data, ecc.)
- (GET|POST|HEAD) → metodi HTTP da intercettare
- /(wp-admin|...) → elenco dei percorsi sensibili da bloccare
- [^"]* → qualsiasi carattere dopo il percorso fino alla fine della stringa URL
- \d+ \d+ → codice di risposta HTTP e dimensione in byte
- datepattern → formato data usato da nginx nei log (es: [28/Mar/2026:10:00:00 +0000])
Salva con CTRL+O → Invio → CTRL+X.
PASSO 2 — Testare il filtro sui log esistenti
----------------------------------------------
Prima di attivare la jail, verifica che il filtro riconosca correttamente le richieste nei tuoi log:
fail2ban-regex /var/www/tuosito/data/logs/access.log /etc/fail2ban/filter.d/nginx-sensitive-files.conf
Output atteso (esempio):
Failregex: 1466 total
| 1) [1466] ^<HOST> .+ "(GET|POST|HEAD) /(wp-admin|...)...
Lines: 9165 lines, 0 ignored, 1466 matched, 7699 missed
Se il numero di match è > 0, il filtro funziona. Se è 0, controlla che il percorso del log sia corretto
e che il formato della data corrisponda a quello usato da nginx.
PASSO 3 — Configurare la jail
------------------------------
Apri o crea il file jail.local:
nano /etc/fail2ban/jail.local
Aggiungi in fondo:
[nginx-sensitive-files]
enabled = true
port = http,https
filter = nginx-sensitive-files
logpath = /var/www/tuosito/data/logs/access.log
maxretry = 3
findtime = 60
bantime = 86400
Spiegazione:
- enabled → attiva la jail
- port → porte monitorate (80 e 443)
- filter → nome del file filtro creato nel passo 1 (senza .conf)
- logpath → percorso del log nginx da monitorare
- maxretry → numero di tentativi prima del ban (qui: 3)
- findtime → finestra di tempo in secondi entro cui contare i tentativi (qui: 60 secondi)
- bantime → durata del ban in secondi (qui: 86400 = 24 ore)
Salva con CTRL+O → Invio → CTRL+X.
PASSO 4 — Ricaricare fail2ban
------------------------------
Applica la nuova configurazione:
fail2ban-client reload
PASSO 5 — Verificare che la jail sia attiva
--------------------------------------------
Controlla l'elenco delle jail attive:
fail2ban-client status
Output atteso:
Jail list: nginx-404, nginx-sensitive-files, sshd, ...
Poi controlla lo stato specifico della jail:
fail2ban-client status nginx-sensitive-files
Output atteso (a jail appena avviata):
Status for the jail: nginx-sensitive-files
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/www/tuosito/data/logs/access.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
I contatori partiranno da 0 perché fail2ban monitora i log in tempo reale da quando è stato avviato,
non processa lo storico. Man mano che arrivano nuove richieste sospette, gli IP verranno bannati
automaticamente.
COMANDI UTILI
-------------
Vedere gli IP attualmente bannati:
fail2ban-client status nginx-sensitive-files
Sbannare manualmente un IP:
fail2ban-client set nginx-sensitive-files unbanip 1.2.3.4
Testare il filtro con output completo dei miss:
fail2ban-regex access.log /etc/fail2ban/filter.d/nginx-sensitive-files.conf --print-all-missed
Vedere il log di fail2ban in tempo reale:
tail -f /var/log/fail2ban.log
Con questa configurazione, il tuo server blocca automaticamente per 24 ore qualsiasi IP che in 60 secondi
invia 3 o più richieste a percorsi sensibili. È una misura semplice ma efficace contro scanner automatici,
bot WordPress e tentativi di ricognizione.
Puoi estendere il filtro aggiungendo altri percorsi nell'elenco del failregex, oppure abbassare bantime
a valori più alti per chi ti prende di mira ripetutamente.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.