(Plesk for Linux) IP-geolokaation määrittäminen verkkosivustolle¶
IP-geolokaatio yhdistää verkkosivuston kävijän IP-osoitteen tämän todelliseen maantieteelliseen sijaintiin, esimerkiksi maahan tai kaupunkiin.
IP-geolokaation avulla voit muokata verkkosivustosi näyttämistä kävijöille heidän asuinpaikkansa mukaan. Voit esimerkiksi ohjata kävijät sijaintikohtaisille verkkosivuille tai estää pääsyn verkkosivustollesi tietyn maan kävijöiltä.
Tässä aiheessa opit määrittämään IP-geolokaation Pleskissä ja käyttämään IP-geolokaatiota yleisissä käyttötapauksissa, kuten:
Pääsyn estäminen palvelimella isännöityihin verkkosivustoihin tietyn maan kävijöiltä.
Verkkosivuston kävijöiden uudelleenohjaaminen geolokaatiokohtaiseen URL-osoitteeseen.
Verkkosivuston suojaaminen samasta maasta tulevilta brute-force-hyökkäyksiltä.
IP-geolokaation määrittäminen Pleskissä¶
Määrität IP-geolokaation Pleskissä käyttämällä sisäänrakennettua ngx_http_geoip2_module-nginx-moduulia ja MaxMind-geolokaatiotietokantoja, jotka sinun on ladattava.
1. MaxMind-geolokaatiotietokantojen lataaminen¶
MaxMind-yritys tarjoaa kaksi geolokaatiotietokantaa: ilmaisen GeoLite2:n ja maksullisen GeoIP2:n, joka on tarkempi kuin ilmainen vastine.
Tässä aiheessa käytämme esimerkkinä ilmaista GeoLite2-tietokantaa. Voit aina päivittää sen GeoIP2:ksi.
Jotta voit ladata GeoLite2-geolokaatiotietokannan, sinun on ensin luotava ilmainen GeoLite2-tili ja valittava sitten, miten tietokannat ladataan. Voit tehdä sen seuraavilla tavoilla:
Lataa tietokantojen arkistot suoraan ja lähetä ne sitten Plesk-palvelimellesi.
Hae pysyvät linkit. Voit ladata tietokannat käyttämällä näitä pysyviä linkkejä skripteissä tai
curl- jaget-komennoilla. Tarvitset myös GeoLite2-tilillesi luodun käyttöoikeusavaimen. Lue lisää pysyvien linkkien hankkimisesta ja käyttämisestä.(Suositus) Käytä
geoipupdate-apuohjelmaa.Suosittelemme tätä tapaa geolokaatiotietokantojen lataamiseen, koska tämä apuohjelma on saatavilla suurten Linux-jakelujen järjestelmäpakettivarastoista.
geoipupdate-apuohjelman avulla voit paitsi ladata myös päivittää geolokaatiotietokannat.
GeoLite2-geolokaatiotietokannan lataaminen geoipupdate-apuohjelmalla:
Muista
Jos haluat nähdä, mikä apuohjelman versio on saatavilla, ja apuohjelman asetukset, suorita geoipupdate -v.
Kirjaudu GeoLite2-tilillesi ja luo käyttöoikeusavain. Kun olet tehnyt sen, kopioi avain ja säilytä se turvallisesti. Turvallisuussyistä käyttöoikeusavaimet näytetään vain luonnin yhteydessä.
Kun luot käyttöoikeusavaimen, näet myös tilitunnuksesi. Tarvitset sekä tilitunnuksen että käyttöoikeusavaimen seuraavassa vaiheessa.
Avaa
/etc/GeoIP.conf-tiedosto muokattavaksi.GeoIP.conf-tiedoston polku voi vaihdella Linux-jakelusta riippuen.Liitä tilitunnuksesi, käyttöoikeusavaimesi ja niiden tietokantojen versiotunnukset, jotka haluat ladata. Erottele useat versiot välilyönneillä. Kun olet suorittanut asennuksen, tallenna tiedosto.
Voit ladata tietokannat suorittamalla komennon
sudo geoipupdatetaisudo geoipupdate -v(nähdäksesi yksityiskohtaiset tiedot siitä, mitkä tietokannat ladataan ja minne).
2. ngx_http_geoip2_module-moduulin käyttöönotto Pleskissä¶
Plesk 18.0.46:ssa ja uudemmissa nginx on jo käännetty ngx_http_geoip2_module-moduulilla. Oletuksena moduuli on poistettu käytöstä.
Muista
Tarkistaaksesi, onko nginx käännetty moduulin kanssa, suorita nginx -V. Jos on, näet mod_geoip2-merkinnän tulosteessa.
Ota ngx_http_geoip2_module käyttöön:
Kirjaudu Plesk-palvelimellesi SSH:n kautta.
Ota moduuli käyttöön suorittamalla
plesk bin nginx -e geoip2.
Moduuli on käytössä. Näet sen käytössä olevien nginx-moduulien luettelossa, jos suoritat plesk bin nginx -s.
3. Muuttujien määrittäminen¶
Jotta voit käyttää geolokaatiotietoja ja tehdä niihin perustuvia päätöksiä, sinun täytyy yhdistää verkkosivuston kävijän IP-osoite useisiin ominaisuuksiin (kuten maan tai kaupungin nimeen) ja tallentaa ne muuttujina nginx-määritystiedostoihin.
Muuttujien määrittäminen:
Lisää seuraavat direktiivit
/etc/nginx/conf.d/geoip2.conf-tiedostoon:geoip2 <path-to-the-database>/GeoLite2-Country.mmdb { auto_reload 5m; $geoip2_metadata_country_build metadata build_epoch; $geoip2_data_country_code country iso_code; $geoip2_data_country_name country names en; } geoip2 <path-to-the-database>/GeoLite2-City.mmdb { $geoip2_data_city_name city names en; }Korvaa
<path-to-the-database>todellisella tietokannan polulla, esimerkiksi /usr/share/GeoIP/GeoLite2-Country.mmdbCentOS-, AlmaLinux- ja muissa Red Hat -tyyppisissä käyttöjärjestelmissä tietokantojen oletussijainnit ovat seuraavat:
/usr/share/GeoIP/GeoLite2-ASN.mmdb/usr/share/GeoIP/GeoLite2-City.mmdb/usr/share/GeoIP/GeoLite2-Country.mmdb
Debianissa ja Ubuntussa tietokantojen oletussijainti on
/var/lib/GeoIP.Lataa nginx-määritystiedosto uudelleen suorittamalla komento
service nginx reload.
Olet suorittanut IP-geolokaation määrittämisen Pleskissä. Voit nyt käyttää ngx_http_geoip2_module-moduulia alla kuvatuissa eri käyttötapauksissa.
Jotta voit soveltaa näitä käyttötapauksia, sinun on määritettävä nginx-direktiivit, jotka viittaavat seuraaviin muuttujiin:
Muuttujan nimi |
Muuttujan merkitys |
|---|---|
|
GeoLite2-Country-tietokannan rakennusaika |
|
Maan kaksikirjaiminen ISO-koodi |
|
Maan nimi englanniksi |
|
Kaupungin nimi englanniksi |
Pääsyn estäminen verkkosivustolle tietyn maan kävijöiltä¶
Voit estää verkkosivuston käytön tietyn maan kävijöiltä. Kun he yrittävät käyttää verkkosivustoa, he näkevät HTTP 403 -tilakoodin, joka tarkoittaa, että pääsy pyydettyyn resurssiin on kielletty.
Pääsyn estäminen verkkosivustolle tietyn maan kävijöiltä:
Siirry kohtaan Verkkosivustot ja toimialueet > toimialue > välilehti ”Isännöinti ja DNS” > Apache- ja nginx-asetukset.
Lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään ja napsauta sitten OK.
if ($geoip2_data_country_code = "XX") { return 403; }Jossa
XXon sen maan kaksikirjaiminen ISO-koodi, jonka kävijät haluat estää (esimerkiksiAQAntarktikselle).
Tietyn ISO-koodin määrittämäsi maan kävijät eivät enää pääse verkkosivustollesi.
Verkkosivuston kävijöiden uudelleenohjaaminen geolokaatiokohtaiseen URL-osoitteeseen¶
Voit ohjata kävijät, jotka avaavat yleisen URL-osoitteen (esimerkiksi https://example.com/test), maakohtaiseen URL-osoitteeseen (esimerkiksi https:// example.com/US/test).
Verkkosivuston kävijöiden uudelleenohjaaminen geolokaatiokohtaiseen URL-osoitteeseen:
Siirry kohtaan Verkkosivustot ja toimialueet > toimialue > välilehti ”Isännöinti ja DNS” > Apache- ja nginx-asetukset.
Lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään ja napsauta sitten OK.
location = /test { return 301 https://$host/$geoip2_data_country_code/<geolocation-specific-URL-part>; }Jossa
<geolocation-specific-URL-part>on geolokaatiokohtainen URL-osa (esimerkiksitest).
Esimerkiksi Yhdysvalloista tulevat kävijät ohjataan nyt osoitteeseen https://example.com/US/test.
Geolokaatioon perustuvien päätösten soveltaminen yhteen isännöintisuunnitelmaan kuuluviin verkkosivustoihin¶
Voit esimerkiksi estää tai ohjata tietyn maan kävijät, mutta soveltaa sitä ei yhteen yksittäiseen verkkosivustoon vaan kaikkiin yhteen isännöintisuunnitelmaan kuuluviin verkkosivustoihin. Tapaus on samanlainen kuin kaksi edellistä yksittäisen verkkosivuston tapausta. Ainoa ero on, että sinun täytyy käyttää toimialueen sijaan isännöintisuunnitelman nginx-asetuksia.
Katsotaan, miten tämä tehdään verkkosivuston pääsyn estämisen esimerkillä.
Pääsyn estäminen yhteen isännöintisuunnitelmaan kuuluviin verkkosivustoihin tietyn maan kävijöiltä:
Siirry kohtaan Palvelusuunnitelmat ja napsauta sen palvelusuunnitelman nimeä, jonka verkkosivustojen pääsy haluat estää.
Siirry ”WWW-palvelin”-välilehdelle, lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään ja napsauta sitten OK.
if ($geoip2_data_country_code = "XX") { return 403; }Jossa
XXon sen maan kaksikirjaiminen ISO-koodi, jonka kävijät haluat estää (esimerkiksiAQAntarktikselle).
Tietyn ISO-koodin määrittämäsi maan kävijät eivät enää pääse kaikkiin isännöintisuunnitelmaan kuuluviin verkkosivustoihin.
Pääsyn estäminen palvelimella isännöityihin verkkosivustoihin tietyn maan kävijöiltä¶
Tämän käyttötapauksen toteuttamiseen on kaksi tapaa: mukautettujen määritysmallien tai isännöintisuunnitelman asetusten käyttäminen. Kuvasimme jo aiemmin, miten isännöintisuunnitelman asetuksia käytetään. Alla näytämme, miten mukautettuja määritysmalleja käytetään.
Muista
Sinun on käytettävä joko määritysmalleja tai isännöintisuunnitelman asetuksia. Palvelimella isännöityjen verkkosivustojen käyttöä ei ole mahdollista estää lisäämällä globaalia nginx-määritystiedostoa /etc/nginx/conf.d-hakemistoon.
Pääsyn estäminen palvelimella isännöityihin verkkosivustoihin tietyn maan kävijöiltä:
Luo mukautettu määritysmalli
nginxDomainVirtualHost.phpkäyttäen tätä toimintatapaa.Etsi seuraava teksti kopioidun oletusmallin lopusta:
<?php if (is_file($VAR->domain->physicalHosting->customNginxConfigFile)) : ?> include "<?php echo $VAR->domain->physicalHosting->customNginxConfigFile ?>"; <?php endif ?> }
Lisää pääsyn rajoitusdirektiivit ennen oikeaa aaltosulkeita seuraavasti:
<?php if (is_file($VAR->domain->physicalHosting->customNginxConfigFile)) : ?> include "<?php echo $VAR->domain->physicalHosting->customNginxConfigFile ?>"; <?php endif ?> if ($geoip2_data_country_code = "XX") { return 403; } }
Jossa
XXon sen maan kaksikirjaiminen ISO-koodi, jonka kävijät haluat estää (esimerkiksiAQAntarktikselle).Suorita seuraava komento tarkistaaksesi, että muokatut mallit ovat kelvollisia PHP-tiedostoja:
php -l nginxDomainVirtualHost.php
Suorita seuraava komento luodaksesi uudet määritystiedostot:
plesk sbin httpdmng --reconfigure-all
Tietyn ISO-koodin määrittämäsi maan kävijät eivät enää pääse palvelimella isännöityihin verkkosivustoihin.
Verkkosivuston suojaaminen samasta maasta tulevilta brute-force-hyökkäyksiltä¶
Voit suojata verkkosivustosi brute-force-hyökkäyksiltä rajoittamalla pyyntöjä IP-osoitteista, joilla on sama ISO-maakoodi. Voit soveltaa tätä suojausta seuraaviin:
Yksi verkkosivusto
Kaikki yhteen isännöintisuunnitelmaan kuuluvat verkkosivustot
Kaikki palvelimella isännöidyt verkkosivustot
Yksi tai useampi verkkosivu (esimerkiksi
example.com/test)
Yhden tai useamman verkkosivuston suojaaminen samasta maasta tulevilta brute-force-hyökkäyksiltä:
Lisää seuraavan muotoinen direktiivi
/etc/nginx/conf.d/limit_req_zone.conf-tiedostoon:limit_req_zone $geoip_data_country_code zone=country_code:10m rate=5r/m;
Tämä luo muistialueen, joka on jaettu nginx-työprosessien kesken. Alue tallentaa kunkin IP-osoitteen tilan ja sen, kuinka usein se on käyttänyt pyyntörajoitettua URL-osoitetta. Yllä oleva direktiivi rajoittaa samasta ISO-maakoodista tulevat pyynnöt viiteen minuutissa (
rate=5r/m).Toinen vaihe vaihtelee sen mukaan, mitkä ja kuinka monta verkkosivustoa haluat suojata:
(Yksi verkkosivusto) Siirry kohtaan Verkkosivustot ja toimialueet > toimialue > välilehti ”Isännöinti ja DNS” > Apache- ja nginx-asetukset, lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään ja napsauta sitten OK:
limit_req zone=country_code;
(Kaikki yhteen isännöintisuunnitelmaan kuuluvat verkkosivustot) Siirry kohtaan Palvelusuunnitelmat ja napsauta sen palvelusuunnitelman nimeä, jonka verkkosivustot haluat suojata. Siirry sitten ”WWW-palvelin”-välilehdelle, lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään ja napsauta OK:
limit_req zone=country_code;
(Kaikki palvelimella isännöidyt verkkosivustot) Lisää seuraava
/etc/nginx/conf.d/limit_req.conf-tiedostoon:limit_req zone=country_code;
Olet rajoittanut yhden tai useamman verkkosivuston pyynnöt IP-osoitteista, joilla on sama ISO-maakoodi, viiteen minuutissa.
Voit myös suojata yhden tai useamman verkkosivun rajoittamalla pyyntöjä IP-osoitteista, joilla on sama ISO-maakoodi. Menettely vaihtelee verkkosivustosi isännöintityypin mukaan:
Apache+nginx-isännöinti
pelkkä nginx-isännöinti
nginx, joka tarjoilee PHP:n suoraan
(Apache+nginx-isännöinti) Tietyn verkkosivun suojaaminen samasta maasta tulevilta brute-force-hyökkäyksiltä:
Lisää seuraavan muotoinen direktiivi
/etc/nginx/conf.d/limit_req_zone.conf-tiedostoon:limit_req_zone $geoip_data_country_code zone=country_code:10m rate=5r/m;
Tämä luo muistialueen, joka on jaettu nginx-työprosessien kesken. Alue tallentaa kunkin IP-osoitteen tilan ja sen, kuinka usein se on käyttänyt pyyntörajoitettua URL-osoitetta. Yllä oleva direktiivi rajoittaa samasta ISO-maakoodista tulevat pyynnöt viiteen minuutissa (
rate=5r/m).Luo mukautettu määritysmalli
nginxDomainVirtualHost.phpkäyttäen tätä toimintatapaa.Etsi seuraava teksti kopioidun oletusmallin lopusta:
<?php if ($VAR->domain->physicalHosting->proxySettings['nginxProxyMode']): ?> location / { <?php if ($VAR->domain->physicalHosting->scriptTimeout): ?> proxy_read_timeout <?php echo min($VAR->domain->physicalHosting->scriptTimeout, 2147483) ?>; <?php endif ?> <?php echo $VAR->includeTemplate('domain/service/proxy.php', $OPT) ?> }
Lisää direktiivit sen jälkeen seuraavasti korvaamalla
example.comtoimialuenimelläsi ja/test-osan sillä tarkalla verkkosivulla, johon haluat soveltaa rajoitusta:<?php if ($VAR->domain->physicalHosting->proxySettings['nginxProxyMode']): ?> location / { <?php if ($VAR->domain->physicalHosting->scriptTimeout): ?> proxy_read_timeout <?php echo min($VAR->domain->physicalHosting->scriptTimeout, 2147483) ?>; <?php endif ?> <?php echo $VAR->includeTemplate('domain/service/proxy.php', $OPT) ?> } <?php if ($VAR->domain->asciiName == 'example.com'): ?> location = /test { limit_req zone=country_code; <?php if ($VAR->domain->physicalHosting->scriptTimeout): ?> proxy_read_timeout <?php echo min($VAR->domain->physicalHosting->scriptTimeout, 2147483) ?>; <?php endif ?> <?php echo $VAR->includeTemplate('domain/service/proxy.php', $OPT) ?> } <?php endif ?>
Suorita seuraava komento tarkistaaksesi, että muokatut mallit ovat kelvollisia PHP-tiedostoja:
php -l nginxDomainVirtualHost.php
Suorita seuraava komento luodaksesi uudet määritystiedostot:
plesk sbin httpdmng --reconfigure-all
Olet rajoittanut pyynnöt verkkosivulle IP-osoitteista, joilla on sama ISO-maakoodi, enintään <b>5</b> pyyntöä minuutissa.
(Pelkkä nginx-isännöinti) Tietyn verkkosivun suojaaminen samasta maasta tulevilta brute-force-hyökkäyksiltä:
Lisää seuraavan muotoinen direktiivi
/etc/nginx/conf.d/limit_req_zone.conf-tiedostoon:limit_req_zone $geoip_data_country_code zone=country_code:10m rate=5r/m;
Tämä luo muistialueen, joka on jaettu nginx-työprosessien kesken. Alue tallentaa kunkin IP-osoitteen tilan ja sen, kuinka usein se on käyttänyt pyyntörajoitettua URL-osoitetta. Yllä oleva direktiivi rajoittaa samasta ISO-maakoodista tulevat pyynnöt viiteen minuutissa (
rate=5r/m).Siirry kohtaan Verkkosivustot ja toimialueet > toimialue > välilehti ”Isännöinti ja DNS” > Apache- ja nginx-asetukset.
Lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään korvaamalla
/testsillä tarkalla verkkosivulla, johon haluat soveltaa rajoitusta:location = /test { limit_req zone=country_code; }Valitse OK.
Olet rajoittanut pyynnöt verkkosivulle IP-osoitteista, joilla on sama ISO-maakoodi, enintään <b>5</b> pyyntöä minuutissa.
(nginx tarjoilee PHP:n suoraan) Tietyn PHP-skriptin suojaaminen samasta maasta tulevilta brute-force-hyökkäyksiltä:
Lisää seuraavan muotoinen direktiivi
/etc/nginx/conf.d/limit_req_zone.conf-tiedostoon:limit_req_zone $geoip_data_country_code zone=country_code:10m rate=5r/m;
Tämä luo muistialueen, joka on jaettu nginx-työprosessien kesken. Alue tallentaa kunkin IP-osoitteen tilan ja sen, kuinka usein se on käyttänyt pyyntörajoitettua URL-osoitetta. Yllä oleva direktiivi rajoittaa samasta ISO-maakoodista tulevat pyynnöt viiteen minuutissa (
rate=5r/m).Luo mukautettu määritysmalli
nginxDomainVirtualHost.phpkäyttäen tätä toimintatapaa.Etsi seuraava teksti kopioidun oletusmallin lopusta:
location ~ \.php(/.*)?$ { <?php if ($VAR->domain->physicalHosting->scriptTimeout): ?> fastcgi_read_timeout <?php echo min($VAR->domain->physicalHosting->scriptTimeout, 2147483) ?>; <?php endif ?> <?php echo $VAR->includeTemplate('domain/service/fpm.php', $OPT) ?> }
Lisää seuraavat direktiivit ennen
limit_req-sisältävää tekstiä korvaamallaexample.comtoimialuenimelläsi ja/test\.php-osan sillä tarkalla PHP-skriptillä, johon haluat soveltaa rajoitusta:<?php if ($VAR->domain->asciiName == 'example.com'): ?> location ~ ^/test\.php$ { limit_req zone=country_code; <?php if ($VAR->domain->physicalHosting->scriptTimeout): ?> fastcgi_read_timeout <?php echo min($VAR->domain->physicalHosting->scriptTimeout, 2147483) ?>; <?php endif ?> <?php echo $VAR->includeTemplate('domain/service/fpm.php', $OPT) ?> } <?php endif ?> location ~ \.php(/.*)?$ { <?php if ($VAR->domain->physicalHosting->scriptTimeout): ?> fastcgi_read_timeout <?php echo min($VAR->domain->physicalHosting->scriptTimeout, 2147483) ?>; <?php endif ?> <?php echo $VAR->includeTemplate('domain/service/fpm.php', $OPT) ?> }
Suorita seuraava komento tarkistaaksesi, että muokatut mallit ovat kelvollisia PHP-tiedostoja:
php -l nginxDomainVirtualHost.php
Suorita seuraava komento luodaksesi uudet määritystiedostot:
plesk sbin httpdmng --reconfigure-all
Olet rajoittanut pyynnöt PHP-skriptiin IP-osoitteista, joilla on sama ISO-maakoodi, enintään <b>5</b> pyyntöä minuutissa.