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

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- ja get-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.

  1. Rekisteröidy ilmaiseksi GeoLite2-tilille.

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

  3. Avaa /etc/GeoIP.conf-tiedosto muokattavaksi. GeoIP.conf-tiedoston polku voi vaihdella Linux-jakelusta riippuen.

  4. Liitä tilitunnuksesi, käyttöoikeusavaimesi ja niiden tietokantojen versiotunnukset, jotka haluat ladata. Erottele useat versiot välilyönneillä. Kun olet suorittanut asennuksen, tallenna tiedosto.

  5. Voit ladata tietokannat suorittamalla komennon sudo geoipupdate tai sudo 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:

  1. Kirjaudu Plesk-palvelimellesi SSH:n kautta.

  2. 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:

  1. 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.mmdb

    CentOS-, 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.

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

$geoip2_metadata_country_build

GeoLite2-Country-tietokannan rakennusaika

$geoip2_data_country_code

Maan kaksikirjaiminen ISO-koodi

$geoip2_data_country_name

Maan nimi englanniksi

$geoip2_data_city_name

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

  1. Siirry kohtaan Verkkosivustot ja toimialueet > toimialue > välilehti ”Isännöinti ja DNS” > Apache- ja nginx-asetukset.

  2. Lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään ja napsauta sitten OK.

    if ($geoip2_data_country_code = "XX") {
            return 403;
    }
    

    Jossa XX on sen maan kaksikirjaiminen ISO-koodi, jonka kävijät haluat estää (esimerkiksi AQ Antarktikselle).

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:

  1. Siirry kohtaan Verkkosivustot ja toimialueet > toimialue > välilehti ”Isännöinti ja DNS” > Apache- ja nginx-asetukset.

  2. 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 (esimerkiksi test).

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

  1. Siirry kohtaan Palvelusuunnitelmat ja napsauta sen palvelusuunnitelman nimeä, jonka verkkosivustojen pääsy haluat estää.

  2. 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 XX on sen maan kaksikirjaiminen ISO-koodi, jonka kävijät haluat estää (esimerkiksi AQ Antarktikselle).

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

  1. Luo mukautettu määritysmalli nginxDomainVirtualHost.php käyttäen tätä toimintatapaa.

  2. 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 XX on sen maan kaksikirjaiminen ISO-koodi, jonka kävijät haluat estää (esimerkiksi AQ Antarktikselle).

  3. Suorita seuraava komento tarkistaaksesi, että muokatut mallit ovat kelvollisia PHP-tiedostoja:

    php -l nginxDomainVirtualHost.php
    
  4. 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ä:

  1. 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).

    Lue lisää nginx:n nopeusrajoituksesta.

  2. 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ä:

  1. 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).

    Lue lisää nginx:n nopeusrajoituksesta.

  2. Luo mukautettu määritysmalli nginxDomainVirtualHost.php käyttäen tätä toimintatapaa.

  3. 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.com toimialuenimellä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 ?>
    
  4. Suorita seuraava komento tarkistaaksesi, että muokatut mallit ovat kelvollisia PHP-tiedostoja:

    php -l nginxDomainVirtualHost.php
    
  5. 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ä:

  1. 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).

    Lue lisää nginx:n nopeusrajoituksesta.

  2. Siirry kohtaan Verkkosivustot ja toimialueet > toimialue > välilehti ”Isännöinti ja DNS” > Apache- ja nginx-asetukset.

  3. Lisää seuraava ”Ylimääräiset nginx-direktiivit” -tekstikenttään korvaamalla /test sillä tarkalla verkkosivulla, johon haluat soveltaa rajoitusta:

    location = /test {
        limit_req zone=country_code;
    }
    
  4. 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ä:

  1. 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).

    Lue lisää nginx:n nopeusrajoituksesta.

  2. Luo mukautettu määritysmalli nginxDomainVirtualHost.php käyttäen tätä toimintatapaa.

  3. 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ä korvaamalla example.com toimialuenimellä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) ?>
    }
    
  4. Suorita seuraava komento tarkistaaksesi, että muokatut mallit ovat kelvollisia PHP-tiedostoja:

    php -l nginxDomainVirtualHost.php
    
  5. 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.