Sådan installeres Mod_GeoIP til Apache i RHEL og CentOS


Mod_GeoIP er et Apache-modul, der kan bruges til at få den geografiske placering af den besøgendes IP-adresse til Apache-webserveren. Dette modul giver dig mulighed for at bestemme den besøgendes land, organisation og placering. Det er især nyttigt til visning af geo-annoncer, målindhold, spambekæmpelse, afsløring af svig, omdirigering/blokering af besøgende baseret på deres land og meget mere.

GeoIP-modulet tillader systemadministratorer at omdirigere eller blokere webtrafik i henhold til klientens geografiske placering. Den geografiske placering læres via klientens IP-adresse.

Mod_GeoIP har to forskellige versioner, den ene er gratis, og den anden er betalt og bruger MaxMind GeoIP/GeoCity-databaser.

  1. Gratis version: I den gratis version er Geo City- og Country-databaser tilgængelige med en nøjagtighed på 99,5%.
  2. Betalt version: I den betalte version får du begge databaser med 99,8% nøjagtighed med nogle mere avancerede detaljer om IP-adresse.

Hvis du gerne vil se de flere forskelle mellem den gratis og betalte version, skal du besøge Maxmind.com.

Denne artikel forklarer, hvordan man opsætter og installerer Mod_GeoIP-modulet til Apache i RHEL og CentOS ved hjælp af EPEL-arkivet med YUM-pakkehåndteringsværktøjet.

Vi antager, at du allerede har kørt RHEL og CentOS-system med en fungerende LAMP (Linux, Apache, MySQL og PHP) opsætning. Hvis ikke, så læs vores artikler, hvor vi har vist installationen af begge operativsystemer med LAMP.

  1. Installation af CentOS 7 Minimal.
  2. Installation af CentOS 8 Minimal.

  1. Sådan installeres LAMP (Linux, Apache, MySQL, PHP) på RHEL og CentOS 7
  2. Sådan installeres Apache, MySQL/MariaDB og PHP på RHEL og CentOS 8

Som standard er mod_Geoip ikke tilgængelig under RHEL/CentOS officielle lager, så vi er nødt til at installere og aktivere tredjeparts EPEL-lager.

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

Når EPEL-arkivet er aktiveret på dit system, kan du blot installere mod_geoip ved at køre følgende kommando med deres afhængighedspakker.

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

Det er en god ide at downloade den nyeste Geo City and Country Database for at holde dig opdateret.

# 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

Når modulet er installeret, skal du åbne og redigere modulets hovedkonfigurationsfil med en kommandolinjeteksteditor som vi, og aktivere modulserveret som vist i nedenstående uddrag.

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

Indstil linjen GeoIPEnable fra Fra til Til. Sørg også for at tilføje den absolutte sti til GeoIP-databasefilen.

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

Genstart Apache-tjenesten for at afspejle ændringer.

# systemctl restart httpd
OR
# service httpd restart

Det anbefales dog ikke at tænde GeoIP-modulet server-bredt. Du skal kun aktivere GeoIP-modulet i eller -blokke, hvor du rent faktisk ville udføre omdirigering eller blokering af trafik.

For at teste, at mod_geoip-modulet fungerer korrekt med Apache, skal vi oprette en PHP-fil kaldet testgeoip.php under Apache-rodmappe (f.eks./Var/www/html).

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

Indsæt følgende stykke php-kode til det.

<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 nu at ringe til filen ved hjælp af en webbrowser (f.eks. Http: //localhost/testgeoip.php). Du får din IP-adresse og landoplysninger.

GeoIP-databasen opdateres i begyndelsen af hver måned. Så det er meget vigtigt at holde GeoIP-databasen opdateret. Brug følgende kommando for at downloade den nyeste version af databasen.

# 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 lille shell-script, der automatisk downloader den nyeste version af GeoIP-databasen hver måned. Placer blot et af følgende script 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

Nedenstående eksempelkode omdirigerer brugere baseret på den landekode, som vi indstiller til AS (Asien). På denne måde kan du omdirigere alle brugere baseret på deres amtkode.

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 eksempel blokerer brugere baseret på den landekode, som GeoIP indstiller. Eksemplet nedenfor blokerer brugere fra AS (Asien) og USA (USA) lande.

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 nedenstående eksempel tillader kun brugere fra nedenstående lande.

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 mere information om mod_geoip og dens anvendelse kan du finde på http://www.maxmind.com/app/mod_geoip. Hvis du har problemer med at oprette et mod_geoip-modul, så lad os det vide via kommentarer, og glem ikke at dele det med dine venner.