Jak zablokować ruch na stronie z konkretnego kraju?

Przy pomocy pliku .htaccess, można zablokować dostęp do naszych stron i aplikacji WWW poprzez weryfikację GeoIP adresu IP próbującego nawiązać połączenie. Z tego artykułu dowiesz się, jak to zrobić.

Na samej górze pliku .htaccess dotyczącego treści, którą chcemy ograniczyć pod względem geolokalizacji, musimy dodać odpowiednią regułę.

Poniżej znajduje się prosty przykład blokujący dostęp wszystkim krajom z wyjątkiem Polski i Niemiec do całej treści jaką obejmuje:

<IfModule mod_geoip.c>
    GeoIPEnable on
    RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(PL|DE)$ 
RewriteRule ^(.*)$ - [F,L,QSA]
</IfModule>

Zwróć uwagę na poniższy fragment kodu (w powyższym przykładzie znajdziesz go w 4. wierszu):

!^(PL|DE)$
  • !” powoduje, że blokada działa dla wszystkich GeoIP poza wskazanymi w nawiasach – jego brak spowoduje, że TYLKO kraje w nawiasach zostaną zablokowane
  • Kolejne kraje można dodawać oddzielając je znakiem „|

Zwróć uwagę na poniższy fragment kodu (w przykładzie na górze artykułu znajdziesz go w 5. wierszu):

^(.*)$ - [F,L,QSA]
  • (.)* – ten zapis oznacza dowolną ścieżkę – działa na wszystko
  • F – definiuje, że błąd blokady wyświetli 403
  • L  – wstrzymuje wykonywanie kolejnych reguł w .htaccess
  • QSA – zachowuje ciąg zapytań

Poza powyższym przykładem, można użyć tej reguły bardziej wybiórczo lub zdefiniować, co zostanie wyświetlone dla zablokowanych GeoIP.

Przykładowa reguła:

<IfModule mod_geoip.c>
    GeoIPEnable on
    RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(PL|DE)$ 
RewriteCond %{REQUEST_URI} !/wyjatek\.html$

RewriteRule ^(.*)$ - [F,L,QSA]
</IfModule>

Wyłączenie pliku HTML spod działania reguły

Dodanie wiersza:

RewriteCond %{REQUEST_URI} !/wyjatek\.html$

spowoduje, że reguła nie zadziała dla pliku wyjatek.html.

 

 <IfModule mod_geoip.c>
    GeoIPEnable on
    RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(PL|DE)$ 
RewriteCond %{REQUEST_URI} !/wyjatek\.html$

RewriteRule ^(.*)$ /wyjatek.html [F,L,QSA]
</IfModule>

Wyświetlenie treści pliku HTML

Zapis:

RewriteRule ^(.*)$ /wyjatek.html [F,L,QSA]

spowoduje, że w przypadku połączenia z zablokowanego GeoIP, zostanie wyświetlona treść pliku wyjatek.html (bez zmiany adresu w przeglądarce)

 

Z kolei zmiana w powyższym zapisie F na R=302 spowoduje, że zostanie wyświetlona treść wyjatek.html wraz ze zmianą adresu w przeglądarce:

 RewriteRule ^(.*)$ /wyjatek.html [R=302,L,QSA]

Przekierowanie na inny adres

W przypadku takiego zapisu, próba wejścia na stronę przekieruje nas na https://home.pl:

RewriteRule ^(.*)$ https://home.pl [R=301,L] 

Zablokowanie dostępu tylko do wskazanego pliku

Poniższy zapis spowoduje, że zostanie zablokowany tylko dostęp do pliku index.html:

RewriteRule ^(index)\.html$ - [F,L,QSA]

Z kolei poniższy zapis sprawi, że zostanie zablokowany dostęp do plików index.html, test.html, przyklad.html:

RewriteRule ^(index|test|przyklad)\.html$ - [F,L,QSA]

 

Istnieją oczywiście inne rozwiązania, które można stworzyć posiłkując się dokumentacją Apache, jeżeli więc jakiś przykład nie jest tu opisany, nie znaczy to, że takie rozwiązanie jest niemożliwe. Powyższe reguły są przykładowe i są jednymi z najczęściej wykorzystywanych.
  • Czy artykuł był pomocny ?
  • Tak   Nie
lub