Oggi parliamo di Apache mod_evasive ovvero di un modulo di Apache webserver (httpd) utile a proteggere i nostri siti da attacchi DoS e DDoS. Abbiamo già affrontato il tema mod_evasive in un precedente articolo in cui spiegavo come proteggere un sito web senza spendere soldi.
In questo nuovo post invece, parleremo dettagliatamente di come installare e configurare il modulo di Apache mod_evasive per Apache, su diversi sistemi operativi Linux , tra cui Debian, Ubuntu e Cent/OS.
Indice dei contenuti
- Cos’è il mod_evasive per Apache
- Come funziona il mod_evasive
- Installare il mod_evasive per Apache
- Configurare mod_evasive per Apache httpd server
- Come testare mod_evasive
- Impostazioni e parametri di configurazione
- Contributo Video
- Conclusioni
Let’s go!
Cos’è il mod_evasive per Apache
Il modulo mod_evasive è un modulo del WebServer Apache che aiuta il nostro server a rimanere in esecuzione in caso di attacchi di tipo Denial of Service (DoS), Distributed Denial of Service (DDoS) o tentativo di forza bruta. Questa tipologia di attacchi ha lo scopo di sopraffare la sicurezza della tua macchina utilizzando diversi computer per effettuare richieste ripetute contro il nostro server. Ciò fa sì che il server esaurisca la potenza di elaborazione, la memoria o la larghezza di banda e smetta di rispondere.
Questa guida ti guiderà attraverso la configurazione e l’installazione di mod_evasive per proteggere il tuo webserver Apache da attacchi DoS e DDoS.
Come funziona il Apache mod_evasive
L’utility Apache mod_evasive funziona monitorando le richieste in ingresso verso il nostro server, controllando le attività sospette da un determinato IP, come:
- Le richieste per la stessa pagina in un determinato arco temporale.
- Le richieste per pagine diverse in un determinato arco temporale.
- Richieste effettuate mentre l’IP è in blacklist.
Il modulo, nel caso dovesse verificarsi una delle casistiche sopra elencate invia un errore 403 al client. Quindi, il mod_evasive ti aiuta a difenderti attraverso il rilevamento e la gestione della chiamate in ingresso.
Installare il mod_evasive per Apache
In questa guida vedremo come installare mod_evasive su diversi sistemi operativi linux come Debian, Ubuntu, CentOS e Redhat Linux. Vedremo inoltre quali sono i prerequisiti da rispettare affinché tutto vada al posto giusto.
Prerequisiti
Affinchè si possa procedere con l’installazione e la configurazione, è necessario rispettare alcuni prerequisiti che vi riporto di seguito:
- Un Webserver Apache installato, configurato e funzionante
- Un utente che abbia privilegi di root e un utente applicativo proprietario dei files di configurazione di Apache
- Un mail server funzionante per inviare email di alert (Opzionale)
Installare mod_evasive su Debian e Ubuntu
Prima di procedere con l’istallazione è importante eseguire un aggiornamento dei pacchetti di sistema:
sudo apt update
ShellScriptQuindi, procediamo a installare le helper utility di apache:
sudo apt install apache2-utils
ShellScriptProcediamo quindi all’installazione vera e propria tramite il comando:
sudo apt install libapache2-mod-evasive
ShellScriptLa cui conseguenza avrà un output simile a:
Ora il nostro mod_evasive è pronto all’uso, non ci resta che abilitarlo con i comandi:
# Andiamo nel path dove ci sono tutti i moduli
cd /etc/apache2/mods-available
# Abilitatiamo evasive.load tramite:
/usr/sbin/a2enmod evasive.load
ShellScriptInstallare mod_evasive su CentOS / RedHat Linux
Per installare Evasive su Cents / RedHat Linux è necessario prima di tutto aggiungere il repository che contiene il modulo che ci interessa. Pertanto lanciamo il comando:
sudo yum install epel-release
ShellScriptAl termine del quale provvediamo all’installazione vera e propria tramite:
sudo yum install mod_evasive
ShellScriptL’installazione è completata e possiamo procedere alla configurazione.
Configurare mod_evasive per Apache httpd server
Come la maggior parte dei pacchetti software Linux, mod_evasive è controllato da un file di configurazione. Vediamo dove trovare il file di configurazione e quali modifiche apportare per attivare la protezione. Editiamo il file di configurazione con il vi
Debian / Ubuntu:
sudo vi /etc/apache2/mods-enabled/evasive.conf
ShellScriptRedHat / CentOS:
sudo vi /etc/httpd/conf.d/mod_evasive.conf
ShellScriptVediamo, per tutte le versioni Linux elencate, come si presenta i file di configurazione:
<IfModule mod_evasive20.c>
#DOSHashTableSize 3097
#DOSPageCount 2
#DOSSiteCount 50
#DOSPageInterval 1
#DOSSiteInterval 1
#DOSBlockingPeriod 10
#DOSEmailNotify [email protected]
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
#DOSLogDir "/var/log/mod_evasive"
</IfModule>
ShellScriptTogliamo i commenti (#) dalla riga 2 alla riga 7 in modo che il file diventi così:
Esempio di file di configurazione del mod_evasive
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
#DOSEmailNotify [email protected]
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
#DOSLogDir "/var/log/mod_evasive"
</IfModule>
ShellScriptPer quanto riguarda le righe ancora commentate, affronteremo il tema più avanti nell’articolo.
Per quanto riguarda l’attivazione vera e propria non ci resta che riavviare i servizi Apache httpd. Iniziamo con Debian / Ubuntu:
Debian / Ubuntu:
sudo systemctl reload apache2
ShellScriptAllo stesso modo, per CentOS / RedHat:
RedHat / CentOS:
sudo systemctl restart httpd.service
ShellScriptPer quanto riguarda la configurazione generale, possiamo dire di aver concluso. Non ci resta che eseguire i primi test per verificare che il tutto stia funzionando. Da un punto di vista di tuning invece abbiamo ancora qualcosina da sistemare.
Come testare mod_evasive
Il fatto che lo abbiamo installato, non significa che il modulo di protezione stia effettivamente funzionando. Infatti, per avere certezza che tutto sia configurato a dovere, bisogno essere sicuri che i pacchetti malevoli vengano bloccati. A tal riguardo, lo sviluppatore del software ci mette a disposizione uno script per il test del mod_evasive.
Il file di test potete scaricarlo dal link precedente, ma dovreste già averlo sulla vostra macchina. Per verificarlo baciate il seguente comando:
ls /usr/share/doc/libapache2-mod-evasive/examples/test.pl
ShellScriptIl file ha il seguente contenuto configurabile:
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness
use IO::Socket;
use strict;
for(0..100) {
my($response);
my($SOCKET) = new IO::Socket::INET( Proto => "tcp", PeerAddr=> "127.0.0.1:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}
PerlAlla riga 4 inizia il ciclo. Al posto di 100 potete scegliere quante chiamate eseguire. Mentre alla riga 9, nella sezione PeerAddr potete inserire l’indirizzo IP e la porta su cui eseguire il test. Il test può essere eseguito sia localmente che da remoto.
Lanciando lo script, così com’è, quindi localmente, se la configurazione finora apportata è corretta, dovreste ricevere un output del tipo:
apache@webserver:-$ perl /usr/share/doc/libapachez-mod-evasive/examples/test.pl
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
ShellScriptImpostazioni e parametri di configurazione
Come abbiamo visto nell’esempio del file di configurazione, ci sono diversi parametri che possiamo impostare per fare il tuning della nostra protezione.
Vediamo quindi nel dettaglio cosa rappresentano quei parametri:
- DOSBlockingPeriod è il periodo di tempo per il quale un IP verrà bloccato nel caso vengano superate le soglie sotto elencate. La configurazione prevede come valore un numero intero che rappresenta i secondi di blocco. Es. DOSBlockingPeriod 3600. Quando un IP supera le soglie verrà inserito in blacklist e riceverà un errore http 403 (access denied) per la durata dei secondi impostati in questa metrica.
- DOSPageCount invece è il numero di volte che un IP può visitare una singola pagina in un determinato arco temporale (DOSPageInterval). Anche questo parametro si configura con un numero intero (es. 200, che rappresenta il numero di volte che una pagina può essere visitata).
- DOSPageInterval E’ l’intervallo di tempo entro il quale viene contato il numero di visite a una singola pagina (DOSPageCount) da parte di un singolo IP. Anche qui il parametro è un intero ed è espresso in secondi
- DOSSiteCount è il numero di pagine dell’intero sito che un IP può visitare in un determinato arco temporale (DOSSiteInterval). Il parametro si configura con un numero intero (es. 200 pagine del sito).
- DOSSiteInterval E’ l’intervallo di tempo entro il quale vengono contate le pagine del sito (DOSSiteCount) che un IP può visitare. Anche qui il parametro è un intero ed è espresso in secondi
Tornando alle configurazioni, ne esistono anche altre opzionali:
DOSEmailNotify [email protected]
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/var/lock/mod_evasive"
DOSWhitelist="10.60.0.7,10.65.0.10"
ShellScriptPer approfondirle, vi consiglio di leggere la documentazione ufficiale.
Whitelist IP addresses
Particolare attenzione va però data alla riga 4, ovvero a DOSWhitelist che rappresenta la lista degli IP che NON verranno MAI bloccati dal mod_evasive. La Whitelist può essere configurata su una sola riga, oppure su più righe. Come per esempio:
DOSWhitelist=10.60.0.7
DOSWhitelist=10.60.0.8
DOSWhitelist=10.60.1.*
DOSWhitelist=10.50.*.*
ShellScriptCome potete notare, è anche possibile impostare delle wildcard (*) che prendono in considerazione le intere subnet.
Contributo video
Conclusioni su Apache mod_evasive – installazione e configurazione
Spero di essere riuscito a coprire l’argomento in modo esaustivo. il mod_evasive per Apache è uno strumento molto semplice ma abbastanza potente. Ovviamente questo non bloccherà il traffico prima che arrivi sui vostri server; per fare questo sarebbe meglio utilizzare un WAF. Ma calcolando che è uno strumento completamente gratuito, direi che è meglio di nulla :).
Se avete dei dubbi o se volete condividere il vostro punto di vista, scrivete nei commenti e cercherò di rispondere al più presto.
Detto ciò , vi auguro una buona lettura.
Se volete restare in contatto, vi lascio anche il link della mia newsletter di LinkedIn.
Principal Web Solutions Architect – Technology & Architecture Manager @ Accenture – Google Cloud Certified – Professional Cloud Architect
Parla di #web, #cloud, #websecurity, #webperformance e #webarchitecture