ค้นหาเว็บไซต์

วิธีการติดตั้ง Mod_GeoIP สำหรับ Apache ใน RHEL และ CentOS


Mod_GeoIP เป็นโมดูล Apache ที่สามารถใช้เพื่อรับตำแหน่งทางภูมิศาสตร์ของที่อยู่ IP ของผู้เยี่ยมชมไปยังเว็บเซิร์ฟเวอร์ Apache โมดูลนี้ช่วยให้คุณสามารถระบุประเทศ องค์กร และสถานที่ของผู้เข้าชม มีประโยชน์อย่างยิ่งสำหรับ การแสดงโฆษณาทางภูมิศาสตร์, เนื้อหาเป้าหมาย, การต่อสู้กับสแปม, การตรวจจับการฉ้อโกง, การเปลี่ยนเส้นทาง /ปิดกั้นผู้เยี่ยมชมตามประเทศของพวกเขาและอีกมากมาย

โมดูล GeoIP ช่วยให้ผู้ดูแลระบบสามารถเปลี่ยนเส้นทางหรือบล็อกการรับส่งข้อมูลเว็บตามตำแหน่งทางภูมิศาสตร์ของลูกค้า เรียนรู้ตำแหน่งทางภูมิศาสตร์ผ่านที่อยู่ IP ของลูกค้า

Mod_GeoIP มีสองเวอร์ชันที่แตกต่างกัน เวอร์ชันแรก ฟรี และอีกเวอร์ชัน ชำระเงิน และใช้ MaxMind GeoIP/GeoCity ฐานข้อมูล

  1. เวอร์ชันฟรี: ในเวอร์ชันฟรี Geo City และ ฐานข้อมูลประเทศ มีความแม่นยำ 99.5%
  2. เวอร์ชันที่ต้องชำระเงิน: ในเวอร์ชันที่ต้องชำระเงิน คุณจะได้รับฐานข้อมูลทั้งสองที่มีความแม่นยำ 99.8% พร้อมด้วยรายละเอียดขั้นสูงเพิ่มเติมเกี่ยวกับที่อยู่ IP

หากคุณต้องการตรวจสอบความแตกต่างเพิ่มเติมระหว่างเวอร์ชัน ฟรี และ ชำระเงิน โปรดไปที่ Maxmind.com

บทความนี้จะอธิบายวิธีการตั้งค่าและติดตั้งโมดูล Mod_GeoIP สำหรับ Apache ใน RHEL และ CentOS ใช้พื้นที่เก็บข้อมูล EPEL พร้อมยูทิลิตีตัวจัดการแพ็คเกจ YUM

เราถือว่าคุณใช้งานระบบ RHEL และ CentOS พร้อมด้วย LAMP (Linux, Apache ที่ใช้งานได้อยู่แล้ว , MySQL, และ PHP) การตั้งค่า ถ้าไม่เช่นนั้น โปรดอ่านบทความของเราที่เราได้แสดงการติดตั้งระบบปฏิบัติการทั้งสองด้วย LAMP

การติดตั้ง RHEL/CentOS
  1. การติดตั้ง RHEL 7 และ CentOS 7 Minimal
  2. การติดตั้ง RHEL 8 และ CentOS 8 Minimal
การตั้งค่า LAMP บน RHEL/CentOS
  1. วิธีติดตั้ง LAMP (Linux, Apache, MySQL, PHP) บน RHEL และ CentOS 7
  2. วิธีติดตั้ง Apache, MySQL/MariaDB และ PHP บน RHEL และ CentOS 8

เปิดใช้งานพื้นที่เก็บข้อมูล EPEL ใน RHEL และ CentOS

ตามค่าเริ่มต้น mod_Geoip จะไม่สามารถใช้ได้ภายใต้พื้นที่เก็บข้อมูลอย่างเป็นทางการของ RHEL/CentOS ดังนั้นเราจึงจำเป็นต้องติดตั้งและเปิดใช้งานพื้นที่เก็บข้อมูล EPEL ของบุคคลที่สาม

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

ติดตั้ง Mod_GeoIP ใน RHEL และ CentOS

เมื่อคุณเปิดใช้งานพื้นที่เก็บข้อมูล EPEL บนระบบของคุณแล้ว คุณสามารถติดตั้ง mod_geoip ได้โดยการรันคำสั่งต่อไปนี้พร้อมกับแพ็คเกจการขึ้นต่อกัน

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

