Viime aikoina eri verkoista lähtöisin oleva automatisoitu haitallinen liikenne, bottien massapyynnöt sekä DDoS-tyyppiset hyökkäykset verkkosivustoja ja palveluita vastaan ovat lisääntyneet. Lisäksi erilaiset indeksoijat, AI-botit ja muut automatisoidut asiakkaat voivat aiheuttaa merkittävää kuormitusta.
Joissakin tapauksissa voi myös olla tarpeen rajoittaa verkkosivustolle pääsyä kävijän sijaintimaan perusteella – esimerkiksi jos palvelu on tarkoitettu vain tiettyjen maiden käyttäjille tai jos halutaan vähentää tarpeetonta liikennettä alueilta, joilta todellisia asiakkaita ei odoteta.

Tätä varten olemme lisänneet palvelimillemme GeoIP-pohjaisen maakohtaisen pääsynrajoituksen.
1. GeoIP-rajoituksen lisääminen/käyttöönotto ja esimerkit
2. GeoIP-rajoituksen käyttöönotto ja hakukonerobottien salliminen estetystä maasta
3. Palvelinpuoleisen automaattisen tietoturvamonitorin lisäämä rajoitus


1. GeoIP-rajoituksen lisääminen/käyttöönotto ja esimerkit

GeoIP-pohjaisen rajoituksen avulla verkkosivustolle pääsy voidaan sallia tai estää kävijän IP-osoitteen sijaintimaan perusteella.

Palvelimillamme GeoIP-maatieto on jo Apache-verkkopalvelimen käytettävissä seuraavan ympäristömuuttujan kautta:

MM_COUNTRY_CODE

Sen arvo on yleensä kaksikirjaiminen ISO-maakoodi, esimerkiksi:

EE = Viro
FI = Suomi
SE = Ruotsi
US = Yhdysvallat
CN = Kiina

Tarkempi luettelo löytyy verkkosivulta TÄÄLTÄ, ja ISO-maakoodi löytyy sarakkeesta “Alpha-2 code”!

Asiakkaan ei tarvitse ottaa GeoIP-tietokantaa tai Apache-moduulia erikseen käyttöön. Rajoitukset voidaan lisätä verkkosivuston .htaccess-tiedostoon.

– Esimerkki: tiettyjen maiden estäminen

Esimerkiksi Kiinan, Venäjän ja Yhdysvaltojen estäminen:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{ENV:MM_COUNTRY_CODE} ^(CN|RU|US)$ [NC]
RewriteRule ^ - [F,L]

</IfModule>

Tällöin käyttäjät kaikista muista maista pääsevät verkkosivustolle normaalisti.

– Esimerkki: pääsyn salliminen vain valituista maista

Esimerkiksi jos verkkosivusto on tarkoitettu vain Viron, Suomen, Latvian, Liettuan ja Ruotsin käyttäjille:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{ENV:MM_COUNTRY_CODE} !^$
RewriteCond %{ENV:MM_COUNTRY_CODE} !^(EE|FI|LV|LT|SE)$ [NC]
RewriteRule ^ - [F,L]

</IfModule>

Ensimmäinen ehto:

RewriteCond %{ENV:MM_COUNTRY_CODE} !^$

on tärkeä. Se estää tilanteen, jossa kaikki kävijät estettäisiin vahingossa, jos GeoIP-tietoa ei ole saatavilla tai palvelussa esiintyy tilapäinen häiriö.

– Mukautettu 403-virhesivu

Haluttaessa estetyille kävijöille voidaan näyttää tavallisen ”Forbidden”-viestin sijasta oma virhesivu:

ErrorDocument 403 /geo-blocked.html

Esimerkiksi:

# BEGIN GeoIP Block
<If "reqenv('MM_COUNTRY_CODE') != '' && reqenv('MM_COUNTRY_CODE') !~ m#^(EE|FI|LV|LT|SE)$#">
    ErrorDocument 403 /geo-blocked.html

    <IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteCond %{REQUEST_URI} !^/geo-blocked\.html$
        RewriteRule ^ - [F,L]
    </IfModule>
</If>
# END GeoIP Block

Tiedoston geo-blocked.html tulee sijaita verkkosivuston document root -hakemistossa ja sen tulee olla itsessään verkkopalvelimen kautta käytettävissä.

Estetylle pyynnölle palautetaan edelleen HTTP-tila:

403 Forbidden

– Tärkeää

GeoIP-tunnistus perustuu IP-osoitteiden sijaintitietokantaan eikä ole 100-prosenttisen tarkka. VPN:n, proxyn, mobiilioperaattorin, pilvipalvelun tai muun välittävän verkon käytön yhteydessä tunnistettu maa voi poiketa käyttäjän todellisesta sijainnista.

Maakohtaista estoa tulisi siksi käyttää täydentävänä liikenteen rajoitus- ja tietoturvatoimenpiteenä, ei ehdottomana todisteena käyttäjän fyysisestä sijainnista.


