Ricerca nel sito web

Come installare Mod_GeoIP per Apache in RHEL e CentOS


Mod_GeoIP è un modulo Apache che può essere utilizzato per ottenere la posizione geografica dell'indirizzo IP del visitatore nel server web Apache. Questo modulo ti consente di determinare il paese, l'organizzazione e la località del visitatore. È particolarmente utile per pubblicazione di annunci geografici, targeting di contenuti, lotta allo spam, rilevamento di frodi, reindirizzamento /Blocco dei visitatori in base al Paese e molto altro ancora.

Il modulo GeoIP consente agli amministratori di sistema di reindirizzare o bloccare il traffico web in base alla posizione geografica del cliente. La posizione geografica viene appresa tramite l'indirizzo IP del client.

Mod_GeoIP ha due versioni diverse, una è gratuita e un'altra è a pagamento e utilizza MaxMind GeoIP/GeoCity banche dati.

  1. Versione gratuita: nella versione gratuita, i database Geo Città e Paese sono disponibili con una precisione del 99,5%.
  2. Versione a pagamento: nella versione a pagamento, otterrai entrambi i database con una precisione del 99,8% con alcuni dettagli più avanzati sull'indirizzo IP.

Se desideri verificare ulteriori differenze tra la versione gratuita e quella a pagamento, visita Maxmind.com.

Questo articolo spiega come configurare e installare il modulo Mod_GeoIP per Apache in RHEL e CentOS utilizzando il repository EPEL con l'utilità di gestione pacchetti YUM.

Partiamo dal presupposto che tu abbia già in esecuzione il sistema RHEL e CentOS con un LAMP funzionante (Linux, Apache , MySQL, e PHP). In caso contrario, leggi i nostri articoli in cui abbiamo mostrato l'installazione di entrambi i sistemi operativi con LAMP.

Installazione di RHEL/CentOS
  1. Installazione di RHEL 7 e CentOS 7 minima.
  2. Installazione di RHEL 8 e CentOS 8 minima.
Configurazione LAMPADA su RHEL/CentOS
  1. Come installare LAMP (Linux, Apache, MySQL, PHP) su RHEL e CentOS 7
  2. Come installare Apache, MySQL/MariaDB e PHP su RHEL e CentOS 8

Abilita il repository EPEL in RHEL e CentOS

Per impostazione predefinita, mod_Geoip non è disponibile nel repository ufficiale RHEL/CentOS, quindi dobbiamo installare e abilitare il repository EPEL di terze parti.

yum install epel-release
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [On RHEL 8]

Installa Mod_GeoIP in RHEL e CentOS

Una volta abilitato il repository EPEL sul tuo sistema, puoi semplicemente installare mod_geoip eseguendo il seguente comando con i relativi pacchetti di dipendenze.

yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel

Scarica l'ultimo database geografico di città e paesi

È una buona idea scaricare l'ultimo Geo City e il Database Paese per rimanere aggiornato.

cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz

Abilita Mod_GeoIP in Apache

Dopo che il modulo è stato installato, apri e modifica il file di configurazione principale del modulo, con un editor di testo da riga di comando come vi, e attiva il modulo a livello di server, come illustrato nell'estratto seguente.

vi /etc/httpd/conf.d/geoip.conf

Imposta la riga GeoIPEnable da Off a On. Inoltre, assicurati di aggiungere il percorso assoluto al file del database GeoIP.

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>

Riavvia il servizio Apache per riflettere le modifiche.

systemctl restart httpd
OR
service httpd restart

Tuttavia, non è consigliabile attivare il modulo GeoIP a livello di server. Dovresti abilitare il modulo GeoIP solo nei blocchi o in cui eseguiresti effettivamente il reindirizzamento o il blocco del traffico.

Test del modulo Mod_GeoIP

Per testare il corretto funzionamento del modulo mod_geoip con Apache, dobbiamo creare un file PHP chiamato testgeoip.php in Apache directory principale (ad esempio /var/www/html).

vi /var/www/html/testgeoip.php

Inserisci il seguente pezzo di codice php al suo interno.

