Wéi installéiere ech Mod_GeoIP fir Apache an RHEL an CentOS


Mod_GeoIP ass en Apache Modul dee benotzt ka ginn fir d'geographesch Lag vun der IP Adress vum Besucher an den Apache Webserver ze kréien. Dëse Modul erlaabt Iech d'Land, d'Organisatioun an d'Location vum Visiteur ze bestëmmen. Et ass besonnesch nëtzlech fir Geo Ad Serving, Target Inhalt, Spam Fighting, Fraud Detection, Redirecting/Blocking Besucher baséiert op hirem Land a vill méi.

GeoIP Modul erlaabt System Administrateuren de Webverkéier ze redirectéieren oder ze blockéieren no der geographescher Lag vum Client. Déi geographesch Lag gëtt iwwer d'IP Adress vum Client geléiert.

Mod_GeoIP huet zwou verschidde Versiounen, eng ass gratis an eng aner ass bezuelt a benotzt MaxMind GeoIP/GeoCity Datenbanken.

  1. Gratis Versioun: An der gratis Versioun sinn d'Geo City a Country Datenbanken mat 99,5% Genauegkeet verfügbar.
  2. Paid Versioun: An der Paid Versioun kritt Dir béid Datenbanken mat 99,8% Genauegkeet mat e puer méi fortgeschratt Detailer iwwer IP Adress.

Wann Dir gär déi méi Differenzen tëscht der Gratis a Bezuelter Versioun kuckt, besicht w.e.g. Maxmind.com.

Dësen Artikel erkläert wéi Dir de Mod_GeoIP Modul fir Apache an RHEL an CentOS opstellt an installéiere wëllt mat dem EPEL Repository mat YUM Package Manager Utility.

Mir huelen un datt Dir scho RHEL an CentOS System mat engem funktionnéierende LAMP (Linux, Apache, MySQL, a PHP) Setup hutt. Wann net, liest dann eis Artikelen wou mir d'Installatioun vu béide Betribssystemer mat LAMP gewisen hunn.

  1. Installatioun vum CentOS 7 Minimal.
  2. Installatioun vum CentOS 8 Minimal.

  1. Wéi installéiere ech LAMP (Linux, Apache, MySQL, PHP) op RHEL an CentOS 7
  2. Wéi installéiere ech Apache, MySQL/MariaDB, a PHP op RHEL an CentOS 8

Par défaut ass mod_Geoip net ënner RHEL/CentOS offiziellen Repository verfügbar, also musse mir Drëtt Partei EPEL Repository installéieren an aktivéieren.

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

Wann Dir EPEL Repository op Ärem System aktivéiert hutt, kënnt Dir einfach mod_geoip installéieren andeems Dir de folgende Kommando mat hiren Ofhängegkeetspakete leeft.

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

Et ass eng gutt Iddi déi lescht Geo City and Country Database erofzelueden fir aktualiséiert ze bleiwen.

# 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

Nodeems de Modul installéiert ass, öffnen an änneren d'Haaptkonfiguratiounsdatei vum Modul, mat engem Kommandozeil Texteditor wéi vi, an aktivéiert de Modul Server-breet, wéi illustréiert am Auszich hei ënnen.

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

Setzt d'Linn GeoIPEnable vun Off op On. Gitt och sécher datt Dir den absolute Wee an d'GeoIP Datebankdatei bäidréit.

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

Restart den Apache Service fir Ännerungen ze reflektéieren.

# systemctl restart httpd
OR
# service httpd restart

Wéi och ëmmer, et ass net recommandéiert de GeoIP Modul Server-breet unzeschalten. Dir sollt de GeoIP Modul nëmmen an oder Blocken aktivéieren, wou Dir tatsächlech d'Verkéiersviruleedung oder Spär ausféiert.

Fir de mod_geoip Modul ze testen funktionnéiert korrekt mat Apache, musse mir eng PHP Datei mam Numm testgeoip.php ënner Apache Root Verzeechnes erstellen (zB /var/www/html).

# vi /var/www/html/testgeoip.php

Füügt de folgende Stéck php Code derbäi.

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

Elo probéiert d'Datei mat engem Webbrowser ze ruffen (zB http://localhost/testgeoip.php). Dir kritt Är IP Adress a Land Detailer.

GeoIP Datebank gëtt Ufank vun all Mount aktualiséiert. Also, et ass ganz wichteg d'GeoIP Datebank up-to-date ze halen. Fir déi lescht Versioun vun der Datebank erofzelueden, benotzt de folgende Kommando.

# 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

Mir hunn e klenge Shell-Skript geschriwwen, deen automatesch déi lescht Versioun vun der GeoIP-Datebank all Mount erofluet. Plaz just ee vun de folgende Skript ënner /etc/cron.monthly.

# 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
#!/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

Den hei ënnendrënner Beispillcode wäert d'Benotzer viruleeden op Basis vum Landcode dee mir op AS (Asien) gesat hunn. Op dës Manéier kënnt Dir all Benotzer op Basis vun hirem Grofschaftscode viruleeden.

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]

Dëst Beispill blockéiert Benotzer op Basis vum Landcode deen GeoIP setzt. Dat Beispill hei ënnen blockéiert Benotzer aus AS (Asien) an US (USA) Länner.

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

Dëst Beispill hei ënnen erlaabt nëmme Benotzer aus ënnen ernimmte Länner.

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

Fir méi Informatiounen iwwer mod_geoip a seng Notzung kann op http://www.maxmind.com/app/mod_geoip fonnt ginn. Wann Dir Probleemer hutt fir e Mod_geoip Modul opzestellen, loosst eis w.e.g. iwwer Kommentaren wëssen a vergiesst w.e.g. net et mat Äre Frënn ze deelen.