Cara Install Mod_GeoIP untuk Apache di RHEL dan CentOS


Mod_GeoIP adalah modul Apache yang dapat digunakan untuk memasukkan lokasi geografis alamat IP pengunjung ke server web Apache. Modul ini memungkinkan Anda menentukan negara, organisasi, dan lokasi pengunjung. Hal ini sangat berguna untuk Penayangan Iklan Geo, Konten Target, Pemberantasan Spam, Deteksi Penipuan, Pengalihan /Memblokir pengunjung berdasarkan negaranya dan masih banyak lagi.

Modul GeoIP memungkinkan administrator sistem untuk mengarahkan atau memblokir lalu lintas web sesuai dengan lokasi geografis klien. Lokasi geografis dipelajari melalui alamat IP klien.

Mod_GeoIP memiliki dua versi berbeda, satu Gratis dan satu lagi Berbayar dan menggunakan MaxMind GeoIP/GeoCity basis data.

  1. Versi Gratis: Dalam versi Gratis, basis data Geo City dan Country tersedia dengan akurasi 99,5%.
  2. Versi Berbayar: Dalam versi Berbayar, Anda akan mendapatkan kedua database dengan akurasi 99,8% dengan beberapa detail lebih lanjut tentang alamat IP.

Jika Anda ingin melihat lebih banyak perbedaan antara versi Gratis dan Berbayar, silakan kunjungi Maxmind.com.

Artikel ini menjelaskan cara menyiapkan dan menginstal modul Mod_GeoIP untuk Apache di RHEL dan CentOS menggunakan repositori EPEL dengan utilitas manajer paket YUM.

Kami berasumsi bahwa Anda sudah menjalankan sistem RHEL dan CentOS dengan LAMP (Linux, Apache) yang berfungsi Penyiapan , MySQL, dan PHP). Jika belum, baca artikel kami yang menunjukkan pemasangan kedua sistem operasi dengan LAMP.

Instalasi RHEL/CentOS
  1. Instalasi RHEL 7 dan CentOS 7 Minimal.
  2. Instalasi RHEL 8 dan CentOS 8 Minimal.
Pengaturan LAMPU di RHEL/CentOS
  1. Cara Install LAMP (Linux, Apache, MySQL, PHP) di RHEL dan CentOS 7
  2. Cara Install Apache, MySQL/MariaDB, dan PHP di RHEL dan CentOS 8

Aktifkan Repositori EPEL di RHEL dan CentOS

Secara default mod_Geoip tidak tersedia di repositori resmi RHEL/CentOS, jadi kita perlu menginstal dan mengaktifkan repositori EPEL pihak ketiga.

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

Instal Mod_GeoIP di RHEL dan CentOS

Setelah repositori EPEL diaktifkan di sistem Anda, Anda cukup menginstal mod_geoip dengan menjalankan perintah berikut bersama paket ketergantungannya.

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

Unduh Database Kota dan Negara Geo terbaru

Sebaiknya unduh Geo City dan Country Database terbaru agar selalu mendapatkan informasi terbaru.

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

Aktifkan Mod_GeoIP di Apache

Setelah modul diinstal, buka dan edit file konfigurasi utama modul, dengan editor teks baris perintah seperti vi, dan aktifkan modul di seluruh server, seperti yang diilustrasikan dalam cuplikan di bawah.

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

Atur garis GeoIPEnable dari Mati ke Aktif. Selain itu, pastikan Anda menambahkan jalur absolut ke file database GeoIP.

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

Mulai ulang layanan Apache untuk mencerminkan perubahan.

systemctl restart httpd
OR
service httpd restart

Namun, tidak disarankan untuk mengaktifkan modul GeoIP di seluruh server. Anda harus mengaktifkan modul GeoIP hanya di blok atau tempat Anda sebenarnya akan melakukan pengalihan atau pemblokiran lalu lintas.

Menguji Modul Mod_GeoIP

Untuk menguji modul mod_geoip berfungsi dengan benar dengan Apache, kita perlu membuat file PHP bernama testgeoip.php di bawah Apache direktori root (misalnya /var/www/html).

vi /var/www/html/testgeoip.php

Masukkan potongan kode php berikut ke dalamnya.

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

Sekarang, coba panggil file tersebut menggunakan browser web (misalnya http://localhost/testgeoip.php). Anda akan mendapatkan alamat IP dan detail Negara Anda.

Memperbarui Basis Data GeoIP

Basis data GeoIP diperbarui setiap awal bulan. Jadi, sangat penting untuk selalu memperbarui database GeoIP. Untuk mengunduh database versi terbaru gunakan perintah berikut.

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

Pembaruan Basis Data GeoIP Otomatis

Kami telah menulis skrip shell kecil yang secara otomatis akan mengunduh database GeoIP versi terbaru setiap bulan. Tempatkan saja salah satu skrip berikut di bawah /etc/cron.monthly.

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

Mengarahkan Pengguna berdasarkan Negara

Contoh kode di bawah ini akan mengarahkan pengguna berdasarkan kode negara yang kami tetapkan ke AS (Asia). Dengan cara ini Anda dapat mengarahkan pengguna mana pun berdasarkan kode wilayah mereka.

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]

Memblokir Pengguna berdasarkan Negara

Contoh ini akan memblokir pengguna berdasarkan kode negara yang ditetapkan GeoIP. Contoh di bawah ini akan memblokir pengguna dari negara AS (Asia) dan AS (Amerika Serikat).

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

Mengizinkan Pengguna berdasarkan Negara

Contoh di bawah ini hanya akan mengizinkan pengguna dari negara-negara yang disebutkan di bawah.

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

Untuk informasi lebih lanjut tentang mod_geoip dan penggunaannya dapat ditemukan di http://www.maxmind.com/app/mod_geoip. Jika Anda mengalami kesulitan dalam menyiapkan modul mod_geoip, beri tahu kami melalui komentar dan jangan lupa untuk membagikannya kepada teman-teman Anda.