ดาวน์โหลดฐานข้อมูลทางภูมิศาสตร์เมืองและประเทศล่าสุด

เป็นความคิดที่ดีที่จะดาวน์โหลด Geo City และ ฐานข้อมูลประเทศ ล่าสุดเพื่อรับข้อมูลอัปเดต

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

เปิดใช้งาน Mod_GeoIP ใน Apache

หลังจากติดตั้งโมดูลแล้ว ให้เปิดและแก้ไขไฟล์การกำหนดค่าหลักของโมดูลด้วยโปรแกรมแก้ไขข้อความบรรทัดคำสั่ง เช่น vi และเปิดใช้งานโมดูลทั้งเซิร์ฟเวอร์ ดังที่แสดงในข้อความที่ตัดตอนมาด้านล่าง

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

ตั้งค่าบรรทัด GeoIPEnable จาก ปิด เป็น เปิด นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มเส้นทางที่แน่นอนให้กับไฟล์ฐานข้อมูล GeoIP

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

เริ่มบริการ Apache ใหม่เพื่อให้สอดคล้องกับการเปลี่ยนแปลง

systemctl restart httpd
OR
service httpd restart

อย่างไรก็ตาม ไม่แนะนำให้เปิดโมดูล GeoIP ทั่วทั้งเซิร์ฟเวอร์ คุณควรเปิดใช้งานโมดูล GeoIP เฉพาะในบล็อก หรือ ซึ่งคุณจะดำเนินการเปลี่ยนเส้นทางหรือบล็อกการรับส่งข้อมูลจริงๆ

การทดสอบโมดูล Mod_GeoIP

เพื่อทดสอบว่าโมดูล mod_geoip ทำงานอย่างถูกต้องกับ Apache เราจำเป็นต้องสร้างไฟล์ PHP ชื่อ testgeoip.php ใต้ Apache ไดเรกทอรีราก (เช่น /var/www/html)

vi /var/www/html/testgeoip.php

ใส่โค้ด 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>

ตอนนี้ ให้ลองเรียกไฟล์โดยใช้เว็บเบราว์เซอร์ (เช่น http://localhost/testgeoip.php) คุณจะได้รับที่อยู่ IP และรายละเอียดประเทศ

กำลังอัปเดตฐานข้อมูล GeoIP

ฐานข้อมูล GeoIP ได้รับการอัพเดตทุกต้นเดือน ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องรักษาฐานข้อมูล GeoIP ให้ทันสมัยอยู่เสมอ หากต้องการดาวน์โหลดฐานข้อมูลเวอร์ชันล่าสุดให้ใช้คำสั่งต่อไปนี้

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

อัพเดตฐานข้อมูล GeoIP อัตโนมัติ

เราได้เขียนเชลล์สคริปต์ขนาดเล็กที่จะดาวน์โหลดฐานข้อมูล GeoIP เวอร์ชันล่าสุดทุกเดือนโดยอัตโนมัติ เพียงวางสคริปต์ต่อไปนี้ไว้ใต้ /etc/cron.monthly

สคริปต์ 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
สคริปต์ 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

การเปลี่ยนเส้นทางผู้ใช้ตามประเทศ

โค้ดตัวอย่างด้านล่างนี้จะเปลี่ยนเส้นทางผู้ใช้ตามรหัสประเทศที่เราตั้งค่าเป็น AS (Asia) วิธีนี้คุณสามารถเปลี่ยนเส้นทางผู้ใช้ตามรหัสเคาน์ตีของตนได้

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]

การบล็อกผู้ใช้ตามประเทศ

ตัวอย่างนี้จะบล็อกผู้ใช้ตามรหัสประเทศที่ GeoIP ตั้งค่าไว้ ตัวอย่างด้านล่างจะบล็อกผู้ใช้จากประเทศ AS (เอเชีย) และ สหรัฐอเมริกา (สหรัฐอเมริกา)

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

อนุญาตผู้ใช้ตามประเทศ

ตัวอย่างด้านล่างนี้จะอนุญาตเฉพาะผู้ใช้จากประเทศที่กล่าวถึงด้านล่างเท่านั้น

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 และการใช้งานสามารถดูได้ที่ http://www.maxmind.com/app/mod_geoip หากคุณประสบปัญหาในการตั้งค่าโมดูล mod_geoip โปรดแจ้งให้เราทราบผ่านความคิดเห็น และอย่าลืมแบ่งปันกับเพื่อนของคุณ