วิธีการติดตั้ง Mod_GeoIP สำหรับ Apache ใน RHEL และ CentOS
Mod_GeoIP เป็นโมดูล Apache ที่สามารถใช้เพื่อรับตำแหน่งทางภูมิศาสตร์ของที่อยู่ IP ของผู้เยี่ยมชมไปยังเว็บเซิร์ฟเวอร์ Apache โมดูลนี้ช่วยให้คุณสามารถระบุประเทศ องค์กร และสถานที่ของผู้เข้าชม มีประโยชน์อย่างยิ่งสำหรับ การแสดงโฆษณาทางภูมิศาสตร์, เนื้อหาเป้าหมาย, การต่อสู้กับสแปม, การตรวจจับการฉ้อโกง, การเปลี่ยนเส้นทาง /ปิดกั้นผู้เยี่ยมชมตามประเทศของพวกเขาและอีกมากมาย
โมดูล GeoIP ช่วยให้ผู้ดูแลระบบสามารถเปลี่ยนเส้นทางหรือบล็อกการรับส่งข้อมูลเว็บตามตำแหน่งทางภูมิศาสตร์ของลูกค้า เรียนรู้ตำแหน่งทางภูมิศาสตร์ผ่านที่อยู่ IP ของลูกค้า
Mod_GeoIP มีสองเวอร์ชันที่แตกต่างกัน เวอร์ชันแรก ฟรี และอีกเวอร์ชัน ชำระเงิน และใช้ MaxMind GeoIP/GeoCity ฐานข้อมูล
- เวอร์ชันฟรี: ในเวอร์ชันฟรี Geo City และ ฐานข้อมูลประเทศ มีความแม่นยำ 99.5%
- เวอร์ชันที่ต้องชำระเงิน: ในเวอร์ชันที่ต้องชำระเงิน คุณจะได้รับฐานข้อมูลทั้งสองที่มีความแม่นยำ 99.8% พร้อมด้วยรายละเอียดขั้นสูงเพิ่มเติมเกี่ยวกับที่อยู่ IP
หากคุณต้องการตรวจสอบความแตกต่างเพิ่มเติมระหว่างเวอร์ชัน ฟรี และ ชำระเงิน โปรดไปที่ Maxmind.com
บทความนี้จะอธิบายวิธีการตั้งค่าและติดตั้งโมดูล Mod_GeoIP สำหรับ Apache ใน RHEL และ CentOS ใช้พื้นที่เก็บข้อมูล EPEL พร้อมยูทิลิตีตัวจัดการแพ็คเกจ YUM
เราถือว่าคุณใช้งานระบบ RHEL และ CentOS พร้อมด้วย LAMP (Linux, Apache ที่ใช้งานได้อยู่แล้ว , MySQL, และ PHP) การตั้งค่า ถ้าไม่เช่นนั้น โปรดอ่านบทความของเราที่เราได้แสดงการติดตั้งระบบปฏิบัติการทั้งสองด้วย LAMP
การติดตั้ง RHEL/CentOS
- การติดตั้ง RHEL 7 และ CentOS 7 Minimal
- การติดตั้ง RHEL 8 และ CentOS 8 Minimal
การตั้งค่า LAMP บน RHEL/CentOS
- วิธีติดตั้ง LAMP (Linux, Apache, MySQL, PHP) บน RHEL และ CentOS 7
- วิธีติดตั้ง 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 โปรดแจ้งให้เราทราบผ่านความคิดเห็น และอย่าลืมแบ่งปันกับเพื่อนของคุณ