Kako instalirati Mod_GeoIP za Apache u RHEL i CentOS


Mod_GeoIP je Apacheov modul koji se može koristiti za dobivanje zemljopisnog položaja IP adrese posjetitelja na Apacheov web poslužitelj. Ovaj vam modul omogućuje određivanje države, organizacije i mjesta posjetitelja. Posebno je korisno za posluživanje geografskih oglasa, ciljni sadržaj, borbu protiv neželjene pošte, otkrivanje prijevara, preusmjeravanje/blokiranje posjetitelja na temelju njihove zemlje i još mnogo toga.

GeoIP modul omogućuje administratorima sustava da preusmjeravaju ili blokiraju web promet prema geografskom položaju klijenta. Zemljopisni se položaj saznaje putem IP adrese klijenta.

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

  1. Besplatna verzija: U besplatnoj verziji baze podataka Geo City i Country dostupne su s 99,5% točnosti.
  2. Plaćena verzija: U plaćenoj verziji dobit ćete obje baze podataka s točnošću od 99,8% uz neke naprednije detalje 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 pomoću spremišta EPEL s uslužnim programom YUM upravitelja paketa.

Pretpostavljamo da već imate pokrenut RHEL i CentOS sustav s ispravnim postavkama LAMP (Linux, Apache, MySQL i PHP). Ako ne, pročitajte naše članke u kojima smo prikazali instalaciju oba operativna sustava s LAMP-om.

  1. Instalacija CentOS 7 Minimal.
  2. Instalacija CentOS 8 Minimal.

  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

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

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

Nakon što omogućite EPEL spremište na vašem sustavu, možete jednostavno instalirati mod_geoip pokretanjem sljedeće naredbe s njihovim paketima ovisnosti.

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

Dobra je ideja preuzeti najnoviju bazu podataka o Geo Cityju i zemljama kako biste bili u toku.

# 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

Nakon što je modul instaliran, otvorite i uredite glavnu konfiguracijsku datoteku modula s uređivačem teksta naredbenog retka kao što je vi i aktivirajte modul na cijelom poslužitelju, kao što je prikazano u nastavku.

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

Postavite liniju GeoIPEnable s Off na On. Također, obavezno dodajte apsolutni put u datoteku baze podataka GeoIP.

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

Ponovo pokrenite uslugu Apache da odražava promjene.

# systemctl restart httpd
OR
# service httpd restart

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

Da bismo testirali modul mod_geoip kako ispravno radi s Apacheom, moramo stvoriti PHP datoteku nazvanu testgeoip.php u korijenskom direktoriju Apache (npr./Var/www/html).

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

U njega umetnite 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 nazvati datoteku pomoću web preglednika (npr. Http: //localhost/testgeoip.php). Dobit ćete svoju IP adresu i podatke o državi.

Baza podataka GeoIP ažurira se početkom svakog mjeseca. Dakle, vrlo je važno ažurirati GeoIP bazu podataka. Da biste preuzeli najnoviju verziju baze podataka, upotrijebite 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

Napisali smo malu skriptu ljuske koja će automatski preuzeti najnoviju verziju baze podataka GeoIP svakog mjeseca. Samo stavite bilo koju od sljedećih skripti 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

Slijedeći primjer koda preusmjerit će korisnike na temelju koda države koji smo postavili na AS (Azija). Na ovaj način možete preusmjeriti sve korisnike na temelju njihovih kodova.

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]

Ovaj će primjer blokirati korisnike na temelju pozivnog broja države koji postavlja GeoIP. Primjer u nastavku blokirat će korisnike iz zemalja AS (Azija) i SAD-a (Sjedinjene 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

Ovaj donji primjer omogućit će samo korisnike iz dolje spomenutih 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 bilo kakvih problema s postavljanjem mod_geoip modula, javite nam putem komentara i ne zaboravite ga podijeliti sa svojim prijateljima.