Jak zainstalować Mod_GeoIP dla Apache w RHEL i CentOS
Mod_GeoIP to moduł Apache, którego można użyć do pobrania lokalizacji geograficznej adresu IP odwiedzającego na serwer WWW Apache. Moduł ten pozwala określić kraj, organizację i lokalizację odwiedzającego. Jest to szczególnie przydatne do wyświetlania reklam geograficznych, treści docelowej, zwalczania spamu, wykrywania oszustw, przekierowywania /Blokowanie gości na podstawie ich kraju i nie tylko.
Moduł GeoIP umożliwia administratorom systemu przekierowywanie lub blokowanie ruchu sieciowego w zależności od lokalizacji geograficznej klienta. Położenie geograficzne jest poznawane poprzez adres IP klienta.
Mod_GeoIP ma dwie różne wersje, jedna jest bezpłatna, a druga jest płatna i wykorzystuje MaxMind GeoIP/GeoCity bazy danych.
- Wersja bezpłatna: w wersji bezpłatnej bazy danych Geo City i Kraje są dostępne z dokładnością 99,5%.
- Wersja płatna: W wersji płatnej otrzymasz obie bazy danych z dokładnością 99,8% z bardziej zaawansowanymi szczegółami dotyczącymi adresu IP.
Jeśli chcesz sprawdzić więcej różnic między wersją bezpłatną i płatną, odwiedź Maxmind.com.
W tym artykule wyjaśniono, jak skonfigurować i zainstalować moduł Mod_GeoIP dla Apache w językach RHEL i
Zakładamy, że masz już system RHEL i CentOS z działającym LAMP (Linux, Apache , MySQL, i PHP). Jeśli nie, przeczytaj nasze artykuły, w których pokazaliśmy instalację obu systemów operacyjnych za pomocą LAMP. Domyślnie mod_Geoip nie jest dostępny w oficjalnym repozytorium RHEL/CentOS, dlatego musimy zainstalować i włączyć repozytorium EPEL strony trzeciej. Po włączeniu repozytorium EPEL w swoim systemie możesz po prostu zainstalować mod_geoip, uruchamiając następującą komendę z ich pakietami zależności. Aby być na bieżąco, warto pobrać najnowszą wersję Geo City i Country Database. Po zainstalowaniu modułu otwórz i edytuj główny plik konfiguracyjny modułu za pomocą edytora tekstu wiersza poleceń, takiego jak vi, a następnie aktywuj moduł na całym serwerze, jak pokazano w poniższym fragmencie. Ustaw linię GeoIPEnable z Wyłączone na Włączone. Upewnij się także, że dodałeś ścieżkę bezwzględną do pliku bazy danych GeoIP. Uruchom ponownie usługę Apache, aby odzwierciedlić zmiany. Nie zaleca się jednak włączania modułu GeoIP na całym serwerze. Moduł GeoIP powinieneś włączyć tylko w blokach Aby przetestować, czy moduł mod_geoip działa poprawnie z Apache, musimy utworzyć plik PHP o nazwie testgeoip.php w obszarze ApacheInstalacja RHEL/CentOS
Konfiguracja LAMPY w RHEL/CentOS
Włącz repozytorium EPEL w RHEL i CentOS
yum install epel-release
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm [On RHEL 8]
Zainstaluj Mod_GeoIP w RHEL i CentOS
yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel
Pobierz najnowszą bazę danych Geo miast i krajów
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
Włącz Mod_GeoIP w Apache
vi /etc/httpd/conf.d/geoip.conf
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>
systemctl restart httpd
OR
service httpd restart
lub
, w których faktycznie będziesz wykonywał przekierowanie lub blokadę ruchu.Testowanie modułu Mod_GeoIP
vi /var/www/html/testgeoip.php
Wstaw do niego następujący fragment kodu 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>
Teraz spróbuj wywołać plik za pomocą przeglądarki internetowej (np. http://localhost/testgeoip.php). Otrzymasz swój adres IP i szczegóły kraju.
Aktualizacja bazy danych GeoIP
Baza danych GeoIP jest aktualizowana na początku każdego miesiąca. Dlatego bardzo ważne jest, aby baza danych GeoIP była zawsze aktualna. Aby pobrać najnowszą wersję bazy danych użyj poniższego polecenia.
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
Automatyczna aktualizacja bazy danych GeoIP
Napisaliśmy mały skrypt powłoki, który co miesiąc będzie automatycznie pobierał najnowszą wersję bazy danych GeoIP. Po prostu umieść dowolny z poniższych skryptów w obszarze /etc/cron.monthly.
Skrypt 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
Skrypt 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
Przekierowywanie użytkowników na podstawie kraju
Poniższy przykładowy kod przekieruje użytkowników na podstawie kodu kraju ustawionego na AS (Azja). W ten sposób możesz przekierować dowolnych użytkowników na podstawie ich kodu hrabstwa.
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]
Blokowanie użytkowników na podstawie kraju
Ten przykład zablokuje użytkowników na podstawie kodu kraju ustawionego przez GeoIP. Poniższy przykład zablokuje użytkowników z krajów AS (Azja) i USA (Stany Zjednoczone).
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
Zezwalanie użytkownikom na podstawie kraju
Poniższy przykład pozwoli tylko użytkownikom z niżej wymienionych krajów.
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
Więcej informacji na temat mod_geoip i jego użycia można znaleźć na stronie http://www.maxmind.com/app/mod_geoip. Jeśli masz jakiekolwiek problemy z konfiguracją modułu mod_geoip, daj nam znać w komentarzach i nie zapomnij podzielić się tym ze swoimi przyjaciółmi.