Cómo instalar Mod_GeoIP para Apache en RHEL y CentOS


Mod_GeoIP es un módulo de Apache que se puede usar para obtener la ubicación geográfica de la dirección IP del visitante en el servidor web Apache . Este módulo le permite determinar el país , organización y ubicación del visitante. Es especialmente útil para publicación de anuncios geográficos , contenido de destino , lucha contra el spam , detección de fraude , redirección/Bloqueo de visitantes según su país y mucho más.

El módulo GeoIP permite a los administradores del sistema redirigir o bloquear el tráfico web de acuerdo con la ubicación geográfica del cliente. La ubicación geográfica se aprende a través de la dirección IP del cliente.

Mod_GeoIP tiene dos versiones diferentes, una es Gratis y otra es Pagada y usa MaxMind GeoIP / GeoCity bases de datos.

  1. Free Version : In Free version the Geo City and Country databases are availble with 99.5% accuracy.
  2. Paid Version : In Paid version you will get both databases with 99.8% accuracy with some more advanaced details about IP address.

Si desea consultar las diferencias entre la versión gratuita y pagada , visite Maxmind.com .

Este artículo explica cómo configurar e instalar el módulo Mod_GeoIP para Apache en

Suponemos que ya tiene el sistema RHEL y CentOS con un LAMP ( Linux , Apache , MySQL y PHP ) de configuración. De lo contrario, lea nuestros artículos donde hemos mostrado la instalación de ambos sistemas operativos con LAMP .

  1. Installation of Red Hat Enterprise Linux (RHEL) 7.3 Guide
  2. Installation of CentOS 7.3 Guide
  1. How to Install LAMP (Linux, Apache, MySQL, PHP) on RHEL and CentOS

Por defecto, mod_Geoip no está disponible en RHEL/CentOS , por lo que debemos instalar y habilitar el repositorio EPEL de terceros.

# yum install epel-release

Una vez que haya habilitado el repositorio EPEL en su sistema, puede instalar simplemente mod_geoip ejecutando el siguiente comando con sus paquetes de dependencia.

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

Es una buena idea descargar la última Geo City y Country Database para mantenerse actualizado

# 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

Después de instalar el módulo, abra y edite el archivo de configuración principal del módulo, con un editor de texto de línea de comandos como vi , y active el módulo en todo el servidor, como se ilustra en el extracto a continuación.

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

Configure la línea GeoIPEnable desde Desactivado a Activado . Además, asegúrese de agregar la ruta absoluta al archivo de base de datos GeoIP.

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

Reinicie el servicio Apache para reflejar los cambios.

# systemctl restart httpd
OR
# service httpd restart

Sin embargo, no se recomienda activar el módulo GeoIP en todo el servidor. Debería habilitar el módulo GeoIP solo en los bloques & lt; Location & gt; o & lt; Directory & gt; en los que realmente realizará la redirección o bloqueo del tráfico.

Para probar que el módulo mod_geoip funciona correctamente con Apache, debemos crear un archivo PHP llamado testgeoip.php en Apache directorio raíz ( por ejemplo/var/www/html ).

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

Inserte el siguiente fragmento de código php en él.

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

Ahora, intente llamar al archivo utilizando el navegador web ( por ejemplo, http: //localhost/testgeoip.php ). Obtendrá su dirección IP y país detalles.

La base de datos GeoIP se actualiza a partir de cada mes. Por lo tanto, es muy importante mantener la base de datos GeoIP actualizada. Para descargar la última versión de la base de datos use el siguiente 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

Hemos escrito un script de shell smaill que descargará automáticamente la última versión de la base de datos GeoIP cada mes. Simplemente coloque cualquiera de las siguientes secuencias de comandos en /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 siguiente código de ejemplo redirigirá a los usuarios según el código de país que configuramos en AS ( Asia ). De esta manera puede redirigir a cualquier usuario según el código de su condado.

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

# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteRule ^(.*)$ https://www.tecmint.com$1 [R,L]

Este ejemplo bloqueará a los usuarios según el código de país que establece GeoIP. El siguiente ejemplo bloqueará a los usuarios de los países AS ( Asia ) y EE. UU. ( Estados Unidos ).

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

El siguiente ejemplo solo permitirá a los usuarios de los países mencionados a continuación.

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

Para obtener más información sobre mod_geoip y su uso, visite http://www.maxmind.com/app/mod_geoip. Si tiene algún problema para configurar el módulo mod_geoip, háganoslo saber a través de comentarios y no olvide compartirlo con sus amigos.