Kako instalirati Mod_GeoIP za Apache u RHEL i CentOS


Mod_GeoIP je Apache modul koji se može koristiti za dobivanje geografske lokacije IP adrese posjetitelja na Apache web server. Ovaj modul vam omogućava da odredite zemlju, organizaciju i lokaciju posjetitelja. Posebno je korisno za Posluživanje geografskih oglasa, Ciljani sadržaj, Borba protiv neželjene pošte, Otkrivanje prijevara, Preusmjeravanje /Blokiranje posjetitelja na osnovu njihove zemlje i još mnogo toga.

GeoIP modul omogućava administratorima sistema da preusmjere ili blokiraju web promet prema geografskoj lokaciji klijenta. Geografska lokacija se saznaje putem IP adrese klijenta.

Mod_GeoIP ima dvije različite verzije, jedna je Besplatna, a druga Plaćena i koristi MaxMind GeoIP/GeoCity baze podataka.

  1. Besplatna verzija: U besplatnoj verziji, Geo City i Country baze podataka su dostupne sa 99,5% preciznošću.
  2. Plaćena verzija: U plaćenoj verziji dobit ćete obje baze podataka sa 99,8% preciznošću sa nekim naprednijim detaljima o IP adresi.

Ako želite provjeriti više razlika između Besplatne i Plaćene verzije, posjetite Maxmind.com.

Ovaj članak objašnjava kako postaviti i instalirati Mod_GeoIP modul za Apache u RHEL i CentOS koristeći EPEL spremište sa uslužnim programom za upravljanje paketima YUM.

Pretpostavljamo da već imate pokrenut sistem RHEL i CentOS sa ispravnim LAMPOM (Linux, Apache , MySQL, i PHP). Ako ne, onda pročitajte naše članke u kojima smo prikazali instalaciju oba operativna sistema sa LAMPOM.

Instalacija RHEL/CentOS-a
  1. Instalacija RHEL 7 i CentOS 7 Minimal.
  2. Instalacija RHEL 8 i CentOS 8 Minimal.
Postavljanje LAMP-a na RHEL/CentOS
  1. Kako instalirati LAMP (Linux, Apache, MySQL, PHP) na RHEL i CentOS 7
  2. Kako instalirati Apache, MySQL/MariaDB i PHP na RHEL i CentOS 8

Omogućite EPEL spremište u RHEL-u i CentOS-u

Prema zadanim postavkama mod_Geoip nije dostupan pod RHEL/CentOS službenim spremištem, tako da moramo instalirati i omogućiti spremište EPEL treće strane.

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

Instalirajte Mod_GeoIP u RHEL i CentOS

Nakon što omogućite EPEL spremište na vašem sistemu, možete jednostavno instalirati mod_geoip tako što ćete pokrenuti sljedeću naredbu s njihovim paketima zavisnosti.

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

Preuzmite najnoviju geografsku bazu podataka o gradovima i zemljama

Dobra je ideja da preuzmete najnoviju Geo City i Bazu podataka o zemljama kako biste bili ažurirani.

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

Omogućite Mod_GeoIP u Apacheu

Nakon što je modul instaliran, otvorite i uredite glavnu konfiguracijsku datoteku modula, pomoću uređivača teksta na komandnoj liniji kao što je vi, i aktivirajte modul na cijelom serveru, kao što je prikazano u donjem izvodu.

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

Postavite liniju GeoIPEnable sa Isključeno na Uključeno. Također, provjerite jeste li dodali apsolutnu putanju u datoteku GeoIP baze podataka.

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

Ponovo pokrenite Apache uslugu da odrazite promjene.

systemctl restart httpd
OR
service httpd restart

Međutim, ne preporučuje se uključivanje GeoIP modula na cijelom serveru. GeoIP modul biste trebali omogućiti samo u blokovima ili gdje biste zapravo izvršili preusmjeravanje ili blokiranje prometa.

Testiranje Mod_GeoIP modula

Da testiramo da modul mod_geoip radi ispravno sa Apacheom, moramo kreirati PHP datoteku pod nazivom testgeoip.php pod Apache korijenski direktorij (npr. /var/www/html).

vi /var/www/html/testgeoip.php

U njega ubacite sljedeći dio php koda.

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

Sada pokušajte pozvati datoteku pomoću web pretraživača (npr. http://localhost/testgeoip.php). Dobit ćete svoju IP adresu i detalje o zemlji.

Ažuriranje GeoIP baze podataka

GeoIP baza podataka se ažurira početkom svakog mjeseca. Dakle, veoma je važno održavati GeoIP bazu podataka ažurnom. Za preuzimanje najnovije verzije baze podataka koristite sljedeću naredbu.

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

Automatsko ažuriranje GeoIP baze podataka

Napisali smo malu shell skriptu koja će automatski preuzimati najnoviju verziju GeoIP baze podataka svakog mjeseca. Samo postavite bilo koju od sljedećih skripti pod /etc/cron.monthly.

Skripta 1
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
Skripta 2
#!/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

Preusmjeravanje korisnika na osnovu zemlje

Primjer koda u nastavku će preusmjeriti korisnike na osnovu koda zemlje koji smo postavili na AS (Azija). Na ovaj način možete preusmjeriti sve korisnike na osnovu njihovog koda županije.

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]

Blokiranje korisnika na osnovu zemlje

Ovaj primjer će blokirati korisnike na osnovu koda zemlje koji GeoIP postavi. Primjer u nastavku će blokirati korisnike iz zemalja AS (Azija) i SAD (Sjedinjene Američke Države).

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

Omogućavanje korisnika na osnovu zemlje

Ovaj donji primjer će dozvoliti samo korisnike iz niže navedenih zemalja.

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

Za više informacija o mod_geoip i njegovoj upotrebi možete pronaći na http://www.maxmind.com/app/mod_geoip. Ako imate problema s postavljanjem mod_geoip modula, javite nam putem komentara i ne zaboravite to podijeliti sa svojim prijateljima.