Manuel Roccon

ICT & Cyber Security Specialist

Apache – bloccare continue richieste 403 con Fail2Ban (usando i log di apache)

L’errore 403 viene generato dai webserver quando gli accessi ai servizi Web falliscono o quando i visitatori tentano di accedere ai file che non dovrebbero. Tuttavia, alcuni visitatori e per la maggior parte i bot non ricevono sempre il messaggio e continuano a inviare continue richieste. Questo può essere parte di un tentativo di accesso a forza bruta o di altri tentativi di accesso allo script al sistema.

Anche se generare la risposta 403 dal webserver dovrebbe essere sufficiente, a volte è necessario applicare strumenti più potenti per impedire agli attori malintenzionati di utilizzare inutilmente le risorse del nostro web server.

Fail2Ban è uno strumento che legge i log del server e blocca le continue richieste al server, usando le regole del firewall una volta identificato il comportamento non corretto.

Fail2ban fornisce alcune regole che bloccano queste continue richieste, ma in questo caso per bloccare le richieste fatte a risorse inesistenti è necessario creare una regola personalizzata.

Per fare ciò iniziamo a creare un nuovo filtro in questa directory: /etc/fail2ban/filter.d/apache-antibot.conf con il contenuto sottostante

[Definition]
badurls = myadmin|phpadmin|sql|webdb|wp-login\.php|soapCaller|manager|setup\.php|pma|status
 
failregex = ^(?i)<HOST> .* "(GET|POST|HEAD) .*(%(badurls)s).* HTTP.*" (403|404) .*$
            ^(?i)<HOST> .* "(GET|POST|HEAD) / HTTP.*" (403|404) .*$
 
ignoreregex = 

Questa regola bloccherà sia tutte le richieste 403 sia le richieste fatte a specifici url (badurls).

A questo punto occorrerrà creare un file di configurazione con le direttive per il filtro appena creato. Anche se le regole di fail2ban sono situate nel file jail.conf (o jail.local) suggerisco di utilizzare la directory jail.d per inserire le vostre regole personalizzate, in modo da separarle da quelle di default e per una migliore gestione.

Creare quindi un file alla seguente directory con questo contenuto /etc/fail2ban/jail.d/apache-antibot.conf.

[apache-antibot]
enabled = true
filter = apache-antibot
port = http,https
logpath = /var/log/httpd/*error_log
          /var/log/httpd/*access_log
# try to target only automated bots
maxretry = 10
# find also slow bots that try to hide in the log files
findtime = 432000
# keep em long away if found
bantime  = 864000

Questa configurazione abiliterà il nostro filtro, andando ad analizzare tutti i log di apache contenenti nel nome del file “error_log” e “access_log” all’interno della directory /var/log/httpd.

Se creerete dei file distinti per vari virtual host presenti nel server dei vostri siti che nel nome log contiene questi pattern, fail2ban analizzerà anche questi. La configurazione individuerà sia gli accessi eseguiti in breve che in lungo periodo.

Per attivare la configurazione fermare e riavviare fail2ban

fail2ban-client stop
fail2ban-client start
fail2ban.server         [31584]: INFO    Starting Fail2ban v0.9.7
fail2ban.server         [31584]: INFO    Starting in daemon mode

Ora verifichiamo i filtri attivati e vedremo il nostro apache-antibot attivato

fail2ban-client status
Status
|- Number of jail:	14
`- Jail list:	apache-antibot, apache-auth, apache-badbots, apache-botsearch, apache-fakegooglebot, apache-modsecurity, apache-nohome, apache-noscript, apache-overflows, apache-shellshock, php-url-fopen, selinux-ssh, sshd, sshd-ddos

eseguendo delle richieste 403 ora fail2ban andrà a bloccare il nostro ip secondo le regole impostate rendendo impossibili qualunque richieste http.

La nostra regola ha funzionato perfettamente. Dopo 10 richieste consecutive, come impostato nel file di configurazione IP verrà bannato e tutte le connessioni saranno rifiutate.

Per sbloccare un ip particolare utilizzare questo comando:

fail2ban-client set apache-antibot unbanip xxx.xxx.xxx.xxx

Se avete installato il modulo di apache mod_security è possibile ottenere lo stesso risultato configurando una regola che monitori questi log. Oltre a bloccare gli accessi vietati, andrà a bloccare ip che andranno anche a infrangere le sue regole.

Purtroppo la versione installata di fail2ban tramite repository non funziona con il modulo versione 2. Per cui è necessario creare una nuova regola aggiornata. In questo articolo una piccola guida per eseguire questo aggiornamento.

NOTA:

Se per qualunque ragione dovete cambiare la porta di default http (80) o https (443) è necessario modificare anche la porta associata nel file di configurazione di fail2ban, porta che verrà bloccata qualora fail2ban attivasse una regola di blocco per un determinato IP. Questo vale anche per tutte le porte (es. ssh, mysql ecc.) incluse nelle vostre regole.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *