Zoeken op website

Hoe Mod_GeoIP voor Apache in RHEL en CentOS te installeren


Mod_GeoIP is een Apache-module die kan worden gebruikt om de geografische locatie van het IP-adres van de bezoeker in de Apache-webserver te krijgen. Met deze module kunt u het land, de organisatie en de locatie van de bezoeker bepalen. Het is vooral handig voor geo-advertentieweergave, doelinhoud, spambestrijding, fraudedetectie en omleiding /Blokkeren bezoekers op basis van hun land en nog veel meer.

Met de GeoIP-module kunnen systeembeheerders webverkeer omleiden of blokkeren op basis van de geografische locatie van de klant. De geografische locatie wordt geleerd via het IP-adres van de client.

Mod_GeoIP heeft twee verschillende versies, één is Gratis en een andere is Betaald en gebruikt MaxMind GeoIP/GeoCity databanken.

  1. Gratis versie: In de gratis versie zijn de databases Geo Stad en Land beschikbaar met een nauwkeurigheid van 99,5%.
  2. Betaalde versie: In de betaalde versie krijgt u beide databases met een nauwkeurigheid van 99,8% met wat meer geavanceerde details over het IP-adres.

Als je de verschillen tussen de Gratis en Betaalde versie wilt bekijken, ga dan naar Maxmind.com.

In dit artikel wordt uitgelegd hoe u de Mod_GeoIP module voor Apache in RHEL en CentOS gebruikt de EPEL repository met het YUM pakketbeheerprogramma.

We gaan ervan uit dat u al een RHEL- en CentOS-systeem heeft met een werkende LAMP (Linux, Apache , MySQL, en PHP) instellen. Als dat niet het geval is, lees dan onze artikelen waarin we de installatie van beide besturingssystemen met LAMP hebben laten zien.

Installatie van RHEL/CentOS
  1. Installatie van RHEL 7 en CentOS 7 Minimaal.
  2. Installatie van RHEL 8 en CentOS 8 Minimaal.
LAMP-instelling op RHEL/CentOS
  1. Hoe LAMP (Linux, Apache, MySQL, PHP) te installeren op RHEL en CentOS 7
  2. Apache, MySQL/MariaDB en PHP installeren op RHEL en CentOS 8

Schakel EPEL Repository in RHEL en CentOS in

Standaard is mod_Geoip niet beschikbaar in de officiële RHEL/CentOS-repository, dus we moeten de EPEL-repository van derden installeren en inschakelen.

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

Installeer Mod_GeoIP in RHEL en CentOS

Zodra de EPEL repository op uw systeem is ingeschakeld, kunt u eenvoudig mod_geoip installeren door de volgende opdracht uit te voeren met hun afhankelijkheidspakketten.

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

Download de nieuwste Geo Stad- en Landdatabase

Het is een goed idee om de nieuwste Geo City en Land Database te downloaden om op de hoogte te blijven.

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

Schakel Mod_GeoIP in Apache in

Nadat de module is geïnstalleerd, opent en bewerkt u het hoofdconfiguratiebestand van de module, met een opdrachtregelteksteditor zoals vi, en activeert u de module serverbreed, zoals geïllustreerd in het onderstaande fragment.

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

Zet de regel GeoIPEnable van Uit naar Aan. Zorg er ook voor dat u het absolute pad aan het GeoIP-databasebestand toevoegt.

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

Start de Apache-service opnieuw om de wijzigingen weer te geven.

systemctl restart httpd
OR
service httpd restart

Het wordt echter niet aanbevolen om de GeoIP-module serverbreed in te schakelen. U dient de GeoIP-module alleen in te schakelen in - of -blokken waar u daadwerkelijk de verkeersomleiding of -blokkering zou uitvoeren.

Mod_GeoIP-module testen

Om te testen of de mod_geoip module correct werkt met Apache, moeten we een PHP bestand maken met de naam testgeoip.php onder Apache hoofdmap (bijvoorbeeld /var/www/html).

vi /var/www/html/testgeoip.php

Plaats het volgende stukje php-code erin.

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

Probeer nu het bestand aan te roepen met een webbrowser (bijvoorbeeld http://localhost/testgeoip.php). U ontvangt uw IP-adres en Land gegevens.

GeoIP-database bijwerken

De GeoIP-database wordt begin elke maand bijgewerkt. Het is dus erg belangrijk om de GeoIP-database up-to-date te houden. Gebruik de volgende opdracht om de nieuwste versie van de database te downloaden.

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

Automatische GeoIP-database-update

We hebben een klein shellscript geschreven dat elke maand automatisch de nieuwste versie van de GeoIP-database downloadt. Plaats gewoon een van de volgende scripts onder /etc/cron.monthly.

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

Gebruikers omleiden op basis van land

De onderstaande voorbeeldcode leidt gebruikers om op basis van de landcode die we hebben ingesteld op AS (Azië). Op deze manier kunt u gebruikers omleiden op basis van hun provinciecode.

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]

Gebruikers blokkeren op basis van land

In dit voorbeeld worden gebruikers geblokkeerd op basis van de landcode die GeoIP instelt. In het onderstaande voorbeeld worden gebruikers uit AS (Azië) en VS (Verenigde Staten) landen geblokkeerd.

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

Gebruikers toestaan op basis van land

In dit onderstaande voorbeeld zijn alleen gebruikers uit de onderstaande landen toegestaan.

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

Voor meer informatie over mod_geoip en het gebruik ervan kunt u vinden op http://www.maxmind.com/app/mod_geoip. Als je problemen ondervindt bij het opzetten van een mod_geoip-module, laat het ons dan weten via reacties en vergeet niet om het met je vrienden te delen.