RHEL ve CentOS'ta Apache için Mod_GeoIP Nasıl Kurulur


Mod_GeoIP, ziyaretçinin IP adresinin coğrafi konumunu Apache web sunucusuna almak için kullanılabilecek bir Apache modülüdür. Bu modül, ziyaretçinin ülkesini, kuruluşunu ve konumunu belirlemenize olanak tanır. Özellikle Coğrafi Reklam Sunma, Hedef İçerik, Spam ile Mücadele, Sahtekarlık Tespiti, Yönlendirme için kullanışlıdır. Ziyaretçileri ülkelerine göre /engelleme ve çok daha fazlası.

GeoIP modülü, sistem yöneticilerinin web trafiğini müşterinin coğrafi konumuna göre yönlendirmesine veya engellemesine olanak tanır. Coğrafi konum, istemci IP adresi aracılığıyla öğrenilir.

Mod_GeoIP'in iki farklı sürümü vardır; biri Ücretsiz ve diğeri Ücretli olup MaxMind GeoIP/GeoCity'yi kullanır veritabanları.

  1. Ücretsiz Sürüm: Ücretsiz sürümde, Geo City ve Ülke veritabanları %99,5 doğrulukla mevcuttur.
  2. Ücretli Sürüm: Ücretli sürümde, her iki veritabanını da %99,8 doğrulukla ve IP adresiyle ilgili daha gelişmiş ayrıntılarla birlikte alacaksınız.

Ücretsiz ve Ücretli sürümler arasındaki diğer farkları görmek isterseniz lütfen Maxmind.com'u ziyaret edin.

Bu makalede Apache için Mod_GeoIP modülünün RHEL ve CentOS, YUM paket yöneticisi yardımcı programıyla EPEL deposunu kullanıyor.

Zaten çalışan bir LAMP (Linux, Apache) ile RHEL ve CentOS sistemini çalıştırdığınızı varsayıyoruz. , MySQL, ve PHP) kurulumu. Değilse, her iki işletim sisteminin de LAMP ile kurulumunu gösterdiğimiz makalelerimizi okuyun.

RHEL/CentOS Kurulumu
  1. RHEL 7 ve CentOS 7 Minimal kurulumu.
  2. RHEL 8 ve CentOS 8 Minimal kurulumu.
RHEL/CentOS'ta LAMP Kurulumu
  1. LAMP (Linux, Apache, MySQL, PHP) RHEL ve CentOS 7'ye Nasıl Kurulur
  2. RHEL ve CentOS 8'e Apache, MySQL/MariaDB ve PHP Nasıl Kurulur

RHEL ve CentOS'ta EPEL Deposunu Etkinleştirin

Varsayılan olarak mod_Geoip, RHEL/CentOS resmi deposunda mevcut değildir, bu nedenle üçüncü taraf EPEL deposunu kurup etkinleştirmemiz gerekir.

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

Mod_GeoIP'yi RHEL ve CentOS'a yükleyin

Sisteminizde EPEL deposunu etkinleştirdikten sonra, bağımlılık paketleriyle birlikte aşağıdaki komutu çalıştırarak mod_geoip'i kolayca kurabilirsiniz.

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

En son Geo Şehir ve Ülke Veritabanını indirin

Güncel kalmak için en son Geo City ve Ülke Veritabanı'nı indirmek iyi bir fikirdir.

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

Apache'de Mod_GeoIP'yi etkinleştirin

Modül yüklendikten sonra, modülün ana yapılandırma dosyasını vi gibi bir komut satırı metin düzenleyicisiyle açıp düzenleyin ve aşağıdaki alıntıda gösterildiği gibi modülü sunucu genelinde etkinleştirin.

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

GeoIPEnable satırını Kapalı'dan Açık'a ayarlayın. Ayrıca GeoIP veritabanı dosyasına mutlak yolu eklediğinizden emin olun.

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

Değişiklikleri yansıtmak için Apache hizmetini yeniden başlatın.

systemctl restart httpd
OR
service httpd restart

Ancak GeoIP modülünün sunucu genelinde açılması önerilmez. GeoIP modülünü yalnızca trafik yönlendirmesini veya engellemesini gerçekleştireceğiniz veya bloklarında etkinleştirmelisiniz.

Mod_GeoIP Modülünün Test Edilmesi

mod_geoip modülünün Apache ile doğru şekilde çalıştığını test etmek için Apache altında testgeoip.php adında bir PHP dosyası oluşturmamız gerekir. Strong> kök dizini (ör. /var/www/html).

vi /var/www/html/testgeoip.php

Aşağıdaki php kodunu ona ekleyin.

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

Şimdi dosyayı bir web tarayıcısı (ör. http://localhost/testgeoip.php) kullanarak çağırmayı deneyin. IP adresinizi ve Ülke ayrıntılarınızı alacaksınız.

GeoIP Veritabanını Güncelleme

GeoIP veritabanı her ayın başında güncellenmektedir. Bu nedenle GeoIP veritabanını güncel tutmak çok önemlidir. Veritabanının en son sürümünü indirmek için aşağıdaki komutu kullanın.

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

Otomatik GeoIP Veritabanı Güncellemesi

Her ay GeoIP veritabanının en son sürümünü otomatik olarak indirecek küçük bir kabuk betiği yazdık. Aşağıdaki komut dosyasından herhangi birini /etc/cron.monthly altına yerleştirmeniz yeterlidir.

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

Kullanıcıları Ülkeye Göre Yönlendirme

Aşağıdaki örnek kod, kullanıcıları AS (Asya) olarak ayarladığımız ülke koduna göre yönlendirecektir. Bu şekilde herhangi bir kullanıcıyı ilçe koduna göre yönlendirebilirsiniz.

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]

Ülkeye Göre Kullanıcıları Engelleme

Bu örnek, GeoIP'nin ayarladığı ülke koduna göre kullanıcıları engelleyecektir. Aşağıdaki örnek, AS (Asya) ve ABD (Amerika Birleşik Devletleri) ülkelerindeki kullanıcıları engelleyecektir.

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

Ülkeye Göre Kullanıcılara İzin Verme

Aşağıdaki örnek yalnızca aşağıda belirtilen ülkelerdeki kullanıcılara izin verecektir.

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 ve kullanımı hakkında daha fazla bilgi için http://www.maxmind.com/app/mod_geoip adresinde bulunabilir. Mod_geoip modülünü kurarken sorun yaşıyorsanız lütfen yorum yoluyla bize bildirin ve lütfen arkadaşlarınızla paylaşmayı unutmayın.