Com instal·lar Mod_GeoIP per a Apache a RHEL i CentOS


Mod_GeoIP és un mòdul Apache que es pot utilitzar per obtenir la ubicació geogràfica de l'adreça IP del visitant al servidor web Apache. Aquest mòdul us permet determinar el país, l'organització i la ubicació del visitant. És especialment útil per a la publicació d'anuncis geogràfics, el contingut objectiu, la lluita contra el correu brossa, la detecció de frau, la redirecció/bloqueig de visitants en funció del seu país i molt més.

El mòdul GeoIP permet als administradors del sistema redirigir o bloquejar el trànsit web segons la ubicació geogràfica del client. La ubicació geogràfica s'aprèn mitjançant l'adreça IP del client.

Mod_GeoIP té dues versions diferents una és gratuïta i una altra de pagament i utilitza bases de dades MaxMind GeoIP/GeoCity.

  1. Versió gratuïta: a la versió gratuïta, les bases de dades Geo City i Country estan disponibles amb un 99,5% de precisió.
  2. Versió de pagament: a la versió de pagament, obtindreu les dues bases de dades amb un 99,8% de precisió amb alguns detalls més avançats sobre l'adreça IP.

Si voleu veure més diferències entre la versió gratuïta i la de pagament, visiteu Maxmind.com.

Aquest article explica com configurar i instal·lar el mòdul Mod_GeoIP per a Apache a RHEL i CentOS mitjançant el repositori EPEL amb la utilitat del gestor de paquets YUM.

Suposem que ja teniu un sistema RHEL i CentOS en execució amb una configuració LAMP (Linux, Apache, MySQL i PHP) que funcioni. Si no, llegiu els nostres articles on us mostrem la instal·lació dels dos sistemes operatius amb LAMP.

  1. Instal·lació de CentOS 7 Minimal.
  2. Instal·lació de CentOS 8 Minimal.

  1. Com instal·lar LAMP (Linux, Apache, MySQL, PHP) a RHEL i CentOS 7
  2. Com instal·lar Apache, MySQL/MariaDB i PHP a RHEL i CentOS 8

De manera predeterminada, mod_Geoip no està disponible al dipòsit oficial de RHEL/CentOS, de manera que hem d'instal·lar i habilitar el dipòsit EPEL de tercers.

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

Un cop hàgiu habilitat el repositori EPEL al vostre sistema, simplement podeu instal·lar mod_geoip executant la següent comanda amb els seus paquets de dependència.

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

És una bona idea baixar la darrera base de dades de ciutats i països per mantenir-se actualitzat.

# 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

Un cop instal·lat el mòdul, obriu i editeu el fitxer de configuració principal del mòdul, amb un editor de text de línia d'ordres com ara vi, i activeu el mòdul a tot el servidor, tal com es mostra a l'extracte següent.

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

Estableix la línia GeoIPEnable de Off a On. A més, assegureu-vos d'afegir la ruta absoluta al fitxer de base de dades GeoIP.

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

Reinicieu el servei Apache per reflectir els canvis.

# systemctl restart httpd
OR
# service httpd restart

Tanmateix, no es recomana activar el mòdul GeoIP a tot el servidor. Només hauríeu d'habilitar el mòdul GeoIP als blocs o on realment realitzaríeu la redirecció o el bloqueig del trànsit.

Per provar que el mòdul mod_geoip funciona correctament amb Apache, hem de crear un fitxer PHP anomenat testgeoip.php al directori arrel d'Apache (per exemple, /var/www/html).

# vi /var/www/html/testgeoip.php

Inseriu-hi el següent fragment de codi php.

<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>

Ara, proveu de trucar al fitxer mitjançant un navegador web (p. ex. http://localhost/testgeoip.php). Obtindreu la vostra adreça IP i els detalls del país.

La base de dades GeoIP s'actualitza a principis de cada mes. Per tant, és molt important mantenir la base de dades GeoIP actualitzada. Per descarregar la darrera versió de la base de dades, utilitzeu l'ordre següent.

# 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

Hem escrit un petit script d'intèrpret d'ordres que descarregarà automàticament la darrera versió de la base de dades GeoIP cada mes. Simplement col·loqueu qualsevol dels scripts següents a /etc/cron.monthly.

# 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
#!/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

El codi d'exemple següent redirigirà els usuaris en funció del codi de país que hem establert com a AS (Àsia). D'aquesta manera, podeu redirigir qualsevol usuari en funció del seu codi de comtat.

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]

Aquest exemple bloquejarà els usuaris en funció del codi de país que estableixi GeoIP. L'exemple següent bloquejarà usuaris de països AS (Àsia) i EUA (Estats Units).

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

Aquest exemple de sota només permetrà usuaris dels països esmentats a continuació.

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

Podeu trobar més informació sobre mod_geoip i el seu ús a http://www.maxmind.com/app/mod_geoip. Si teniu problemes per configurar un mòdul mod_geoip, feu-nos-ho saber mitjançant els comentaris i no us oblideu de compartir-lo amb els vostres amics.