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.
- Gratis versjon: I gratisversjonen er databasene Geo City og Country tilgjengelig med 99,5 % nøyaktighet.
- 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.
- Installasjon av CentOS 7 Minimal.
- Installasjon av CentOS 8 Minimal.
- Hvordan installerer du LAMP (Linux, Apache, MySQL, PHP) på RHEL og CentOS 7
- 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.