Hvernig á að setja upp Mod_GeoIP fyrir Apache í RHEL og CentOS


Mod_GeoIP er Apache eining sem hægt er að nota til að fá landfræðilega staðsetningu IP tölu gesta inn á Apache vefþjóninn. Þessi eining gerir þér kleift að ákvarða land gesta, skipulag og staðsetningu. Það er sérstaklega gagnlegt fyrir landfræðilega auglýsingabirtingu, markefni, ruslpóstsbaráttu, svikauppgötvun, beina/loka á gesti út frá landi þeirra og margt fleira.

GeoIP eining gerir kerfisstjórum kleift að beina eða loka fyrir netumferð í samræmi við landfræðilega staðsetningu viðskiptavinarins. Landfræðileg staðsetning er lærð í gegnum IP tölu viðskiptavinarins.

Mod_GeoIP hefur tvær mismunandi útgáfur önnur er ókeypis og önnur er greidd og notar MaxMind GeoIP/GeoCity gagnagrunna.

  1. Ókeypis útgáfa: Í ókeypis útgáfunni eru Geo City og Country gagnagrunnarnir fáanlegir með 99,5% nákvæmni.
  2. Greidd útgáfa: Í greiddri útgáfu færðu báða gagnagrunna með 99,8% nákvæmni með ítarlegri upplýsingum um IP tölu.

Ef þú vilt skoða meiri mun á ókeypis og greiddri útgáfu, vinsamlegast farðu á Maxmind.com.

Þessi grein útskýrir hvernig á að setja upp og setja upp Mod_GeoIP eininguna fyrir Apache í RHEL og CentOS með því að nota EPEL geymsluna með YUM pakkastjórnunarforritinu.

Við gerum ráð fyrir að þú hafir nú þegar keyrt RHEL og CentOS kerfi með virku LAMP (Linux, Apache, MySQL og PHP) uppsetningu. Ef ekki, lestu þá greinar okkar þar sem við höfum sýnt uppsetningu beggja stýrikerfa með LAMP.

  1. Uppsetning á CentOS 7 Minimal.
  2. Uppsetning á CentOS 8 Minimal.

  1. Hvernig á að setja upp LAMP (Linux, Apache, MySQL, PHP) á RHEL og CentOS 7
  2. Hvernig á að setja upp Apache, MySQL/MariaDB og PHP á RHEL og CentOS 8

Sjálfgefið er mod_Geoip ekki tiltækt undir RHEL/CentOS opinberu geymslunni, svo við þurfum að setja upp og virkja EPEL geymslu þriðja aðila.

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

Þegar þú hefur virkjað EPEL geymsla á vélinni þinni geturðu einfaldlega sett upp mod_geoip með því að keyra eftirfarandi skipun með ósjálfstæðispakka þeirra.

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

Það er góð hugmynd að hlaða niður nýjasta Geo City and Country Database til að vera uppfærður.

# 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

Eftir að einingin hefur verið sett upp, opnaðu og breyttu aðalstillingarskrá einingarinnar, með skipanalínutextaritli eins og vi, og virkjaðu eininguna um allan miðlara, eins og sýnt er í útdrættinum hér að neðan.

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

Stilltu línuna GeoIPEnable frá Off til On. Gakktu úr skugga um að þú bætir algeru slóðinni við GeoIP gagnagrunnsskrána.

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

Endurræstu Apache þjónustuna til að endurspegla breytingar.

# systemctl restart httpd
OR
# service httpd restart

Hins vegar er ekki mælt með því að kveikja á GeoIP einingunni á netþjóninum. Þú ættir aðeins að virkja GeoIP eininguna í eða blokkum þar sem þú myndir raunverulega framkvæma umferðartilvísunina eða blokkunina.

Til að prófa að mod_geoip einingin virki rétt með Apache þurfum við að búa til PHP skrá sem heitir testgeoip.php undir Apache rótarskrá (t.d. /var/www/html).

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

Settu eftirfarandi stykki af php kóða inn í það.

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

Reyndu nú að hringja í skrána með vafra (t.d. http://localhost/testgeoip.php). Þú munt fá IP tölu þína og upplýsingar um land.

GeoIP gagnagrunnur er uppfærður í byrjun hvers mánaðar. Svo það er mjög mikilvægt að halda GeoIP gagnagrunninum uppfærðum. Notaðu eftirfarandi skipun til að hlaða niður nýjustu útgáfu gagnagrunnsins.

# 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

Við höfum skrifað lítið skeljaforskrift sem mun sjálfkrafa hlaða niður nýjustu útgáfunni af GeoIP gagnagrunninum í hverjum mánuði. Settu bara eitthvað af eftirfarandi skriftum undir /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

Dæmikóði hér að neðan mun vísa notendum áfram út frá landskóðanum sem við stillum á AS (Asía). Þannig geturðu framvísað hvaða notendum sem er út frá fylkisnúmeri þeirra.

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]

Þetta dæmi mun loka fyrir notendur út frá landskóðanum sem GeoIP setur. Dæmið hér að neðan mun loka fyrir notendur frá AS (Asíu) og Bandaríkjunum (Bandaríkjunum) löndum.

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

Þetta dæmi fyrir neðan mun aðeins leyfa notendum frá neðangreindum löndum.

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

Fyrir frekari upplýsingar um mod_geoip og notkun þess má finna á http://www.maxmind.com/app/mod_geoip. Ef þú átt í vandræðum með að setja upp mod_geoip mát, vinsamlegast láttu okkur vita í gegnum athugasemdir og vinsamlegast ekki gleyma að deila því með vinum þínum.