Kā instalēt Mod_GeoIP Apache RHEL un CentOS


Mod_GeoIP ir Apache modulis, ko var izmantot, lai Apache tīmekļa serverī iegūtu apmeklētāja IP adreses ģeogrāfisko atrašanās vietu. Šis modulis ļauj noteikt apmeklētāja valsti, organizāciju un atrašanās vietu. Tas ir īpaši noderīgi ģeogrāfisko reklāmu rādīšanai, mērķa saturam, cīņai pret surogātpastu, krāpšanas atklāšanai, apmeklētāju novirzīšanai/bloķēšanai, pamatojoties uz viņu valsti, un daudz ko citu.

GeoIP modulis ļauj sistēmas administratoriem novirzīt vai bloķēt tīmekļa trafiku atbilstoši klienta ģeogrāfiskajai atrašanās vietai. Ģeogrāfisko atrašanās vietu uzzina, izmantojot klienta IP adresi.

Mod_GeoIP ir divas dažādas versijas, viena ir bezmaksas, bet otra ir apmaksāta, un tajā tiek izmantotas MaxMind GeoIP/GeoCity datu bāzes.

  1. Bezmaksas versija: bezmaksas versijā Geo City un Country datu bāzes ir pieejamas ar 99,5% precizitāti.
  2. Apmaksātā versija: Apmaksātajā versijā abas datu bāzes iegūsit ar 99,8% precizitāti, izmantojot detalizētāku informāciju par IP adresi.

Ja vēlaties uzzināt vairāk atšķirību starp bezmaksas un maksas versiju, lūdzu, apmeklējiet vietni Maxmind.com.

Šajā rakstā ir paskaidrots, kā iestatīt un instalēt Mod_GeoIP moduli Apache RHEL un CentOS, izmantojot EPEL krātuvi ar YUM pakotņu pārvaldnieka utilītu.

Mēs pieņemam, ka jums jau darbojas RHEL un CentOS sistēma ar darbojošos LAMP (Linux, Apache, MySQL un PHP) iestatījumu. Ja nē, tad izlasiet mūsu rakstus, kur esam parādījuši abu operētājsistēmu instalēšanu ar LAMP.

  1. CentOS 7 Minimal instalēšana.
  2. CentOS 8 Minimal instalēšana.

  1. Kā instalēt LAMP (Linux, Apache, MySQL, PHP) RHEL un CentOS 7
  2. Kā RHEL un CentOS 8 instalēt Apache, MySQL/MariaDB un PHP

Pēc noklusējuma mod_Geoip nav pieejams RHEL/CentOS oficiālajā repozitorijā, tāpēc mums jāinstalē un jāiespējo trešās puses EPEL repozitorijs.

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

Kad esat iespējojis EPEL repozitoriju savā sistēmā, varat vienkārši instalēt mod_geoip, izpildot šādu komandu ar viņu atkarības pakotnēm.

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

Lai saglabātu jaunāko informāciju, ieteicams lejupielādēt jaunāko ģeogrāfisko pilsētu un valstu datu bāzi.

# 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

Pēc moduļa instalēšanas atveriet un rediģējiet moduļa galveno konfigurācijas failu ar komandrindas teksta redaktoru, piemēram, vi, un aktivizējiet moduli visā serverī, kā parādīts zemāk esošajā fragmentā.

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

Iestatiet līniju GeoIPEnable no Off uz On. Pārliecinieties, vai esat pievienojis absolūto ceļu GeoIP datu bāzes failam.

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

Restartējiet Apache pakalpojumu, lai atspoguļotu izmaiņas.

# systemctl restart httpd
OR
# service httpd restart

Tomēr nav ieteicams GeoIP moduli ieslēgt visā serverī. GeoIP modulis ir jāiespējo tikai blokos vai , kur faktiski veicat datplūsmas novirzīšanu vai bloķēšanu.

Lai pārbaudītu, vai mod_geoip modulis darbojas pareizi ar Apache, mums Apache saknes direktorijā jāizveido PHP fails ar nosaukumu testgeoip.php (piemēram,/var/www/html).

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

Ievietojiet tajā PHP koda daļu.

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

Tagad mēģiniet izsaukt failu, izmantojot tīmekļa pārlūkprogrammu (piemēram, http://localhost/testgeoip.php). Jūs saņemsiet savu IP adresi un informāciju par valsti.

GeoIP datu bāze tiek atjaunināta katra mēneša sākumā. Tāpēc ir ļoti svarīgi atjaunināt GeoIP datu bāzi. Lai lejupielādētu jaunāko datu bāzes versiju, izmantojiet šo komandu.

# 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

Mēs esam uzrakstījuši nelielu apvalka skriptu, kas katru mēnesi automātiski lejupielādēs jaunāko GeoIP datu bāzes versiju. Vienkārši ievietojiet jebkuru no šiem skriptiem zem /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

Šis koda piemērs novirzīs lietotājus, pamatojoties uz valsts kodu, kuru esam iestatījuši uz AS (Āzija). Tādā veidā jūs varat novirzīt visus lietotājus, pamatojoties uz viņu apgabala kodu.

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 piemērs bloķēs lietotājus, pamatojoties uz GeoIP iestatīto valsts kodu. Šis piemērs bloķēs lietotājus no AS (Āzija) un ASV (Amerikas Savienotās Valstis) valstīm.

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 zemāk sniegtais piemērs ļaus lietotājiem tikai no zemāk minētajām valstīm.

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

Plašāku informāciju par mod_geoip un tā lietošanu var atrast vietnē http://www.maxmind.com/app/mod_geoip. Ja jums ir kādas problēmas ar mod_geoip moduļa iestatīšanu, lūdzu, informējiet mūs par to, izmantojot komentārus, un, lūdzu, neaizmirstiet to kopīgot ar draugiem.