Avevo la necessità di permettere l’accesso ad un determinato virtual host di Apache solo ad utenti italiani, ho risolto con mod_geoip.

Ecco come installarlo:

apt-get install libapache2-mod-geoip

Per la configurazione del modulo è necessario editare il file

/etc/apache2/mods-available/geoip.conf

e decommentare la riga:

GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

Salviamo questo file ed editiamo il file di configurazione del virtual-host aggiungendo questa specifica:

SetEnvIf GEOIP_COUNTRY_CODE <codice_del_paese> AllowCountry

E le policy di accesso:

Order Deny,Allow
Deny from all
Allow from env=AllowCountry

Scarichiamo l’ultima versione del database contenente gli IP tramite wget:

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

Salviamo il file nella directory:

/usr/share/GeoIP/

Eliminiamo il file vecchio:

rm GeoIP.dat

Mettiamo il nuovo:

gunzip GeoIP.dat.gz

Riavviamo Apache:

/etc/init.d/apache2 restart

e solo la nazione a voi simpatica accederà al sito!:)

Il modulo GeoIP è usabile anche all’interno di PHP:

<?php
$country_name = apache_note("GEOIP_COUNTRY_NAME");
$country_code = apache_note("GEOIP_COUNTRY_CODE");
print "Nazione: " . $country_name . " - Codice nazione: ".$country_code;
?>

Per maggiori informazioni ralative a mod_geoip potete consultare questa pagina.