Kako instalirati Mod_GeoIP za Apache u RHEL i CentOS
Mod_GeoIP je Apacheov modul koji se može koristiti za dobivanje zemljopisnog položaja IP adrese posjetitelja na Apacheov web poslužitelj. Ovaj vam modul omogućuje određivanje države, organizacije i mjesta posjetitelja. Posebno je korisno za posluživanje geografskih oglasa, ciljni sadržaj, borbu protiv neželjene pošte, otkrivanje prijevara, preusmjeravanje/blokiranje posjetitelja na temelju njihove zemlje i još mnogo toga.
GeoIP modul omogućuje administratorima sustava da preusmjeravaju ili blokiraju web promet prema geografskom položaju klijenta. Zemljopisni se položaj saznaje putem IP adrese klijenta.
Mod_GeoIP ima dvije različite verzije, jedna je besplatna, a druga je plaćena i koristi baze podataka MaxMind GeoIP/GeoCity.
- Besplatna verzija: U besplatnoj verziji baze podataka Geo City i Country dostupne su s 99,5% točnosti.
- Plaćena verzija: U plaćenoj verziji dobit ćete obje baze podataka s točnošću od 99,8% uz neke naprednije detalje o IP adresi.
Ako želite provjeriti više razlika između besplatne i plaćene verzije, posjetite Maxmind.com.
Ovaj članak objašnjava kako postaviti i instalirati Mod_GeoIP modul za Apache u RHEL i CentOS pomoću spremišta EPEL s uslužnim programom YUM upravitelja paketa.
Pretpostavljamo da već imate pokrenut RHEL i CentOS sustav s ispravnim postavkama LAMP (Linux, Apache, MySQL i PHP). Ako ne, pročitajte naše članke u kojima smo prikazali instalaciju oba operativna sustava s LAMP-om.
- Instalacija CentOS 7 Minimal.
- Instalacija CentOS 8 Minimal.
- Kako instalirati LAMP (Linux, Apache, MySQL, PHP) na RHEL i CentOS 7
- Kako instalirati Apache, MySQL/MariaDB i PHP na RHEL i CentOS 8
Prema zadanim postavkama mod_Geoip nije dostupan pod službenim spremištem RHEL/CentOS, stoga moramo instalirati i omogućiti EPEL spremište treće strane.
# yum install epel-release # yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm [On RHEL 8]
Nakon što omogućite EPEL spremište na vašem sustavu, možete jednostavno instalirati mod_geoip pokretanjem sljedeće naredbe s njihovim paketima ovisnosti.
# yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel
Dobra je ideja preuzeti najnoviju bazu podataka o Geo Cityju i zemljama kako biste bili u toku.
# 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
Nakon što je modul instaliran, otvorite i uredite glavnu konfiguracijsku datoteku modula s uređivačem teksta naredbenog retka kao što je vi i aktivirajte modul na cijelom poslužitelju, kao što je prikazano u nastavku.
# vi /etc/httpd/conf.d/geoip.conf
Postavite liniju GeoIPEnable s Off na On. Također, obavezno dodajte apsolutni put u datoteku baze podataka GeoIP.
<IfModule mod_geoip.c> GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache </IfModule>
Ponovo pokrenite uslugu Apache da odražava promjene.
# systemctl restart httpd OR # service httpd restart
Međutim, ne preporučuje se uključivanje GeoIP modula na cijelom poslužitelju. Morali biste omogućiti GeoIP modul samo u blokovima
ili
gdje biste zapravo izvršili preusmjeravanje ili blokiranje prometa.
Da bismo testirali modul mod_geoip kako ispravno radi s Apacheom, moramo stvoriti PHP datoteku nazvanu testgeoip.php u korijenskom direktoriju Apache (npr./Var/www/html).
# vi /var/www/html/testgeoip.php
U njega umetnite sljedeći dio php koda.
<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>
Sada pokušajte nazvati datoteku pomoću web preglednika (npr. Http: //localhost/testgeoip.php). Dobit ćete svoju IP adresu i podatke o državi.
Baza podataka GeoIP ažurira se početkom svakog mjeseca. Dakle, vrlo je važno ažurirati GeoIP bazu podataka. Da biste preuzeli najnoviju verziju baze podataka, upotrijebite sljedeću naredbu.
# 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
Napisali smo malu skriptu ljuske koja će automatski preuzeti najnoviju verziju baze podataka GeoIP svakog mjeseca. Samo stavite bilo koju od sljedećih skripti pod /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
Slijedeći primjer koda preusmjerit će korisnike na temelju koda države koji smo postavili na AS (Azija). Na ovaj način možete preusmjeriti sve korisnike na temelju njihovih kodova.
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]
Ovaj će primjer blokirati korisnike na temelju pozivnog broja države koji postavlja GeoIP. Primjer u nastavku blokirat će korisnike iz zemalja AS (Azija) i SAD-a (Sjedinjene Države).
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
Ovaj donji primjer omogućit će samo korisnike iz dolje spomenutih zemalja.
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
Za više informacija o mod_geoip i njegovoj upotrebi možete pronaći na http://www.maxmind.com/app/mod_geoip. Ako imate bilo kakvih problema s postavljanjem mod_geoip modula, javite nam putem komentara i ne zaboravite ga podijeliti sa svojim prijateljima.