geoblokowanie
| Po angielsku | geoblocking |
|---|---|
| Którą formą pisać | obie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski. |
| Inne formy | blokowanie ruchu z wybranych krajów · blokada krajów · geoblocking · blokowanie geograficzne · filtrowanie GeoIP |
| Kategoria | Sieć i infrastruktura obronna |
Geoblokowanie (geoblocking) to filtrowanie ruchu sieciowego według kraju, do którego baza geolokalizacji przypisuje adres IP odwiedzającego. Serwer albo usługa pośrednicząca odrzuca żądania z wybranych państw albo, odwrotnie, przepuszcza tylko ruch z listy dozwolonych krajów [1]. W bezpieczeństwie stron internetowych geoblokowanie służy głównie do ograniczania szumu: automatycznych skanów, prób logowania i spamu. Nie jest zabezpieczeniem samym w sobie, bo przypisanie adresu do kraju jest przybliżone [3], a atakujący może łatwo zmienić adres wyjściowy.
Jak działa
Podstawą jest baza, która mapuje zakresy adresów IP na kody krajów. Serwer WWW sprawdza adres klienta w tej bazie i ustawia zmienną z dwuliterowym kodem państwa. Moduł ngx_http_geoip_module serwera nginx tworzy zmienne zależne od adresu klienta na podstawie prekompilowanych baz MaxMind, na przykład $geoip_country_code [2]. Moduł nie jest wbudowany domyślnie; trzeba go włączyć przy kompilacji [2]. Na hostingu z Apache podobną rolę pełni zmienna GEOIP_COUNTRY_CODE, którą można wykorzystać w dyrektywach pliku .htaccess [1].
Gdy przed serwerem stoi CDN albo reverse proxy, geolokalizację wykonuje pośrednik. Cloudflare dodaje wtedy do każdego żądania przekazywanego do serwera źródłowego nagłówek CF-IPCountry z krajem odwiedzającego [4]. Decyzja o blokadzie może zapaść na brzegu sieci, zanim żądanie dotrze do serwera.
Przebieg decyzji pokazuje schemat poniżej.
Przykład reguły dopuszczającej do strony tylko ruch z Polski i Niemiec, w składni z dokumentacji hostingu [1]:
SetEnvIf GEOIP_COUNTRY_CODE PL AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE DE AllowCountry
Allow from env=AllowCountry
Deny from all
Odmiany
Geoblokowanie stosuje się w dwóch trybach i na trzech poziomach infrastruktury. Tryb listy dozwolonej jest bardziej restrykcyjny i przypomina białą listę adresów IP, tylko z krajem zamiast pojedynczych adresów.
| Wariant | Co robi | Gdzie działa |
|---|---|---|
| Lista blokowanych krajów | odrzuca ruch z wybranych państw [1] | .htaccess, konfiguracja serwera |
| Lista dozwolonych krajów | przepuszcza tylko wskazane państwa [1] | .htaccess, konfiguracja serwera |
| Filtr na brzegu | decyzja w usłudze pośredniczącej przed serwerem [4] | CDN, WAF w chmurze |
| Filtr w aplikacji | wtyczka sprawdza kraj w PHP | WordPress |
Filtr może obejmować całą witrynę albo tylko wybrane ścieżki, na przykład panel administracyjny i formularz logowania.
W WordPressie
W WordPressie geoblokowanie pojawia się najczęściej jako sposób na ograniczenie ataków siłowych (brute-force) na wp-login.php i xmlrpc.php. Oficjalny podręcznik administracji jest wobec tego ostrożny: zaleca unikanie stałych list blokowanych krajów, bo mogą blokować prawowitych użytkowników i są trudne w utrzymaniu [5]. Zamiast tego proponuje ograniczenie dostępu do strony logowania do konkretnych adresów IP, na przykład dyrektywą Require ip w Apache albo allow i deny w nginx [5].
Ten sam podręcznik wskazuje, że XML-RPC jest częstym celem prób odgadywania haseł, szczególnie przez metodę system.multicall [5]. Zaleca też, by filtrować ruch na brzegu albo na serwerze, a nie wtyczką, bo wtyczka działa w PHP i pod silnym atakiem nadal zużywa zasoby [5]. Dotyczy to także geoblokady: reguła w konfiguracji serwera albo w usłudze brzegowej odrzuca żądanie, zanim uruchomi się WordPress.
Drugi problem to ustalenie adresu klienta. Za reverse proxy albo CDN serwer widzi adres pośrednika, a prawdziwy adres jest w nagłówku X-Forwarded-For. MDN ostrzega, że ten nagłówek można sfałszować, więc do kontroli dostępu wolno ufać tylko wartościom dodanym przez znane, zaufane pośredniki; jeśli serwer jest dostępny wprost z internetu, żadna część listy nie jest wiarygodna [6]. Wtyczka, która geolokalizuje adres z tego nagłówka bez takiej weryfikacji, da się oszukać jednym dopisanym nagłówkiem.
Ograniczenia
Geolokalizacja IP nie jest dokładna. MaxMind szacuje trafność swoich baz na poziomie kraju na 99,8%, ale zastrzega, że nie może zagwarantować pełnej dokładności, a precyzja zależy od kraju, rodzaju łącza i praktyk operatorów [3]. Cloudflare określa geolokalizację jako szacunek, nie naukę ścisłą, i nie daje gwarancji jej trafności [4]. Bazy są aktualizowane, bo przydział adresów się zmienia [4], więc reguła poprawna dziś może jutro odciąć innego klienta.
Najważniejsze ograniczenie to łatwość obejścia. Gdy ktoś korzysta z VPN albo usługi anonimizującej, baza wskaże kraj serwera pośredniczącego, a nie użytkownika [3]. Atakujący może więc wybrać adres wyjściowy w dopuszczonym kraju. Ruch z botnetu pochodzi z przejętych urządzeń w wielu państwach, także w tych, które witryna obsługuje.
Skutki uboczne dotyczą prawowitych użytkowników: klientów w podróży, pracowników zdalnych, usług zewnętrznych, które łączą się ze stroną z serwerów za granicą, na przykład bramek płatności wysyłających powiadomienia. Zbyt szeroka blokada może też odciąć roboty wyszukiwarek.
Jak stosować
Geoblokowanie ma sens jako jedna z warstw utwardzania, nie jako główna ochrona. Dobre praktyki wynikające z przytoczonych źródeł:
- Ograniczać zakres do wrażliwych ścieżek, takich jak panel i logowanie, a nie całej witryny; tam jeszcze lepiej sprawdza się lista konkretnych adresów [5].
- Filtrować na brzegu albo na serwerze, nie w PHP [5].
- Za pośrednikiem brać kraj z nagłówka ustawianego przez zaufany pośrednik, nie z danych od klienta [6].
- Łączyć filtr z limitem prób logowania, rate limiting i uwierzytelnianiem dwuskładnikowym, które działają niezależnie od kraju.
- Okresowo przeglądać reguły i logi odrzuconych żądań, bo bazy się zmieniają [4].
Znaczenie prawne
W prawie Unii Europejskiej słowo „geoblokowanie” ma inne znaczenie niż filtr bezpieczeństwa. Oznacza nieuzasadnione blokowanie geograficzne i dyskryminację klientów ze względu na przynależność państwową, której zakazuje rozporządzenie (UE) 2018/302, stosowane od 3 grudnia 2018 roku [7]. W sprawach naruszeń konsumenci mogą zwracać się do Urzędu Ochrony Konkurencji i Konsumentów [7]. Sklep internetowy, który z powodów bezpieczeństwa blokuje ruch z krajów Unii, powinien więc sprawdzić, czy taka blokada nie wchodzi w zakres tego zakazu.
Przypisy
7- [1] Jak zablokować ruch z konkretnego kraju? · cyber_Folks
- [2] Module ngx_http_geoip_module · nginx.org
- [3] Geolocation Accuracy · MaxMind
- [4] IP geolocation · Cloudflare
- [5] Brute Force Attacks — Advanced Administration Handbook · WordPress.org
- [6] X-Forwarded-For header · MDN Web Docs
- [7] Co to jest zakaz geoblokowania? · UOKiK / konsument.gov.pl