Jinsi ya kufunga Mod_GeoIP kwa Apache katika RHEL na CentOS


Mod_GeoIP ni moduli ya Apache ambayo inaweza kutumika kupata eneo la kijiografia la anwani ya IP ya mgeni kwenye seva ya wavuti ya Apache. Moduli hii hukuruhusu kubainisha nchi, shirika na eneo la mgeni. Ni muhimu sana kwa Utoaji wa Matangazo ya Geo, Maudhui Lengwa, Kupambana na Barua Taka, Kugundua Ulaghai, Kuelekeza Kwingine/Kuzuia wageni kulingana na nchi yao na mengi zaidi.

Moduli ya GeoIP inaruhusu wasimamizi wa mfumo kuelekeza upya au kuzuia trafiki ya wavuti kulingana na eneo la kijiografia la mteja. Mahali pa kijiografia hujifunza kupitia anwani ya IP ya mteja.

Mod_GeoIP ina matoleo mawili tofauti moja ni Bure na lingine Inalipwa na hutumia hifadhidata za MaxMind GeoIP/GeoCity.

  1. Toleo Lisilolipishwa: Katika toleo lisilolipishwa, hifadhidata za Jiji la Geo na Nchi zinapatikana kwa usahihi wa 99.5%.
  2. Toleo Linalolipwa: Katika toleo la Kulipishwa, utapata hifadhidata zote mbili zilizo na usahihi wa 99.8% na maelezo ya kina zaidi kuhusu anwani ya IP.

Ikiwa ungependa kuangalia tofauti zaidi kati ya toleo la Bila Malipo na Linalolipwa, tafadhali tembelea Maxmind.com.

Makala haya yanafafanua jinsi ya kusanidi na kusakinisha moduli ya Mod_GeoIP ya Apache katika RHEL na CentOS kwa kutumia hazina ya EPEL iliyo na matumizi ya kidhibiti kifurushi cha YUM.

Tunadhania kuwa tayari unaendesha mfumo wa RHEL na CentOS na usanidi wa LAMP inayofanya kazi (Linux, Apache, MySQL, na PHP). Ikiwa sio, basi soma makala zetu ambapo tumeonyesha ufungaji wa mifumo yote ya uendeshaji na LAMP.

  1. Usakinishaji wa CentOS 7 Ndogo.
  2. Usakinishaji wa CentOS 8 Ndogo.

  1. Jinsi ya Kusakinisha LAMP (Linux, Apache, MySQL, PHP) kwenye RHEL na CentOS 7
  2. Jinsi ya Kusakinisha Apache, MySQL/MariaDB, na PHP kwenye RHEL na CentOS 8

Kwa chaguo-msingi mod_Geoip haipatikani chini ya hazina rasmi ya RHEL/CentOS, kwa hivyo tunahitaji kusakinisha na kuwezesha hazina ya EPEL ya wahusika wengine.

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

Mara tu unapowezesha hazina ya EPEL kwenye mfumo wako, unaweza kusakinisha tu mod_geoip kwa kutekeleza amri ifuatayo na vifurushi vyao vya utegemezi.

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

Ni wazo nzuri kupakua Hifadhidata mpya ya Jiji la Geo na Nchi ili kusasishwa.

# 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

Baada ya moduli kusakinishwa, fungua na uhariri faili kuu ya usanidi ya moduli, na kihariri cha maandishi ya mstari wa amri kama vile vi, na uamilishe seva nzima ya moduli, kama inavyoonyeshwa kwenye dondoo hapa chini.

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

Weka laini GeoIPenable kutoka Zima hadi Washa. Pia, hakikisha unaongeza njia kabisa kwenye faili ya hifadhidata ya GeoIP.

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

Anzisha tena huduma ya Apache ili kuonyesha mabadiliko.

# systemctl restart httpd
OR
# service httpd restart

Walakini, haipendekezi kuwasha moduli ya GeoIP kwa seva nzima. Unapaswa kuwasha moduli ya GeoIP katika vizuizi vya au pekee ambapo utafanya uelekezaji upya wa trafiki au kuzuia.

Ili kujaribu moduli ya mod_geoip inafanya kazi kwa usahihi na Apache, tunahitaji kuunda faili ya PHP inayoitwa testgeoip.php chini ya saraka ya mizizi ya Apache (k.m. /var/www/html).

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

Ingiza kipande kifuatacho cha msimbo wa php kwake.

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

Sasa, jaribu kupiga faili kwa kutumia kivinjari (k.m. http://localhost/testgeoip.php). Utapata anwani yako ya IP na maelezo ya Nchi.

Hifadhidata ya GeoIP inasasishwa mwanzoni mwa kila mwezi. Kwa hivyo, ni muhimu sana kusasisha hifadhidata ya GeoIP. Ili kupakua toleo la hivi karibuni la hifadhidata tumia amri ifuatayo.

# 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

Tumeandika hati ndogo ya ganda ambayo itapakua kiotomatiki toleo jipya zaidi la hifadhidata ya GeoIP kila mwezi. Weka tu hati yoyote ifuatayo chini ya /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

Msimbo ulio hapa chini utaelekeza watumiaji upya kulingana na msimbo wa nchi ambao tumeweka kwa AS (Asia). Kwa njia hii unaweza kuelekeza watumiaji wowote kulingana na msimbo wao wa kaunti.

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]

Mfano huu utawazuia watumiaji kulingana na msimbo wa nchi ambao GeoIP inaweka. Mfano ulio hapa chini utazuia watumiaji kutoka nchi za AS (Asia) na Marekani (Marekani).

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

Mfano huu ulio hapa chini utaruhusu watumiaji kutoka nchi zilizotajwa hapo chini pekee.

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

Kwa habari zaidi kuhusu mod_geoip na matumizi yake yanaweza kupatikana katika http://www.maxmind.com/app/mod_geoip. Ikiwa unatatizika kusanidi moduli ya mod_geoip, tafadhali tujulishe kupitia maoni na tafadhali usisahau kuishiriki na marafiki zako.