Viimasel ajal on sagenenud eri võrkudest lähtuv automatiseeritud pahatahtlik liiklus, robotite masspäringud ning DDoS-laadsed ründed veebilehtede ja teenuste vastu. Lisaks võivad märkimisväärset koormust tekitada erinevad indekseerijad, AI-robotid ja muud automatiseeritud kliendid.
Mõnel juhul võib olla vajalik piirata veebilehele ligipääsu ka külastaja asukohariigi järgi – näiteks kui teenus on suunatud ainult kindlate riikide kasutajatele või kui soovitakse vähendada ebavajalikku liiklust piirkondadest, kust reaalseid kliente ei oodata.
Selleks oleme lisanud serveritele GeoIP-põhise riigipõhise ligipääsu piiramise võimaluse.
1. GeoIP piirangu lisamine/aktiveerimine ja näited
2. GeoIP piirangu aktiveerimine ja otsingumootorite robotite lubamine blokeeritud riigist
3. Serveripoolne, automatiseeritud turbemonitori lisatav piirang
GeoIP-põhine piirang võimaldab lubada või keelata veebilehele ligipääsu külastaja IP-aadressi asukohariigi järgi.
Meie serverites on GeoIP riigiinfo Apache veebiserverile juba kättesaadav keskkonnamuutuja kaudu:
MM_COUNTRY_CODE
Selle väärtuseks on tavaliselt kahetäheline ISO riigikood, näiteks:
EE = Eesti FI = Soome SE = Rootsi US = Ameerika Ühendriigid CN = Hiina
Täpsem nimekiri on leitav veebilehelt SIIT ja ISO riigikood veerust “Alpha-2 code”!
Kliendil ei ole vaja GeoIP andmebaasi ega Apache moodulit eraldi aktiveerida. Piiranguid saab lisada oma veebilehe .htaccess faili.
Näiteks Hiina, Venemaa ja Ameerika Ühendriikide blokeerimiseks:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{ENV:MM_COUNTRY_CODE} ^(CN|RU|US)$ [NC]
RewriteRule ^ - [F,L]
</IfModule>
Sellisel juhul saavad kõik ülejäänud riigid veebilehele tavapäraselt ligi.
Näiteks kui veebileht on mõeldud ainult Eesti, Soome, Läti, Leedu ja Rootsi kasutajatele:
<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>
Esimene tingimus:
RewriteCond %{ENV:MM_COUNTRY_CODE} !^$
on oluline. See väldib olukorda, kus GeoIP info puudumise või ajutise tõrke korral blokeeritakse ekslikult kõik külastajad.
Soovi korral võib blokeeritud külastajatele kuvada tavapärase „Forbidden” teate asemel oma vealehte:
ErrorDocument 403 /geo-blocked.html
Näiteks:
# 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
Fail geo-blocked.html peab asuma veebilehe dokumendijuures ning olema ise veebiserverile ligipääsetav.
Blokeeritud päringule tagastatakse endiselt HTTP staatus:
403 Forbidden
GeoIP määramine põhineb IP-aadresside asukohaandmebaasil ning ei ole 100% täpne. VPN-i, proxy, mobiilioperaatori, pilveteenuse või muu vahendava võrgu kasutamisel võib tuvastatud riik erineda kasutaja tegelikust asukohast.
Riigipõhist blokeeringut tuleks seetõttu kasutada täiendava liikluse piiramise ja turvameetmena, mitte kasutaja füüsilise asukoha absoluutse tõendina.
Riigipõhise piirangu rakendamisel tuleb arvestada, et ka otsingumootorite robotid võivad päringuid teha riikidest, mille liiklus on veebilehel blokeeritud.
Näiteks võib Googlebot teha päringuid Ameerika Ühendriikidest. Kui US on blokeeritud, võib see takistada veebilehe indekseerimist Google’i otsingumootoris.
Googleboti ei ole soovitatav lubada ainult User-Agent päise järgi, kuna seda väärtust saab lihtsalt võltsida.
Apache võimaldab kontrollida Googleboti päritolu DNS-i abil. Näiteks saab lubada Eesti, Soome, Läti, Leedu ja Rootsi liikluse ning lisaks kontrollitud Googleboti kui ka FB crawleri:
<IfModule mod_authz_core.c>
<IfModule mod_authz_host.c>
<RequireAny>
# Lubatud riigid
Require expr "reqenv('MM_COUNTRY_CODE') =~ m#^(EE|FI|LV|LT|SE)$#"
# Kui GeoIP tulemust ei ole, ära blokeeri külastajat
Require expr "reqenv('MM_COUNTRY_CODE') == ''"
# Kontrollitud Googlebot
Require host googlebot.com
</RequireAny>
</IfModule>
</IfModule>
Require host googlebot.com ei kontrolli ainult brauseri või roboti esitatud nime. Apache teeb IP-aadressile pöörd-DNS päringu ning kontrollib seejärel saadud hostinime uuesti ettepoole DNS päringuga.
Seetõttu ei piisa ligipääsuks lihtsalt Googlebot User-Agent päise võltsimisest.
Kui on vaja lubada ka FB lingivaated jms. Siis võib koodile lisada ka:
<RequireAll>
# Kontrollitud Facebook
Require expr %{HTTP_USER_AGENT} =~ /(?i)facebookexternalhit/
<RequireAny>
Require host .facebook.com
Require host fbsv.net
</RequireAny>
</RequireAll>
Meta-ExternalAgent on välja jäetud, kuna see on mõeldud ainult FB enda AI koolitumise jaoks! Samuti ka teised FB botid, kuna need ei ole otseselt vajalikud reeglina veebilehe enda toimivuse/FB indekseerimise jaoks. Lisaks on pandud tingimus, et ei saaks võltsida UA’d, nagu oleks tegemist reaalse FB botiga, kuid tegelikult tuleb liiklus väljastpoolt FB IP ala!
NB! Seda konfiguratsiooni tuleb kasutada varasema GeoIP RewriteRule ... [F] blokeeringu asemel, mitte sellele lisaks.
Kui soovitakse blokeerida ainult USA tavakasutajad, kuid Googlebot lubada, võib kasutada näiteks:
<RequireAny>
Require expr "reqenv('MM_COUNTRY_CODE') != 'US'"
Require expr "reqenv('MM_COUNTRY_CODE') == ''"
Require host googlebot.com
</RequireAny>
Lisaks kliendi enda .htaccess reeglitele võib serveripoolne turbemonitor tuvastada ebatavaliselt suure või pahatahtliku liikluse ning rakendada vajadusel lisaks ka ajutise GeoIP-põhise piirangu.
Sellise piirangu eesmärk on vähendada näiteks:
Serveripoolne piirang võib olla rakendatud konkreetsele domeenile või teenusele ning see ei sõltu kliendi enda .htaccess faili sisust.
Selline piirang võib olla ajutine ning seda võidakse muuta või eemaldada pärast probleemse liikluse lõppemist.
Kui veebilehe külastajad saavad ootamatult riigipõhise 403 veateate tasub kontrollida domeeni või konto juurkausta .htaccess failist, ega sinna ei ole lisatud ridu (kus “(FI|EE|LT|LV|SE)” sisu võib erineda, kuid on rida “# 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
Soovikorral võib BEGIN ja END tagide vahel sisu muuta, kui ka selle sisu eemaldada, kui murekoht on möödas ja soovite liikluse taas avada oma veebilehele ka mujalt, kui vastavates määrangutes näidatud!