Cos’è DosEvasive
DosEvasive è un modulo per Apache sviluppato da Jonathan Zdziarski (alias Nuclear Elephant) che permette di eliminare o quanto meno limitare i potenziali danni da DoS su Apache. In sostanza il modulo tiene una tabella di ip che hanno effettuato delle GET nel breve periodo e, se il numero di queste chiamate supera la soglia da noi impostata, al posto della pagina richiesta viene servito un 403 (Forbidden).
Installazione su OpenBSD
DosEvasive non è un modulo nativo di Apache, per cui va compilato a mano tramite apxs. E’ possibile installarlo sia su Apache 1.3 che su Apache 2.x, ma dato che noi in produzione usiamo solo quest’ultimo, la procedura che segue è valida solo per la versione 2.x.
Si suppone che si stia lavorando su una macchina OpenBSD 4.5 AMD64 (quindi fate attenzione ai vari path se siete su una versione differente).
Configuriamo PKG_PATH con un mirror di OpenBSD:
[root@openbsd45 root]# export PKG_PATH=ftp://mirror.switch.ch/pub/OpenBSD/4.5/packages/amd64/
Se non è già installato, installiamo Apache 2 e wget, che ci servirà in seguito:
[root@openbsd45 root]# pkg_add apache-httpd-2.2.9
[root@openbsd45 root]# pkg_add wget
L’installazione del modulo prevede la sua compilazione, quindi se la macchina su cui state lavorando non disponde dei compilatori, potete installarli recuperandoli dal sito di OpenBSD e procedendo come segue:
[root@openbsd45 root]# wget ftp://mirror.switch.ch/pub/OpenBSD/4.5/amd64/comp45.tgz
[root@openbsd45 root]# mv comp45.tgz /
[root@openbsd45 root]# cd /
[root@openbsd45 ]# tar -zxpf comp45.tgz
A questo punto, scaricate e spacchettate l’ultima release del modulo direttamente dal sito di Jonatan:
[root@openbsd45 root]# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz[root@openbsd45 root]# tar -zxf mod_evasive_1.10.1.tar.gz
Procedete quindi con la sua compilazione:
[root@openbsd45 root]# cd mod_evasive
[root@openbsd45 mod_evasive]# apxs2 -i -a -c mod_evasive20.c
Con tutta probabilità vi verrà restituito questo errore:
/usr/local/bin/libtool --silent --mode=compile cc -prefer-pic -O2 -pipe -D_POSIX_THREADS-I/usr/local/include -I/usr/local/include/apache2 -I/usr/local/include/apr-1/ -I/usr/local/include/apr-1/ -I/usr/local/include/db4 -I/usr/local/include -c -o mod_evasive20.lo mod_evasive20.c && touch mod_evasive20.slo
sh: /usr/local/bin/libtool: not found
apxs:Error: Command failed with rc=8323072
che può essere risolto semplicemente installando la libtool:
[root@openbsd45 ]# pkg_add libtool-1.5.26p0
[root@openbsd45 ]# ldconfig
Rilanciando apxs2 dovreste quindi ottenere un output simile a questo:
/usr/local/bin/libtool --silent --mode=compile cc -prefer-pic -O2 -pipe -D_POSIX_THREADS -I/usr/local/include -I/usr/local/include/apache2 -I/usr/local/include/apr-1/ -I/usr/local/include/apr-1/ -I/usr/local/include/db4 -I/usr/local/include -c -o mod_evasive20.lo mod_evasive20.c && touch mod_evasive20.slo /usr/local/bin/libtool --silent --mode=link cc -o mod_evasive20.la -rpath /usr/local/lib/apache2 -module -avoid-version mod_evasive20.lo /usr/local/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/bin/libtool ' mod_evasive20.la /usr/local/lib/apache2 /usr/local/bin/libtool --mode=install cp mod_evasive20.la /usr/local/lib/apache2/ cp .libs/mod_evasive20.so /usr/local/lib/apache2/mod_evasive20.so cp .libs/mod_evasive20.lai /usr/local/lib/apache2/mod_evasive20.la cp .libs/mod_evasive20.a /usr/local/lib/apache2/mod_evasive20.a chmod 644 /usr/local/lib/apache2/mod_evasive20.a ranlib -t /usr/local/lib/apache2/mod_evasive20.a PATH="$PATH:/sbin" ldconfig -m /usr/local/lib/apache2 chmod 755 /usr/local/lib/apache2/mod_evasive20.so [activating module `evasive20' in /etc/apache2/httpd2.conf]
La conferma che il modulo è effettivamente installato la avrete se andate a verificare il file /etc/apache2/httpd2.conf, dove dovreste trovare una riga simile a questa:
LoadModule evasive20_module /usr/local/lib/apache2/mod_evasive20.so
A questo punto il modulo è quindi installato e pronto per essere configurato.
Rimuovere i compilatori
Se avete dovuto installare i compilatori e non li volete lasciare, potete usare questo semplice scriptino.
ATTENZIONE: l’ho testato solo su OpenBSD 4.5 AMD64!! SU ALTRE VERSIONI POTREBBE ESSERE DANNOSO! FATE SEMPRE PRIMA DELLE PROVE!!!
for i in `tar -zvtf comp45.tgz |awk '{print $9,"\n",$11}'`; do cd /; if [ -f $i ]; then rm -f $i; fi; done
Esempio di configurazione
In questo esempio, il vhost www.domain.tld, che sta dietro al nostro bilanciatore/reverse proxy, è protetto da DosEvasive in modo che le singole pagine non possano ricevere dallo stesso ip più di 30 chiamate in un minuto, oppure che non possa ricevere più di 80 chiamate a pagine diverse nel giro di un minuto. Nel caso il modulo si attivi, “bannerà” l’ip per 600 secondi, restituendo alle sue chiamate successive un Forbidden e inviando una mail a dos_notify@dmoain.tld con un allarme. Le chiamate che arrivano dagli ip sotto DosWhitelist non passano attraverso DosEvasive (e di conseguenza non finiranno mai in blacklist):
<VirtualHost *:80>
ServerName www.domain.tld
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://www.domain.tld/
ProxyPassReverse / http://www.domain.tld/
DOSHashTableSize 1500DOSPageCount 30
DOSPageInterval 60DOSSiteCount 80
DOSSiteInterval 60
DOSBlockingPeriod 600
DOSEmailNotify dos_notify@domain.tld
DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.1.1
DOSWhitelist 192.168.xxx.xxx
</VirtualHost>
|
|












