Kaip įdiegti „Mod_GeoIP for Apache“ RHEL ir CentOS


„Mod_GeoIP“ yra „Apache“ modulis, kurį galima naudoti norint gauti geografinę lankytojo IP adreso vietą į „Apache“ tinklo serverį. Šis modulis leidžia nustatyti lankytojo šalį, organizaciją ir vietą. Tai ypač naudinga geografinių skelbimų teikimui, tiksliniam turiniui, kovai su šlamštu, sukčiavimo nustatymui, lankytojų nukreipimui/blokavimui pagal jų šalį ir daugeliui kitų.

„GeoIP“ modulis leidžia sistemos administratoriams nukreipti arba blokuoti žiniatinklio srautą pagal kliento geografinę vietą. Geografinė padėtis sužinoma per kliento IP adresą.

„Mod_GeoIP“ turi dvi skirtingas versijas, viena yra nemokama, kita - mokama ir naudoja „MaxMind GeoIP/GeoCity“ duomenų bazes.

  1. Nemokama versija: nemokamoje versijoje „Geo City“ ir „Country“ duomenų bazės yra prieinamos 99,5% tikslumu.
  2. Mokama versija: mokamoje versijoje abi duomenų bazes gausite 99,8% tikslumu su išsamesne informacija apie IP adresą.

Jei norite sužinoti daugiau skirtumų tarp nemokamos ir mokamos versijos, apsilankykite svetainėje Maxmind.com.

Šiame straipsnyje paaiškinama, kaip nustatyti ir įdiegti „Mod_GeoIP“ modulį „Apache“ RHEL ir „CentOS“ naudojant EPEL saugyklą su „YUM“ paketų tvarkymo priemone.

Manome, kad jūs jau naudojate RHEL ir CentOS sistemą su veikiančia LAMP („Linux“, „Apache“, „MySQL“ ir PHP) sąranka. Jei ne, tada perskaitykite mūsų straipsnius, kuriuose parodėme abiejų operacinių sistemų su LAMP diegimą.

  1. „CentOS 7 Minimal“ įdiegimas.
  2. „CentOS 8 Minimal“ įdiegimas.

  1. Kaip įdiegti LAMP („Linux“, „Apache“, „MySQL“, PHP) RHEL ir „CentOS 7“
  2. Kaip įdiegti „Apache“, „MySQL/MariaDB“ ir PHP RHEL ir „CentOS 8“

Pagal numatytuosius nustatymus mod_Geoip nėra prieinamas oficialioje RHEL/CentOS saugykloje, todėl turime įdiegti ir įgalinti trečiųjų šalių EPEL saugyklą.

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

Įjungę EPEL saugyklą savo sistemoje, galite tiesiog įdiegti mod_geoip, vykdydami šią komandą su jų priklausomybės paketais.

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

Patariama atsisiųsti naujausią „Geo City and Country“ duomenų bazę, kad būtų atnaujinta.

# 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

Įdiegę modulį, atidarykite ir redaguokite pagrindinį modulio konfigūracijos failą naudodami komandinės eilutės teksto rengyklę, pvz., „Vi“, ir suaktyvinkite modulį visame serveryje, kaip parodyta toliau pateiktoje ištraukoje.

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

Nustatykite eilutę „GeoIPEnable“ iš „Off“ į „On“. Be to, būtinai pridėkite absoliutų kelią į „GeoIP“ duomenų bazės failą.

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

Norėdami atspindėti pakeitimus, iš naujo paleiskite „Apache“ paslaugą.

# systemctl restart httpd
OR
# service httpd restart

Tačiau nerekomenduojama įjungti „GeoIP“ modulio visame serveryje. „GeoIP“ modulį turėtumėte įgalinti tik blokuose arba , kur iš tikrųjų atliktumėte srauto peradresavimą ar blokavimą.

Norėdami patikrinti, ar mod_geoip modulis veikia tinkamai su „Apache“, turime sukurti PHP failą, pavadintą testgeoip.php, esantį „Apache“ šakniniame kataloge (pvz.,/Var/www/html).

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

Į jį įterpkite šį php kodo fragmentą.

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

Dabar pabandykite iškviesti failą naudodami žiniatinklio naršyklę (pvz., Http: //localhost/testgeoip.php). Jūs gausite savo IP adresą ir išsamią informaciją apie šalį.

„GeoIP“ duomenų bazė atnaujinama kiekvieno mėnesio pradžioje. Taigi labai svarbu atnaujinti „GeoIP“ duomenų bazę. Norėdami atsisiųsti naujausią duomenų bazės versiją, naudokite šią komandą.

# 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

Parašėme nedidelį apvalkalo scenarijų, kuris kiekvieną mėnesį automatiškai atsisiųs naujausią „GeoIP“ duomenų bazės versiją. Tiesiog padėkite bet kurį iš šių scenarijų po /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

Žemiau pateiktas kodo pavyzdys nukreips vartotojus pagal šalies kodą, kurį nustatėme kaip AS (Azija). Tokiu būdu galite nukreipti bet kuriuos vartotojus pagal jų apskrities kodą.

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]

Šis pavyzdys blokuos vartotojus pagal šalies kodą, kurį nustato „GeoIP“. Žemiau pateiktame pavyzdyje bus blokuojami vartotojai iš AS (Azija) ir JAV (JAV) šalių.

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

Šis žemiau pateiktas pavyzdys leis vartotojams tik iš žemiau paminėtų šalių.

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

Norėdami gauti daugiau informacijos apie mod_geoip ir jo naudojimą, rasite adresu http://www.maxmind.com/app/mod_geoip. Jei kyla problemų nustatant mod_geoip modulį, praneškite mums apie tai komentarais ir nepamirškite pasidalinti juo su draugais.