<html>
<head>
  <title>What is my IP address - determine or retrieve my IP address</title>
 </head>
<body>
 <?php
     if (getenv(HTTP_X_FORWARDED_FOR)) {
        $pipaddress = getenv(HTTP_X_FORWARDED_FOR);
        $ipaddress = getenv(REMOTE_ADDR);
        echo "Your Proxy IP address is : ".$pipaddress. " (via $ipaddress) " ;
    } else {
        $ipaddress = getenv(REMOTE_ADDR);
        echo "Your IP address is : $ipaddress";
    }
    $country = getenv(GEOIP_COUNTRY_NAME);
    $country_code = getenv(GEOIP_COUNTRY_CODE);
    echo "<br/>Your country : $country ( $country_code ) ";
?>
</body>
</html>

Ora prova a chiamare il file utilizzando un browser web (ad esempio http://localhost/testgeoip.php). Riceverai il tuo indirizzo IP e i dettagli del Paese.

Aggiornamento del database GeoIP

Il database GeoIP viene aggiornato all'inizio di ogni mese. Pertanto, è molto importante mantenere aggiornato il database GeoIP. Per scaricare la versione più recente del database utilizzare il seguente comando.

cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz

Aggiornamento automatico del database GeoIP

Abbiamo scritto un piccolo script di shell che scaricherà automaticamente ogni mese l'ultima versione del database GeoIP. Basta inserire uno qualsiasi dei seguenti script in /etc/cron.monthly.

Copione 1
Automatic GeoIP Database Update
#!/bin/sh
cd /usr/share/GeoIP
mv GeoIP.dat GeoIP.dat_org
wget -q http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
gzip -d -f GeoLite2-Country.tar.gz
Copione 2
#!/bin/sh

GEOIP_MIRROR="http://geolite.maxmind.com/download/geoip/database"
GEOIPDIR=/usr/share/GeoIP
TMPDIR=

DATABASES="GeoLiteCity GeoLiteCountry/GeoIP asnum/GeoIPASNum GeoIPv6"

if [ -d "${GEOIPDIR}" ]; then
        cd $GEOIPDIR
        if [ -n "${DATABASES}" ]; then
                TMPDIR=$(mktemp -d geoipupdate.XXXXXXXXXX)

                echo "Updating GeoIP databases..."

                for db in $DATABASES; do
                        fname=$(basename $db)

                        wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/${db}.dat.gz" -O "${TMPDIR}/${fname}.dat.gz"
                        gunzip -fdc "${TMPDIR}/${fname}.dat.gz" > "${TMPDIR}/${fname}.dat"
                        mv "${TMPDIR}/${fname}.dat" "${GEOIPDIR}/${fname}.dat"
                        chmod 0644 "${GEOIPDIR}/${fname}.dat"
                done
                [ -d "${TMPDIR}" ] && rm -rf $TMPDIR
        fi
fi

Reindirizzamento degli utenti in base al Paese

Il codice di esempio seguente reindirizzerà gli utenti in base al codice paese che abbiamo impostato su AS (Asia). In questo modo puoi reindirizzare qualsiasi utente in base al codice della sua contea.

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteRule ^(.*)$ https://linux-console.net$1 [R,L]

Blocco degli utenti in base al Paese

Questo esempio bloccherà gli utenti in base al codice paese impostato da GeoIP. L'esempio seguente bloccherà gli utenti dei paesi AS (Asia) e USA (Stati Uniti).

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
... place more countries here

Deny from env=BlockCountry

Consentire utenti in base al Paese

L'esempio seguente consentirà solo agli utenti dei paesi sotto menzionati.

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

SetEnvIf GEOIP_COUNTRY_CODE AS AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
... place more countries here

Deny from all
Allow from env=AllowCountry

Per ulteriori informazioni su mod_geoip e il suo utilizzo è possibile trovarle su http://www.maxmind.com/app/mod_geoip. Se riscontri problemi nella configurazione di un modulo mod_geoip, faccelo sapere tramite i commenti e non dimenticare di condividerlo con i tuoi amici.