Come tutti sappiamo ai giorni di oggi gli attacchi di DDoS sono molto diffusi e frequenti, per ridurre questi attacchi c'Ŕ una soluzione ed Ŕ quella di escludere pool di indirizzi IP in base alla loro locazione geografica, questa Ŕ la miglior soluzione quando gli attacchi sono troppi per bloccare i singoli IP magari provenienti anche da da pool assegnati dinamicamente.


Esiste un software che permette questo?Si! e si chiama:
Xtables ed il suo relativo modulo GeoIP.

Se abbiamo la possibilitÓ di ristringere l' accesso ai nostri servizi a determinate nazioni, avere un firewall a controllo geografico Ŕ uno strumento valido sia per difendersi dagli attacchi DDoS che per prevenire limitando l' accesso ai nostri server in aree del mondo dove non abbiamo interesse a fornire i nostri servizi e impedire cosi l' accesso a malintenzionati.


Vediamo come funziona:
l'istallazione del software pu˛ essere eseguita su Debian GNU/Linux,Ubuntu,ecc..
l'esempio fa riferimento alla distro CentOS 6.2

N.B: e importante che che nel sistema operativo ci siano iptables 1.4.3 o successivo ed un kernel aggiornato (2.6.29 o successivo). Inoltre ci sarÓ necessario compilare un nuovo modulo per iptables quindi avremo bisogno anche dei sorgenti del kernel contenuti nel pacchetto kernel-devel attreverso il seguente comando: yum -y install kernel-devel* . Poi ci serve il pacchetto perl-Text-CSV_XS che utilizzeremo per il parsing del file GeoIP di Maxmind.


Iniziamo a configurare uno dei repository RPMforge,EPEL o RPM Fusion che contengono il pacchetto perl-Text-CSV_XS. Con il seguente comando andiamo a configurare il repository EPEL:
Codice:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
repository RPM Fusion:
Codice:
rpm -Uvh http://download.rpmfusion.org/free/el/updates/testing/6/i386/rpmfusion-free-release-6-0.1.noarch.rpm
repository RPMForge:
Codice:
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm

una volta configurato il repository scelto possiamo andare avanti con l'installazione del pacchetto con il seguente comando: yum install perl-Text-CSV_XS.
Ok ora siamo pronti compilare scarichiamo quindi l' ultima versione del pacchetto dei sorgenti di Xtables-addon e decomprimiamolo in una directory a nostra scelta:
Codice:
wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/1.42/xtables-addons-1.42.tar.xz

mkdir tmp-xtables; cd tmp-xtables
tar xvf ../xtables-addons-1.42.tar.xz

per finire compiliamo i moduli eseguendo i comandi configure e make. L'installazione (make install) dovremo eseguirla o da root o con sudo : in seguito troveremo i moduli nella cartella extra all'interno dei moduli del kernel.



Installiamo il Database
per installare il database GeoIP dobbiamo spostarci nella cartella geoip presente nella distribuzione, dove potremo trovare script per scaricare e compilare il database GeoIPCountry.
Usiamo il primo script per scaricare il file ./xt_geoip_dl e poi quello per la compilazione ./xt_geoip_build GeoIPCountryWhois.csv alla fine installiamo il file:
Codice:
mkdir -p /usr/share/xt_geoip/

cp -r BE /usr/share/xt_geoip/

cp -r LE /usr/share/xt_geoip/
arrivati a questo punto tutto dovrebbe funzionare. Ma Ŕ sempre meglio essere sicuri delle cose quindi facciamo una piccola prova attiviamo un semplice servizio web, per esempio la pagina predefinita di Apache. Nel caso nel sistema non sia avviato potete farlo con questo comando: service httpd start poi per renderlo accessibile dovremo effettuare l' apertura della porta 80 su iptables, Nat sul router all'indirizzo privato LAN del nostro server Apache e determinare l' indirizzo IP publico assegnato alla nostra conessione (potrete farlo usando What Is My IP - The IP Address Experts Since 1999. A questo per effettuare il test ci basterÓ un proxy HTTP libero di un altra nazione.

La Protezione:

in molte guide di RHEL (Red Hat Enterprise Linux) siamo invitati a disattivare il sistema di sicurezza SELinux per semplicitÓ operativa. Vediamo come configurare SELinux per utilizzare il nostro firewall con GeoIP, il tutto sta nella giusta configurazione dei permessi per i moduli e le librerie che verranno caricati. lo strumento usato per cambiar ei permessi di SELinux dei file Ŕ chcon e va utilizato cosi:
Codice:
chcon -vR --user=system_u /lib/modules/2.6.32-220.2.1.e16.x86_64/extra/*.ko

chcon -vR --type=lib_t /lib/xtables/*.so
nel caso abbiamo un sistema operativo a 64 bit dovremo eseguire anche questo comando: chcon -vR --type=lib_t /lib64/xtables/*.so

Esempio:
nel caso volessimo bloccare pacchetti provenienti dalla russia usiamo questo comando:
Codice:
iptables -I INPUT -m geoip --src-cc RU -j DROP
esaminiamo il comando :
allora abbiamo usato il modulo geoip opzione -m e l' opzione --src-cc specificando il country code seguendo il formato ISO 3166. una lista dei country code possiamo trovarla sul sito di MaxMind fornitore anche del database GeoIP. dopo questo tutte le opzioni di iptables rimangono attive quindi ci Ŕ possibile limitare il firewall solo ad alcune porte e non negare completamente l' accesso.

spero vi sia utile se avete qualche dubbio non esitate a chiedere.