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.
- 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%.
- 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
- Instalación de RHEL 7 y CentOS 7 Minimal.
- Instalación de RHEL 8 y CentOS 8 Minimal.
Configuración de LÁMPARA en RHEL/CentOS
- Cómo instalar LAMP (Linux, Apache, MySQL, PHP) en RHEL y CentOS 7
- 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.