PROBLEMA:
Impostare delle regole per il blocco degli ip che effettuano chiamate anomale ad Apache analizzando il file error.log ed impostando il filtro con le espressioni regolari
SOLUZIONE:
Ecco i passaggi che dovresti seguire:
Assicurati che fail2ban sia installato e in esecuzione sul tuo sistema.
Puoi controllare lo stato di fail2ban utilizzando il comando
sudo systemctl status fail2ban.
Crea un nuovo file di configurazione per Apache nella directory di fail2ban. Utilizzeremo il file di configurazione di default come modello:
bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Aggiungi una nuova sezione [apache-errors] nel file jail.local:
makefile
[apache-errors]
enabled = true
port = http,https
filter = apache-errors
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600
enabled: abilita la regola per il blocco degli indirizzi IP.
port: specifica le porte su cui analizzare i log di Apache.
filter: specifica il nome del filtro che verrà utilizzato per analizzare i log di Apache.
logpath: specifica il percorso del file di log di Apache.
maxretry: specifica il numero massimo di tentativi consentiti prima di bloccare l’indirizzo IP.
bantime: specifica il tempo di blocco dell’indirizzo IP in secondi.
Crea un nuovo file di filtro per Apache nella directory filter.d di fail2ban. Chiameremo questo filtro apache-errors.conf:
bash
sudo nano /etc/fail2ban/filter.d/apache-errors.conf
Aggiungi le seguenti linee al file apache-errors.conf per analizzare il file di log di Apache e identificare gli indirizzi IP che effettuano chiamate anomale:
[Definition]
failregex = [[]client <HOST>[]] (File does not exist|script not found or unable to stat): /\S*(\.php|\.asp|\.exe|\.pl|\.cgi|\.\.)/
Salva e chiudi il file apache-errors.conf.
Riavvia fail2ban per applicare le nuove configurazioni:
sudo systemctl restart fail2ban
Con queste configurazioni, fail2ban analizzerà il file di log di Apache e cercherà gli indirizzi IP che effettuano chiamate anomale. Se un indirizzo IP tenta di accedere a un file che non esiste o a uno script che non può essere eseguito, fail2ban bloccherà automaticamente l’indirizzo IP per un periodo di tempo specificato nella configurazione.
Se si ha un problema di postflood quindi il file di log è access.log e sono chiamate di tipo POST o GET
Se il problema è di postflood e le chiamate vengono effettuate tramite metodo POST o GET, si puo’ configurare Fail2ban per filtrare queste chiamate dal file di log access.log.
Seguire questi passaggi:
- Apri il file di configurazione di Fail2ban (/etc/fail2ban/jail.conf o /etc/fail2ban/jail.local) con un editor di testo come root.
- Trova la sezione [apache] o [apache-auth] e modificala come segue:
makefile
Copy code
[apache]
enabled = true
port = http,https
filter = apache-postflood
logpath = /var/log/apache2/access.log
maxretry = 100
findtime = 10
bantime = 600
Crea un nuovo file di filtro chiamato apache-postflood.conf nella directory /etc/fail2ban/filter.d/ con il seguente contenuto:
makefile
Copy code
[Definition]
failregex = <HOST> -.*”(GET|POST).*HTTP.*” 429
ignoreregex =
Questo filtro rileva tutte le chiamate HTTP POST e GET che ricevono un codice di stato HTTP 429 (troppi richieste).
Riavvia il servizio di Fail2ban per applicare le modifiche:
Copy code
sudo service fail2ban restart
Dopo aver eseguito questi passaggi, Fail2ban filtrerà tutte le chiamate POST e GET che ricevono il codice di stato HTTP 429 dal file di log access.log e bannare gli indirizzi IP che superano il limite di tentativi di connessione (impostato nel parametro maxretry). Il tempo di blocco dell’indirizzo IP è impostato nel parametro bantime.