Hvordan installere Mod_GeoIP for Apache i RHEL og CentOS


Mod_GeoIP er en Apache-modul som kan brukes til å få den geografiske plasseringen til IP-adressen til den besøkende inn på Apache-nettserveren. Denne modulen lar deg bestemme den besøkendes land, organisasjon og plassering. Det er spesielt nyttig for geografisk annonsevisning, målinnhold, spambekjempelse, svindeloppdagelse, omdirigering/blokkering av besøkende basert på landet deres og mye mer.

GeoIP-modulen lar systemadministratorer omdirigere eller blokkere nettrafikk i henhold til kundens geografiske plassering. Den geografiske plasseringen læres via klientens IP-adresse.

Mod_GeoIP har to forskjellige versjoner, en er gratis og en annen er betalt og bruker MaxMind GeoIP/GeoCity-databaser.

  1. Gratis versjon: I gratisversjonen er databasene Geo City og Country tilgjengelig med 99,5 % nøyaktighet.
  2. Betalt versjon: I den betalte versjonen vil du få begge databasene med 99,8 % nøyaktighet med noen mer avanserte detaljer om IP-adresse.

Hvis du liker å sjekke ut flere forskjeller mellom gratis og betalt versjon, vennligst besøk Maxmind.com.

Denne artikkelen forklarer hvordan du setter opp og installerer Mod_GeoIP-modulen for Apache i RHEL og CentOS ved å bruke EPEL-depotet med YUM-pakkebehandlingsverktøyet.

Vi antar at du allerede har RHEL- og CentOS-system med et fungerende LAMP-oppsett (Linux, Apache, MySQL og PHP). Hvis ikke, les artiklene våre der vi har vist installasjonen av begge operativsystemene med LAMP.

  1. Installasjon av CentOS 7 Minimal.
  2. Installasjon av CentOS 8 Minimal.

  1. Hvordan installerer du LAMP (Linux, Apache, MySQL, PHP) på RHEL og CentOS 7
  2. Hvordan installerer du Apache, MySQL/MariaDB og PHP på RHEL og CentOS 8

Som standard er mod_Geoip ikke tilgjengelig under det offisielle RHEL/CentOS-depotet, så vi må installere og aktivere tredjeparts EPEL-depot.

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

Når du har aktivert EPEL-depot på systemet ditt, kan du ganske enkelt installere mod_geoip ved å kjøre følgende kommando med deres avhengighetspakker.

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

Det er en god idé å laste ned den nyeste Geo City and Country Database for å holde deg oppdatert.

# 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

Etter at modulen er installert, åpne og rediger modulens hovedkonfigurasjonsfil, med en kommandolinjetekstredigerer som vi, og aktiver modulen på hele serveren, som illustrert i utdraget nedenfor.

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

Sett linjen GeoIPEnable fra Av til På. Pass også på at du legger til den absolutte banen til GeoIP-databasefilen.

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

Start Apache-tjenesten på nytt for å gjenspeile endringer.

# systemctl restart httpd
OR
# service httpd restart

Det anbefales imidlertid ikke å slå på GeoIP-modulen på hele serveren. Du bør aktivere GeoIP-modulen kun i blokker eller der du faktisk ville utført trafikkomdirigeringen eller blokkeringen.

For å teste at mod_geoip-modulen fungerer korrekt med Apache, må vi lage en PHP-fil kalt testgeoip.php under Apaches rotkatalog (f.eks. /var/www/html).

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

Sett inn følgende php-kode til den.

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

Prøv nå å ringe filen ved hjelp av en nettleser (f.eks. http://localhost/testgeoip.php). Du vil få din IP-adresse og landdetaljer.

GeoIP-databasen oppdateres i begynnelsen av hver måned. Så det er veldig viktig å holde GeoIP-databasen oppdatert. For å laste ned den nyeste versjonen av databasen, bruk følgende 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

Vi har skrevet et lite shell-script som automatisk laster ned den nyeste versjonen av GeoIP-databasen hver måned. Bare plasser et av følgende skript under /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

Eksempelkoden nedenfor vil omdirigere brukere basert på landskoden vi har satt til AS (Asia). På denne måten kan du omdirigere alle brukere basert på deres fylkeskode.

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]

Dette eksemplet vil blokkere brukere basert på landskoden som GeoIP angir. Eksempelet nedenfor vil blokkere brukere fra AS (Asia) og USA (USA) land.

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

Dette eksemplet nedenfor vil kun tillate brukere fra landene nedenfor.

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

For mer informasjon om mod_geoip og bruken kan du finne på http://www.maxmind.com/app/mod_geoip. Hvis du har problemer med å sette opp en mod_geoip-modul, vennligst gi oss beskjed via kommentarer og ikke glem å dele den med vennene dine.