Перейти к содержанию

Глава 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 аналога нет.

Синтаксис:

Geo.Src.Region=region_name
Geo.Src.Region=(region_name, ...)

Где: 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 аналога нет.

Синтаксис:

Geo.Src.City=city_name
Geo.Src.City=(city_name, ...)

Где: 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.

Синтаксис:

Geo.Src.ASN=asn_number
Geo.Src.ASN=(asn_number, ...)

Где: 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 аналога нет.

Синтаксис:

Geo.Src.Org=org_name
Geo.Src.Org=(org_name, ...)

Где: 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: блокировка/разрешение трафика по странам назначения.

Синтаксис:

supplier.country=country_code
supplier.country=(country_code, ...)

Где: 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 аналога нет.

Синтаксис:

Geo.Dst.Region=region_name
Geo.Dst.Region=(region_name, ...)

Где: 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 аналога нет.

Синтаксис:

Geo.Dst.City=city_name
Geo.Dst.City=(city_name, ...)

Где: city_name -- название города (строка).

Тип значения: список строк.

Допустимые слои: <Proxy>

Примеры:

<Proxy>
    Geo.Dst.City=Amsterdam allow
    Geo.Dst.City=(Frankfurt, Amsterdam, London) allow

См. также: Geo.Dst.Region (16.7), supplier.country (16.6).

16.9. Geo.Dst.ASN — номер автономной системы назначения

Проверяет номер автономной системы целевого сервера. Позволяет фильтровать трафик по сетевому оператору назначения.

Расширение Redcoat. В BlueCoat аналога нет.

Важно: значение -- числовое, не строковое. Указывайте номер ASN без префикса AS.

Синтаксис:

Geo.Dst.ASN=asn_number
Geo.Dst.ASN=(asn_number, ...)

Где: 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 аналога нет.

Синтаксис:

Geo.Dst.Org=org_name
Geo.Dst.Org=(org_name, ...)

Где: 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).