Глава 16. Условия геолокации¶
Условия геолокации позволяют применять политики на основе географического расположения клиента (source) или целевого сервера (destination). Данные геолокации определяются по IP-адресу с помощью встроенной базы GeoIP (DB-IP Lite, формат .geoip).
В BlueCoat для геолокации предусмотрено единственное условие client.address.country=, которое проверяет страну клиента по IP-адресу. В Redcoat реализован расширенный набор из 10 условий, покрывающий как source, так и destination, с поддержкой регионов, городов, ASN и организаций.
Синтаксис ключевых слов. Где у BlueCoat есть имя (страна клиента) — ведущим является BlueCoat-синтаксис client.address.country= / client.effective_address.country=. Для страны назначения имя BlueCoat — supplier.country= (origin-сервер). Для остальных destination-условий (регион, город, ASN, организация) и source-гео без имени в BlueCoat используется синтаксис Redcoat Geo.Src.* / Geo.Dst.* (регистронезависимый). Форма Geo.Src.Country для страны клиента оставлена как устаревший alias.
Источники данных. Для определения местоположения используется два источника с приоритетом:
1. rgeoip (локальная база .geoip) — country, region, city. ASN и org не содержатся в базе.
2. CDN-заголовки (X-GeoIP-Country, CF-IPCountry и др.) — запасной источник, если rgeoip не дал результата. Основной источник для ASN/org.
Примечание: Для forward proxy IP клиента обычно является приватным (RFC 1918) — геолокация source в этом случае бесполезна. Геолокация destination значительно полезнее для задач блокировки по странам. Для reverse proxy ситуация обратная: source geo ценна (блокировка стран-источников атак), а destination — это собственный сервер.
16.1. client.address.country= — страна клиента¶
Проверяет страну клиента по его IP-адресу. Значение — двухбуквенный код страны по стандарту ISO 3166-1 alpha-2 (например, RU, US, CN). Допускается указание одного или нескольких значений в виде списка.
Принимаемые имена (все эквивалентны, одно условие
GeoSrcCountry): -client.address.country=— основное имя (как в BlueCoat); -client.effective_address.country=— имя BlueCoat для «эффективного» адреса клиента; -Geo.Src.Country=— устаревший alias Redcoat (оставлен для обратной совместимости).
Синтаксис:
client.address.country=country_code
client.address.country=(country_code, ...)
client.effective_address.country=(country_code, ...)
Geo.Src.Country=country_code ; устаревший alias
Где: country_code — двухбуквенный код ISO 3166-1 alpha-2.
Тип значения: список строк.
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Блокировка трафика от клиентов из определённых стран
client.address.country=(KP, IR, SY) deny
; Разрешить только клиентов из России и Казахстана
client.address.country=(RU, KZ) allow
deny
; Одна страна
client.address.country=CN deny
; По «эффективному» адресу клиента (после разрешения через XFF или переопределения)
client.effective_address.country=(KP, IR) deny
См. также: supplier.country (16.6), client.address= (7.1).
16.2. Geo.Src.Region — регион клиента¶
Проверяет регион (штат, область, край) клиента по его IP-адресу. Значение -- строковое название региона, как оно представлено в базе GeoIP (например, California, Moscow).
Расширение Redcoat. В BlueCoat аналога нет.
Синтаксис:
Где: region_name -- название региона (строка). Для названий с пробелами используйте кавычки.
Тип значения: список строк.
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Фильтрация по региону
Geo.Src.Region=California allow
; Несколько регионов (кавычки для названий с пробелами)
Geo.Src.Region=("New York", California, Texas) allow
См. также: Geo.Src.City (16.3), Geo.Src.Country (16.1).
16.3. Geo.Src.City — город клиента¶
Проверяет город клиента по его IP-адресу. Значение -- строковое название города из базы GeoIP.
Расширение Redcoat. В BlueCoat аналога нет.
Синтаксис:
Где: city_name -- название города (строка). Для названий с пробелами используйте кавычки.
Тип значения: список строк.
Допустимые слои: <Proxy>
Примеры:
<Proxy>
Geo.Src.City=Moscow deny
; Несколько городов
Geo.Src.City=(Moscow, "Saint Petersburg", Novosibirsk) allow
См. также: Geo.Src.Region (16.2), Geo.Src.Country (16.1).
16.4. Geo.Src.ASN — номер автономной системы клиента¶
Проверяет номер автономной системы (Autonomous System Number) клиента по его IP-адресу. ASN идентифицирует сетевого оператора или провайдера.
Расширение Redcoat. В BlueCoat аналога нет.
Важно: значение -- числовое, не строковое. Указывайте номер ASN без префикса
AS.
Синтаксис:
Где: asn_number -- числовой номер ASN (32-битное беззнаковое целое).
Тип значения: список чисел.
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Блокировка трафика от известных хостинг-провайдеров
Geo.Src.ASN=(14061, 16276, 24940) deny ; DigitalOcean, OVH, Hetzner
; Одна AS
Geo.Src.ASN=15169 deny ; Google (AS15169)
См. также: Geo.Src.Org (16.5), Geo.Dst.ASN (16.9).
16.5. Geo.Src.Org — организация клиента¶
Проверяет название организации-владельца IP-адреса клиента. Поддерживает сопоставление по шаблону и списки.
Расширение Redcoat. В BlueCoat аналога нет.
Синтаксис:
Где: org_name -- строковое название организации. Поддерживает точное совпадение, шаблон с подстановочным символом (*), подстроковое сопоставление.
Тип значения: строковый (поддерживает шаблоны с подстановочным символом, списки, подстроки).
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Блокировка трафика от определённого провайдера
Geo.Src.Org="Hetzner Online GmbH" deny
; Wildcard
Geo.Src.Org="Google*" allow
См. также: Geo.Src.ASN (16.4), Geo.Dst.Org (16.10).
16.6. supplier.country — страна назначения¶
Проверяет страну целевого (origin) сервера по его IP-адресу — геолокация хоста, с которого получен контент ответа. Значение -- двухбуквенный код ISO 3166-1 alpha-2. Имя как в BlueCoat. Одно из наиболее полезных условий для forward proxy: блокировка/разрешение трафика по странам назначения.
Синтаксис:
Где: country_code -- двухбуквенный код ISO 3166-1 alpha-2.
Тип значения: список строк.
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Геоблокировка: запретить трафик в санкционные страны
supplier.country=(KP, IR, SY, CU) deny
; Разрешить только трафик внутри СНГ
supplier.country=(RU, BY, KZ, AM, KG) allow
deny
; Логировать трафик в определённые страны
supplier.country=(CN, HK) access_log(yes)
См. также: Geo.Src.Country (16.1), Geo.Dst.Region (16.7).
16.7. Geo.Dst.Region — регион назначения¶
Проверяет регион целевого сервера по его IP-адресу.
Расширение Redcoat. В BlueCoat аналога нет.
Синтаксис:
Где: region_name -- название региона (строка).
Тип значения: список строк.
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Ограничить доступ только к серверам в определённых регионах
Geo.Dst.Region=("North Holland", "South Holland") allow
См. также: supplier.country (16.6), Geo.Dst.City (16.8).
16.8. Geo.Dst.City — город назначения¶
Проверяет город целевого сервера по его IP-адресу.
Расширение Redcoat. В BlueCoat аналога нет.
Синтаксис:
Где: city_name -- название города (строка).
Тип значения: список строк.
Допустимые слои: <Proxy>
Примеры:
См. также: Geo.Dst.Region (16.7), supplier.country (16.6).
16.9. Geo.Dst.ASN — номер автономной системы назначения¶
Проверяет номер автономной системы целевого сервера. Позволяет фильтровать трафик по сетевому оператору назначения.
Расширение Redcoat. В BlueCoat аналога нет.
Важно: значение -- числовое, не строковое. Указывайте номер ASN без префикса
AS.
Синтаксис:
Где: asn_number -- числовой номер ASN (32-битное беззнаковое целое).
Тип значения: список чисел.
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Разрешить только трафик к Google и Cloudflare
Geo.Dst.ASN=(15169, 13335) allow
; Блокировка определённых хостинг-провайдеров
Geo.Dst.ASN=14061 deny ; DigitalOcean
См. также: Geo.Dst.Org (16.10), Geo.Src.ASN (16.4).
16.10. Geo.Dst.Org — организация назначения¶
Проверяет название организации-владельца IP-адреса целевого сервера.
Расширение Redcoat. В BlueCoat аналога нет.
Синтаксис:
Где: org_name -- строковое название организации. Поддерживает точное совпадение, шаблон с подстановочным символом (*), подстроковое сопоставление.
Тип значения: строковый (поддерживает шаблоны с подстановочным символом, списки, подстроки).
Допустимые слои: <Proxy>
Примеры:
<Proxy>
; Разрешить трафик только к определённому провайдеру
Geo.Dst.Org="Cloudflare*" allow
; Блокировка трафика к определённым хостинг-провайдерам
Geo.Dst.Org=("Hetzner Online GmbH", "OVH SAS") deny
См. также: Geo.Dst.ASN (16.9), Geo.Src.Org (16.5).