Sempre più spesso mi ritrovo con una miriade di log che riguardano attacchi di tipo brute force e/o DDoS sul server web. Infastidito da questa cosa, mi sono ricordato di un modulo per Apache la cui funzione è quella di abilitare un controllo sulle richieste verso l’intero sito e/o la singola pagina in un arco di tempo definibile;
Quando le richieste superano un determinato margine, l’ip in questione viene inserito in blacklist, e da quel momento il server web restituisce una pagina di errore di tipo 403 “Non permesso” per un lasso di tempo, anch’esso definibile quindi flessibile. Diciamo che si tratta di una sorta di limit-burst (riferito ad iptables) per il nostro server web Apache. Si tratta del modulo mod_evasive.
L’installazione prevede pochi semplici passi:
NB: la procedura è riferita ad Apache 2.0. Per ulteriori versioni di Apache e implementazione di tale modulo basta consultare il README.
~$ wget mod_evasive_1.10.1.tar.gz ~$ tar zxvf mod_evasive_1.10.1.tar.gz ~$ cd mod_evasive ~$ su - ~# /usr/sbin/apxs -cia mod_evasive20.c
Installato il modulo mod_evasive si passa alla configurazione. Usate il vostro editor preferito per configurare il file generico httpd.conf. Il percorso della directory apache chiaramente cambia da distro a distro.
~# vi /etc/apache2/httpd.conf
<IfModule Mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 </IfModule>
Dove i parametri sono:
-
DOSHashTableSize: dimensione della tabella di hash, più è grande più memoria è richiesta, ma più veloce saranno i lookups.
-
DOSPageCount: numero di richieste, per la stessa pagina, massime concesse prima che l'indirizzo finisca in blacklist.
-
DOSSiteCount: numero di richieste, per l'intero sito, massime concesse prima che l'indirizzo finisca in blacklist.
-
DOSPageInterval: l'arco di tempo, in secondi, entro il quale devono rientrare le richieste massime definite nel pageconut.
-
DOSSiteInterval: l'arco di tempo, in secondi, entro il quale devono rientrare le richieste massime definite nel sitecount.
-
DOSBlockingPeriod: l'arco di tempo, in secondi, durante il quale verrà restituito un errore di tipo 403 all'ip blacklistato, il timer verrà resettato qualora durante il conteggio l'ip faccia un altra hit, ricevendo quindi, l'errore per più tempo ancora.
NB: I parametri sono soggettivi in base alle esigenze.
Modificato e salvato il conf non resta che riavviare il servizio:
~# /etc/rc.d/rc.httpd restart
NB: il percorso di riavvio per i demoni di servizzi in sistemi GNU/linux cambia come detto precedentemente da distro a distro. Nello specifico è riferito alla directory /etc/rc.d/ di slackware.
Link ufficiale del modulo: mod_evasive **