Búsqueda de sitios web

Cómo instalar Mod_GeoIP para Apache en RHEL y CentOS


Mod_GeoIP es un módulo de Apache que se puede utilizar 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, la organización y la ubicación del visitante. Es especialmente útil para publicación geográfica de anuncios, contenido de destino, lucha contra el spam, detección de fraude y redireccionamiento. /Bloquear 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 según 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 Gratuita y otra es Paga y utiliza MaxMind GeoIP/GeoCity bases de datos.

  1. Versión gratuita: En la versión gratuita, las bases de datos de GeoCiudad y País están disponibles con una precisión del 99,5%.
  2. Versión de pago: En la versión de pago, obtendrá ambas bases de datos con una precisión del 99,8 % con algunos detalles más avanzados sobre la dirección IP.

Si desea comprobar más diferencias entre la versión Gratuita y la Paga, visite Maxmind.com.

Este artículo explica cómo configurar e instalar el módulo Mod_GeoIP para Apache en RHEL y CentOS usando el repositorio EPEL con la utilidad de administrador de paquetes YUM.

Suponemos que ya tiene el sistema RHEL y CentOS en ejecución con una LAMP en funcionamiento (Linux, Apache , MySQL, y PHP). Si no, lee nuestros artículos donde mostramos la instalación de ambos sistemas operativos con LAMP.

Instalación de RHEL/CentOS
  1. Instalación de RHEL 7 y CentOS 7 Minimal.
  2. Instalación de RHEL 8 y CentOS 8 Minimal.
Configuración de LÁMPARA en RHEL/CentOS
  1. Cómo instalar LAMP (Linux, Apache, MySQL, PHP) en RHEL y CentOS 7
  2. Cómo instalar Apache, MySQL/MariaDB y PHP en RHEL y CentOS 8

Habilite el repositorio EPEL en RHEL y CentOS

De forma predeterminada, mod_Geoip no está disponible en el repositorio oficial RHEL/CentOS, por lo que debemos instalar y habilitar el repositorio EPEL de terceros.

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

Instale Mod_GeoIP en RHEL y CentOS

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

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

Descargue la última base de datos geográfica de ciudades y países

Es una buena idea descargar la última Geo City y la Base de datos de países 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

Habilitar Mod_GeoIP en Apache

Una vez instalado 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 siguiente extracto.

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

Establezca la línea GeoIPEnable de 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. Debe habilitar el módulo GeoIP solo en los bloques o donde realmente realizaría la redirección o el bloqueo del tráfico.

Prueba del módulo Mod_GeoIP

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

vi /var/www/html/testgeoip.php

Inserte el siguiente fragmento de código 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>

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

Actualización de la base de datos GeoIP

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

Actualización automática de la base de datos GeoIP

Hemos escrito un pequeño script de shell que descargará automáticamente la última versión de la base de datos GeoIP cada mes. Simplemente coloque cualquiera de los siguientes scripts en /etc/cron.monthly.

Guión 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
Guión 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

Redirigir usuarios según el país

El siguiente código de ejemplo redirigirá a los usuarios según el código de país que configuramos como AS (Asia). De esta manera puede redirigir a cualquier usuario según su código de condado.

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]

Bloquear usuarios según el país

Este ejemplo bloqueará a los usuarios según el código de país que establezca GeoIP. El siguiente ejemplo bloqueará a usuarios de países AS (Asia) y US (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

Permitir usuarios según el país

El siguiente ejemplo solo permitirá 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, puede encontrarlo en http://www.maxmind.com/app/mod_geoip. Si tiene algún problema para configurar un módulo mod_geoip, háganoslo saber a través de los comentarios y no olvide compartirlo con sus amigos.