Cum se instalează Mod_GeoIP pentru Apache în RHEL și CentOS


Mod_GeoIP este un modul Apache care poate fi folosit pentru a obține locația geografică a adresei IP a vizitatorului în serverul web Apache. Acest modul vă permite să determinați țara, organizația și locația ale vizitatorului. Este util în special pentru Difuzarea anunțurilor geografice, Conținut țintă, Combaterea spamului, Detectarea fraudei, Redirecționare /Blocarea vizitatorilor în funcție de țara lor și multe altele.

Modulul GeoIP permite administratorilor de sistem să redirecționeze sau să blocheze traficul web în funcție de locația geografică a clientului. Locația geografică este învățată prin adresa IP a clientului.

Mod_GeoIP are două versiuni diferite, una este gratuită și alta este plătită și utilizează MaxMind GeoIP/GeoCity baze de date.

  1. Versiune gratuită: în versiunea gratuită, bazele de date Geo City și Țară sunt disponibile cu 99,5% precizie.
  2. Versiunea cu plată: în versiunea cu plată, veți obține ambele baze de date cu o acuratețe de 99,8%, cu câteva detalii mai avansate despre adresa IP.

Dacă doriți să verificați mai multe diferențe dintre versiunea gratuită și plătită, accesați Maxmind.com.

Acest articol explică cum să configurați și să instalați modulul Mod_GeoIP pentru Apache în RHEL și CentOS folosind depozitul EPEL cu utilitarul de gestionare a pachetelor YUM.

Presupunem că aveți deja un sistem RHEL și CentOS care rulează cu un LAMP care funcționează (Linux, Apache , MySQL, și PHP). Dacă nu, atunci citiți articolele noastre în care am arătat instalarea ambelor sisteme de operare cu LAMP.

Instalarea RHEL/CentOS

  1. Instalarea CentOS 7 Minimal.
  2. Instalarea CentOS 8 Minimal.

Configurare LAMP pe RHEL/CentOS

  1. Cum se instalează LAMP (Linux, Apache, MySQL, PHP) pe RHEL și CentOS 7
  2. Cum se instalează Apache, MySQL/MariaDB și PHP pe RHEL și CentOS 8

Activați depozitul EPEL în RHEL și CentOS

În mod implicit, mod_Geoip nu este disponibil în depozitul oficial RHEL/CentOS, așa că trebuie să instalăm și să activăm depozitul terță parte EPEL.

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

Instalați Mod_GeoIP în RHEL și CentOS

După ce ați activat depozitul EPEL pe sistemul dvs., puteți pur și simplu să instalați mod_geoip executând următoarea comandă cu pachetele lor de dependență.

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

Descărcați cea mai recentă bază de date Geo oraș și țară

Este o idee bună să descărcați cea mai recentă Geo City și Country Database pentru a rămâne la curent.

# 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

Activați Mod_GeoIP în Apache

După ce modulul a fost instalat, deschideți și editați fișierul de configurare principal al modulului, cu un editor de text de linie de comandă, cum ar fi vi, și activați modulul la nivel de server, așa cum este ilustrat în fragmentul de mai jos.

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

Setați linia GeoIPEnable de la Dezactivat la Activat. De asemenea, asigurați-vă că adăugați calea absolută la fișierul bazei de date GeoIP.

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

Reporniți serviciul Apache pentru a reflecta modificările.

# systemctl restart httpd
OR
# service httpd restart

Cu toate acestea, nu este recomandat să activați modulul GeoIP la nivel de server. Ar trebui să activați modulul GeoIP numai în blocurile sau unde ați efectua de fapt redirecționarea sau blocarea traficului.

Testarea modulului Mod_GeoIP

Pentru a testa modulul mod_geoip funcționează corect cu Apache, trebuie să creăm un fișier PHP numit testgeoip.php sub Apache director rădăcină (de ex. /var/www/html).

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

Introduceți următoarea bucată de cod php în el.

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

Acum, încercați să apelați fișierul folosind un browser web (de exemplu, http://localhost/testgeoip.php). Veți primi detalii despre adresa IP și țara.

Actualizarea bazei de date GeoIP

Baza de date GeoIP este actualizată la începutul fiecărei luni. Deci, este foarte important să păstrați actualizată baza de date GeoIP. Pentru a descărca cea mai recentă versiune a bazei de date utilizați următoarea comandă.

# 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

Actualizare automată a bazei de date GeoIP

Am scris un mic script shell care va descărca automat cea mai recentă versiune a bazei de date GeoIP în fiecare lună. Doar plasați oricare dintre următoarele scripturi sub /etc/cron.monthly.

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

Redirecționarea utilizatorilor în funcție de țară

Exemplul de cod de mai jos va redirecționa utilizatorii pe baza codului de țară pe care l-am setat la AS (Asia). În acest fel, puteți redirecționa orice utilizator pe baza codului lor de județ.

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]

Blocarea utilizatorilor în funcție de țară

Acest exemplu va bloca utilizatorii pe baza codului de țară pe care GeoIP îl setează. Exemplul de mai jos va bloca utilizatorii din țările AS (Asia) și SUA (Statele Unite ale Americii).

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

Permiterea utilizatorilor în funcție de țară

Acest exemplu de mai jos va permite numai utilizatorii din țările menționate mai jos.

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

Pentru mai multe informații despre mod_geoip și despre utilizarea acestuia, puteți găsi la http://www.maxmind.com/app/mod_geoip. Dacă întâmpinați probleme în configurarea unui modul mod_geoip, vă rugăm să ne anunțați prin comentarii și vă rugăm să nu uitați să-l împărtășiți prietenilor dvs.