Vyhledávání na webu

Jak nainstalovat Mod_GeoIP pro Apache v RHEL a CentOS


Mod_GeoIP je modul Apache, který lze použít k získání geografické polohy IP adresy návštěvníka na webový server Apache. Tento modul umožňuje určit země, organizaci a polohu návštěvníka. Je zvláště užitečné pro Geo Ad Serving, Cílový obsah, Boj proti spamu, Detekce podvodů, Přesměrování /Blokování návštěvníků na základě jejich země a mnoho dalšího.

Modul GeoIP umožňuje správcům systému přesměrovat nebo blokovat webový provoz podle geografické polohy klienta. Geografická poloha se zjistí prostřednictvím IP adresy klienta.

Mod_GeoIP má dvě různé verze, jedna je Zdarma a druhá je Placená a používá MaxMind GeoIP/GeoCity databáze.

  1. Bezplatná verze: Ve bezplatné verzi jsou databáze Geo City a Country dostupné s 99,5 % přesností.
  2. Placená verze: V placené verzi získáte obě databáze s 99,8% přesností s některými pokročilejšími detaily o IP adrese.

Pokud se chcete podívat na další rozdíly mezi bezplatnou a placenou verzí, navštivte prosím Maxmind.com.

Tento článek vysvětluje, jak nastavit a nainstalovat modul Mod_GeoIP pro Apache v RHEL a CentOS pomocí úložiště EPEL s nástrojem správce balíčků YUM.

Předpokládáme, že již máte spuštěný systém RHEL a CentOS s funkčním LAMP (Linux, Apache , MySQL, a PHP). Pokud ne, přečtěte si naše články, kde jsme ukázali instalaci obou operačních systémů pomocí LAMP.

Instalace RHEL/CentOS
  1. Instalace RHEL 7 a CentOS 7 Minimal.
  2. Instalace RHEL 8 a CentOS 8 Minimal.
Nastavení LAMP na RHEL/CentOS
  1. Jak nainstalovat LAMP (Linux, Apache, MySQL, PHP) na RHEL a CentOS 7
  2. Jak nainstalovat Apache, MySQL/MariaDB a PHP na RHEL a CentOS 8

Povolte úložiště EPEL v RHEL a CentOS

Ve výchozím nastavení není mod_Geoip k dispozici v oficiálním repozitáři RHEL/CentOS, takže musíme nainstalovat a povolit úložiště EPEL třetí strany.

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

Nainstalujte Mod_GeoIP v RHEL a CentOS

Jakmile ve svém systému povolíte úložiště EPEL, můžete jednoduše nainstalovat mod_geoip spuštěním následujícího příkazu s jejich balíčky závislostí.

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

Stáhněte si nejnovější geodatabázi měst a zemí

Je vhodné stáhnout si nejnovější Geo City a Databázi zemí, abyste zůstali v obraze.

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

Povolte Mod_GeoIP v Apache

Po instalaci modulu otevřete a upravte hlavní konfigurační soubor modulu pomocí textového editoru příkazového řádku, jako je vi, a aktivujte modul na celém serveru, jak je znázorněno na níže uvedeném úryvku.

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

Nastavte řádek GeoIPEnable z Vypnuto na Zapnuto. Také se ujistěte, že jste přidali absolutní cestu k souboru databáze GeoIP.

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

Restartujte službu Apache, aby se změny projevily.

systemctl restart httpd
OR
service httpd restart

Nedoporučuje se však zapínat modul GeoIP na celém serveru. Modul GeoIP byste měli povolit pouze v blocích nebo , kde byste skutečně provedli přesměrování nebo blokování provozu.

Testování modulu Mod_GeoIP

Abychom otestovali, zda modul mod_geoip správně funguje s Apache, musíme vytvořit PHP soubor s názvem testgeoip.php pod Apache kořenový adresář (např. /var/www/html).

vi /var/www/html/testgeoip.php

Vložte do něj následující část php kódu.

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

Nyní zkuste soubor zavolat pomocí webového prohlížeče (např. http://localhost/testgeoip.php). Získáte podrobnosti o vaší IP adrese a zemi.

Aktualizace GeoIP databáze

Databáze GeoIP je aktualizována začátkem každého měsíce. Proto je velmi důležité udržovat databázi GeoIP aktuální. Chcete-li stáhnout nejnovější verzi databáze, použijte následující příkaz.

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

Automatická aktualizace databáze GeoIP

Napsali jsme malý shell skript, který každý měsíc automaticky stáhne nejnovější verzi databáze GeoIP. Stačí umístit libovolný z následujících skriptů pod /etc/cron.monthly.

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

Přesměrování uživatelů na základě země

Níže uvedený příklad kódu přesměruje uživatele na základě kódu země, který jsme nastavili na AS (Asie). Tímto způsobem můžete přesměrovat libovolné uživatele na základě jejich kódu kraje.

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]

Blokování uživatelů na základě země

Tento příklad zablokuje uživatele na základě kódu země, který GeoIP nastaví. Níže uvedený příklad zablokuje uživatele ze zemí AS (Asie) a USA (Spojené státy americké).

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

Povolení uživatelů na základě země

Tento níže uvedený příklad povolí pouze uživatele z níže uvedených zemí.

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

Další informace o mod_geoip a jeho použití naleznete na http://www.maxmind.com/app/mod_geoip. Pokud máte nějaké potíže s nastavením modulu mod_geoip, dejte nám prosím vědět prostřednictvím komentářů a nezapomeňte je sdílet se svými přáteli.