RHEL we CentOS-da Apache üçin Mod_GeoIP nädip gurmaly


Mod_GeoIP, Apache web serwerine gelýänleriň IP adresiniň geografiki ýerleşişini almak üçin ulanyp boljak Apache modulydyr. Bu modul, gelýänleriň ýurduny, guramasyny we ýerleşýän ýerini kesgitlemäge mümkinçilik berýär. Geo mahabat hyzmaty, maksatly mazmun, spam bilen göreş, galplygy ýüze çykarmak, öz ýurduna esaslanýan myhmanlary gönükdirmek/blokirlemek we başga-da köp peýdaly.

GeoIP moduly ulgam dolandyryjylaryna müşderiniň geografiki ýerleşişine görä web traffigini gönükdirmäge ýa-da blokirlemäge mümkinçilik berýär. Geografiki ýerleşişi müşderiniň IP adresi arkaly öwrenilýär.

Mod_GeoIP-iň iki dürli wersiýasy bar, biri mugt, beýlekisi Tölegli we MaxMind GeoIP/GeoCity maglumat bazalaryny ulanýar.

  1. Mugt wersiýa: Mugt wersiýada Geo City we Country maglumat bazalary 99.5% takyklygy bilen elýeterlidir.
  2. Tölegli wersiýa: Tölegli wersiýada, IP adresi barada has kämil jikme-jiklikler bilen 99,8% takyklygy bilen iki maglumat bazasyny alarsyňyz.

Mugt we tölegli wersiýanyň arasyndaky has köp tapawudy barlamak isleseňiz, Maxmind.com-a girmegiňizi haýyş edýäris.

Bu makala, RUMEL we CentOS-da Apache üçin Mod_GeoIP modulyny YUM paket dolandyryjysy bilen EPEL ammaryny nädip gurmalydygyny we gurmalydygyny düşündirýär.

RHEL we CentOS ulgamyny işleýän LAMP (Linux, Apache, MySQL we PHP) sazlamasy bilen eýýäm işleýärsiňiz öýdýäris. Notok bolsa, iki operasiýa ulgamynyň LAMP bilen gurlandygyny görkezen makalalarymyzy okaň.

  1. CentOS 7 Minimal gurmak.
  2. CentOS 8 Minimal gurmak.

  1. RHEL we CentOS 7-de LAMP (Linux, Apache, MySQL, PHP) nädip gurmaly
  2. RHEL we CentOS 8-de Apache, MySQL/MariaDB we PHP-ni nädip gurmaly

Adaty tertipde mod_Geoip RHEL/CentOS resmi ammarynda elýeterli däl, şonuň üçin üçünji tarap EPEL ammaryny gurmaly we işletmeli.

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

Ulgamyňyzda EPEL ammary açylansoň, garaşlylyk paketleri bilen aşakdaky buýrugy işledip, mod_geoip gurup bilersiňiz.

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

Täzelenmek üçin iň täze Geo City we Country Maglumat bazasyny göçürip almak gowy pikir.

# 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

Modul gurlansoň, vi ýaly buýruk setir tekst redaktory bilen modulyň esasy konfigurasiýa faýlyny açyň we redaktirläň we aşakdaky bölekde görkezilişi ýaly modul serwerini işjeňleşdiriň.

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

GeoIPEnable setirini Off-den On-a düzüň. Şeýle hem, GeoIP maglumat bazasy faýlyna mutlak ýol goşýandygyňyza göz ýetiriň.

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

Üýtgeşmeleri görkezmek üçin Apache hyzmatyny täzeden açyň.

# systemctl restart httpd
OR
# service httpd restart

Şeýle-de bolsa, GeoIP modulynyň serwerini açmak maslahat berilmeýär. GeoIP modulyny diňe ýa-da bloklarynda işletmeli ýa-da hakykatdanam traffigi gönükdirmegi ýa-da blokirlemegi ýerine ýetirmeli.

Mod_geoip modulynyň Apache bilen dogry işleýändigini barlamak üçin, Apache kök katalogynyň (meselem/var/www/html) aşagynda testgeoip.php atly PHP faýly döretmeli.

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

Aşakdaky php koduny salyň.

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

Indi, web brauzeri (meselem http://localhost/testgeoip.php) ulanyp, faýly çagyrmaga synanyşyň. IP adresiňizi we ýurt maglumatlaryny alarsyňyz.

GeoIP maglumat bazasy her aýyň başynda täzelenýär. Şeýlelik bilen, GeoIP maglumat bazasyny täzeläp durmak gaty möhümdir. Maglumat bazasynyň iň soňky wersiýasyny göçürip almak üçin aşakdaky buýrugy ulanyň.

# 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

GeoIP maglumatlar bazasynyň iň soňky wersiýasyny her aý awtomatiki göçürip aljak kiçijik gabyk skriptini ýazdyk. Aşakdaky skriptleriň islendigini /etc/cron.monthly astynda goýuň.

# 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

Aşakdaky mysal kody ulanyjylary AS (Aziýa) bellän ýurt kodumyz esasynda ugrukdyrar. Şeýlelik bilen, ulanyjylary etrap kodlaryna esaslanyp gönükdirip bilersiňiz.

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]

Bu mysal, GeoIP-iň kesgitleýän ýurt kody esasynda ulanyjylary petiklär. Aşakdaky mysal AS (Aziýa) we ABŞ (ABŞ) ýurtlaryndan ulanyjylary petiklär.

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

Aşakdaky mysal diňe aşakda agzalan ýurtlaryň ulanyjylaryna rugsat berer.

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

Mod_geoip we ulanylyşy barada has giňişleýin maglumat üçin http://www.maxmind.com/app/mod_geoip tapyp bilersiňiz. Mod_geoip modulyny döretmekde kynçylyk çekýän bolsaňyz, teswirler arkaly bize habar bermegiňizi haýyş edýäris we dostlaryňyz bilen paýlaşmagy ýatdan çykarmaň.