Kako namestiti Mod_GeoIP za Apache v RHEL in CentOS


Mod_GeoIP je modul Apache, ki ga lahko uporabite za vnos geografske lokacije naslova IP obiskovalca v spletni strežnik Apache. Ta modul vam omogoča, da določite državo, organizacijo in lokacijo obiskovalca. To je še posebej uporabno za prikazovanje geografskih oglasov, ciljno vsebino, boj proti vsiljeni pošti, odkrivanje goljufij, preusmerjanje/blokiranje obiskovalcev glede na njihovo državo in še veliko več.

Modul GeoIP sistemskim skrbnikom omogoča preusmerjanje ali blokiranje spletnega prometa glede na geografsko lokacijo odjemalca. Geografska lokacija se uči prek naslova IP odjemalca.

Mod_GeoIP ima dve različici, ena je brezplačna, druga pa plačljiva in uporablja baze podatkov MaxMind GeoIP/GeoCity.

  1. Brezplačna različica: V brezplačni različici sta zbirki Geo City in Country na voljo z 99,5% natančnostjo.
  2. Plačljiva različica: V plačljivi različici boste dobili obe bazi z 99,8 -odstotno natančnostjo z nekaj naprednejšimi podrobnostmi o naslovu IP.

Če želite preveriti več razlik med brezplačno in plačljivo različico, obiščite Maxmind.com.

Ta članek pojasnjuje, kako nastaviti in namestiti modul Mod_GeoIP za Apache v RHEL in CentOS s pomočjo skladišča EPEL s pripomočkom za upravljanje paketov YUM.

Predvidevamo, da že uporabljate sistem RHEL in CentOS z delujočo nastavitvijo LAMP (Linux, Apache, MySQL in PHP). Če ne, potem preberite naše članke, kjer smo pokazali namestitev obeh operacijskih sistemov z LAMP.

  1. Namestitev CentOS 7 Minimal.
  2. Namestitev CentOS 8 Minimal.

  1. Kako namestiti LAMP (Linux, Apache, MySQL, PHP) na RHEL in CentOS 7
  2. Kako namestiti Apache, MySQL/MariaDB in PHP na RHEL in CentOS 8

Mod_Geoip privzeto ni na voljo v uradnem skladišču RHEL/CentOS, zato moramo namestiti in omogočiti skladišče EPEL tretjih oseb.

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

Ko v svojem sistemu omogočite skladišče EPEL, lahko preprosto namestite mod_geoip tako, da zaženete naslednji ukaz z njihovimi paketi odvisnosti.

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

Dobro je prenesti najnovejšo podatkovno zbirko Geo City in Country, da boste vedno na tekočem.

# 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

Ko je modul nameščen, odprite in uredite glavno konfiguracijsko datoteko modula z urejevalnikom besedila ukazne vrstice, kot je vi, in aktivirajte modul v celotnem strežniku, kot je prikazano v spodnjem izvlečku.

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

Vrstico GeoIPEnable nastavite iz Izklopljeno na Vklopljeno. Poskrbite tudi, da v datoteko zbirke podatkov GeoIP dodate absolutno pot.

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

Znova zaženite storitev Apache, da odraža spremembe.

# systemctl restart httpd
OR
# service httpd restart

Vendar ni priporočljivo, da vklopite modul GeoIP za strežnik. Modul GeoIP morate omogočiti samo v blokih ali , kjer bi dejansko izvedli preusmeritev ali blokiranje prometa.

Če želite preveriti, ali mod_geoip pravilno deluje z Apacheom, moramo v korenskem imeniku Apache ustvariti datoteko PHP, imenovano testgeoip.php (npr./Var/www/html).

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

Vanj vstavite naslednji del kode php.

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

Zdaj poskusite poklicati datoteko s spletnim brskalnikom (npr. Http: //localhost/testgeoip.php). Dobili boste svoj naslov IP in podatke o državi.

Baza podatkov GeoIP se posodablja vsak mesec. Zato je zelo pomembno, da je baza podatkov GeoIP posodobljena. Za prenos najnovejše različice zbirke podatkov uporabite naslednji ukaz.

# 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

Napisali smo majhen skript lupine, ki bo vsak mesec samodejno prenesel najnovejšo različico zbirke podatkov GeoIP. Eno od naslednjih skript preprosto postavite pod /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

Spodnji primer kode bo uporabnike preusmeril glede na kodo države, ki smo jo nastavili na AS (Azija). Na ta način lahko preusmerite vse uporabnike na podlagi njihove kode okrožja.

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]

Ta primer bo blokiral uporabnike glede na kodo države, ki jo nastavi GeoIP. Spodnji primer bo blokiral uporabnike iz držav AS (Azija) in ZDA (ZDA).

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

Ta spodnji primer bo dovoljeval samo uporabnikom iz spodnjih držav.

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

Več informacij o mod_geoip in njegovi uporabi najdete na http://www.maxmind.com/app/mod_geoip. Če imate težave pri nastavitvi mod_geoip modula, nam to sporočite preko komentarjev in ga ne pozabite deliti s prijatelji.