Wyszukiwanie w witrynie

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.

  1. Wersja bezpłatna: w wersji bezpłatnej bazy danych Geo City i Kraje są dostępne z dokładnością 99,5%.
  2. 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.

Instalacja RHEL/CentOS
  1. Instalacja RHEL 7 i CentOS 7 Minimal.
  2. Instalacja RHEL 8 i CentOS 8 Minimal.
Konfiguracja LAMPY w RHEL/CentOS
  1. Jak zainstalować LAMPę (Linux, Apache, MySQL, PHP) na RHEL i CentOS 7
  2. Jak zainstalować Apache, MySQL/MariaDB i PHP na RHEL i CentOS 8

Włącz repozytorium EPEL w RHEL i CentOS

Domyślnie mod_Geoip nie jest dostępny w oficjalnym repozytorium RHEL/CentOS, dlatego musimy zainstalować i włączyć repozytorium EPEL strony trzeciej.

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

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.

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

Pobierz najnowszą bazę danych Geo miast i krajów

Aby być na bieżąco, warto pobrać najnowszą wersję Geo City i Country Database.

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

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.

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

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.

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

Uruchom ponownie usługę Apache, aby odzwierciedlić zmiany.

systemctl restart httpd
OR
service httpd restart

Nie zaleca się jednak włączania modułu GeoIP na całym serwerze. Moduł GeoIP powinieneś włączyć tylko w blokach lub , w których faktycznie będziesz wykonywał przekierowanie lub blokadę ruchu.

Testowanie modułu Mod_GeoIP

Aby przetestować, czy moduł mod_geoip działa poprawnie z Apache, musimy utworzyć plik PHP o nazwie testgeoip.php w obszarze Apache katalog główny (np. /var/www/html).

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.