2. GeoIP-rajoituksen käyttöönotto ja hakukonerobottien salliminen estetystä maasta

Maakohtaista rajoitusta käytettäessä on huomioitava, että myös hakukoneiden robotit voivat tehdä pyyntöjä maista, joiden liikenne on verkkosivustolla estetty.

Esimerkiksi Googlebot voi tehdä pyyntöjä Yhdysvalloista. Jos US on estetty, tämä voi haitata verkkosivuston indeksointia Googlen hakukoneessa.

Googlebotia ei suositella sallittavaksi pelkästään User-Agent-otsakkeen perusteella, koska tämä arvo voidaan helposti väärentää.

Apache voi tarkistaa Googlebotin alkuperän DNS:n avulla. Esimerkiksi Viron, Suomen, Latvian, Liettuan ja Ruotsin liikenne voidaan sallia ja lisäksi sallia varmennettu Googlebot:

<IfModule mod_authz_core.c>
<IfModule mod_authz_host.c>

<RequireAny>

    # Sallitut maat
    Require expr "reqenv('MM_COUNTRY_CODE') =~ m#^(EE|FI|LV|LT|SE)$#"

    # Jos GeoIP-tulosta ei ole, älä estä kävijää
    Require expr "reqenv('MM_COUNTRY_CODE') == ''"

    # Varmennettu Googlebot
    Require host googlebot.com

</RequireAny>

</IfModule>
</IfModule>

Require host googlebot.com ei tarkista ainoastaan selaimen tai robotin ilmoittamaa nimeä. Apache tekee IP-osoitteelle käänteisen DNS-kyselyn ja tarkistaa tämän jälkeen saadun isäntänimen uudelleen eteenpäin tehtävällä DNS-kyselyllä.

Siksi pelkkä Googlebot User-Agent -otsakkeen väärentäminen ei riitä pääsyn saamiseksi.

HUOM! Tätä asetusta tulee käyttää aikaisemman GeoIP RewriteRule ... [F] -estosäännön sijasta, ei sen lisäksi.

Jos halutaan estää vain tavalliset käyttäjät Yhdysvalloista mutta sallia Googlebot, voidaan käyttää esimerkiksi:

<RequireAny>

    Require expr "reqenv('MM_COUNTRY_CODE') != 'US'"
    Require expr "reqenv('MM_COUNTRY_CODE') == ''"
    Require host googlebot.com

</RequireAny>

3. Palvelinpuoleisen automaattisen tietoturvamonitorin lisäämä rajoitus

Asiakkaan omien .htaccess-sääntöjen lisäksi palvelinpuoleinen tietoturvamonitori voi havaita poikkeuksellisen suuren tai haitallisen liikenteen ja tarvittaessa ottaa käyttöön myös väliaikaisen GeoIP-pohjaisen rajoituksen.

Tällaisen rajoituksen tarkoituksena on vähentää esimerkiksi:

  • – automatisoitujen haitallisten bottien liikennettä;
  • – erittäin suurella pyyntötiheydellä tapahtuvaa indeksointia;
  • – DDoS-tyyppistä HTTP-liikennettä;
  • – toistuvia hyökkäyksiä tietyistä maista tai verkoista;
  • – verkkosovelluksen, PHP:n tai tietokannan liiallista kuormitusta.

Palvelinpuoleinen rajoitus voidaan kohdistaa tiettyyn verkkotunnukseen tai palveluun, eikä se riipu asiakkaan oman .htaccess-tiedoston sisällöstä.

Tällainen rajoitus voi olla väliaikainen ja sitä voidaan muuttaa tai se voidaan poistaa ongelmallisen liikenteen päätyttyä.

Jos verkkosivuston kävijät saavat odottamatta maakohtaisen 403-virheen, kannattaa tarkistaa verkkotunnuksen tai tilin juurihakemiston .htaccess-tiedostosta, onko sinne lisätty seuraavia rivejä (kohdan “(FI|EE|LT|LV|SE)” sisältö voi olla erilainen, mutta mukana on rivi “# BEGIN automated GeoIP Block”):

# BEGIN automated GeoIP Block
<If "reqenv('MM_COUNTRY_CODE') != '' && reqenv('MM_COUNTRY_CODE') !~ m#^(FI|EE|LT|LV|SE)$#">
    ErrorDocument 403 "<div style='text-align:center'><b>403</b> - Access to this website is restricted based on IP geolocation</div>"

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^ - [F,L]
    </IfModule>
</If>
# END automated GeoIP Block

Haluttaessa BEGIN- ja END-tagien välistä sisältöä voidaan muuttaa tai se voidaan poistaa kokonaan, kun ongelmatilanne on päättynyt ja verkkosivuston liikenne halutaan jälleen avata myös muualta kuin asetuksissa määritellyistä maista.

Radicenter 2026