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

Глава 19. Условия контекста клиента

Условия контекста клиента позволяют фильтровать трафик по характеристикам клиентского приложения: тип браузера, операционная система, признак мобильного устройства или бота. Все условия в этой главе анализируют HTTP-заголовок User-Agent или IP-адрес клиента.

Расширение Redcoat. В BlueCoat CPL отсутствуют специализированные условия для анализа User-Agent. Для проверки User-Agent в BlueCoat используются общие условия заголовков:

request.header.User-Agent="Mozilla/5.0*"          ; точное/подстроковое совпадение
request.header.User-Agent.regex=".*[Bb]ot.*"       ; регулярное выражение

Условия user_agent.contains, client.os, client.browser и другие в этой главе являются расширениями Redcoat, предоставляющими семантические алиасы для упрощения политик.

19.1. user_agent.contains=

Проверяет наличие подстроки в значении заголовка User-Agent запроса. Сравнение регистронезависимое. Условие предназначено для простых проверок без использования регулярных выражений.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга. Используйте User-Agent.Regex= (раздел 19.2) или request.header.User-Agent.substring= в качестве альтернативы.

Синтаксис:

user_agent.contains=substring

где:

  • substring — подстрока для поиска в User-Agent (без кавычек).

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировка известных ботов по подстроке
    user_agent.contains=Googlebot deny

    ; Альтернатива (работает уже сейчас):
    User-Agent.Regex="Googlebot" deny

См. также: User-Agent.Regex= (раздел 19.2), request.header.User-Agent= (глава 10).

19.2. User-Agent.Regex=

Проверяет значение заголовка User-Agent по регулярному выражению. Используется синтаксис Rust regex (PCRE-совместимый). Значение регулярного выражения должно быть заключено в двойные кавычки.

Синтаксис:

User-Agent.Regex="regex_pattern"

где:

  • regex_pattern — регулярное выражение в двойных кавычках.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировка всех ботов (Googlebot, Bingbot, и т.д.)
    User-Agent.Regex=".*[Bb]ot.*" deny

    ; Блокировка нескольких конкретных ботов
    User-Agent.Regex="Googlebot|Bingbot|YandexBot" deny

    ; Разрешить только основные браузеры
    User-Agent.Regex="Mozilla|Chrome|Safari|Firefox" ALLOW

См. также: user_agent.contains= (раздел 19.1), request.header.User-Agent= (глава 10).

19.3. client.os=

Определяет операционную систему клиента на основе анализа заголовка User-Agent. Разбор User-Agent выполняется встроенным детектором.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

client.os=os_name
client.os=(os_name, os_name, ...)

где:

  • os_name — имя ОС. Допустимые значения: Windows, macOS, Linux, iOS, Android, ChromeOS.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Разрешить доступ только с корпоративных ОС
    client.os=(Windows, macOS) ALLOW

    ; Блокировать мобильные ОС
    client.os=(iOS, Android) deny

См. также: client.browser= (раздел 19.4), client.is_mobile= (раздел 19.5), User-Agent.Regex= (раздел 19.2).

19.4. client.browser=

Определяет браузер клиента на основе анализа заголовка User-Agent.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

client.browser=browser_name
client.browser=(browser_name, browser_name, ...)

где:

  • browser_name — имя браузера. Допустимые значения: Chrome, Firefox, Safari, Edge, IE, Opera.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать устаревшие браузеры
    client.browser=IE deny

    ; Разрешить только одобренные браузеры
    client.browser=(Chrome, Firefox, Edge) ALLOW

См. также: client.os= (раздел 19.3), User-Agent.Regex= (раздел 19.2).

19.5. client.is_mobile=

Проверяет, является ли клиентское устройство мобильным (смартфон, планшет). Определяется по ключевым словам в User-Agent (Mobile, Android, iPhone, iPad и др.).

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

client.is_mobile=yes|no

где:

  • yes — клиент определён как мобильное устройство.
  • no — клиент не является мобильным устройством (десктоп).

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Перенаправить мобильных клиентов на мобильную версию
    client.is_mobile=yes redirect(302, "https://m.example.com%(url.path)")

    ; Применить другие лимиты для мобильных
    client.is_mobile=yes set(max_bandwidth, 512)

См. также: client.is_bot= (раздел 19.6), client.os= (раздел 19.3).

19.6. client.is_bot=

Проверяет, является ли клиент известным ботом или краулером (Googlebot, Bingbot, YandexBot и др.). Определяется по ключевым словам в User-Agent.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга.

Синтаксис:

client.is_bot=yes|no

где:

  • yes — клиент определён как бот/краулер.
  • no — клиент не является ботом.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Блокировать всех ботов
    client.is_bot=yes deny

    ; Ограничить полосу для ботов
    client.is_bot=yes set(max_bandwidth, 128)

См. также: client.is_mobile= (раздел 19.5), User-Agent.Regex= (раздел 19.2).

19.7. client.ip_in_list=

Проверяет наличие IP-адреса клиента в именованном списке IP-адресов. Списки определяются через конфигурацию или внешние источники данных.

Статус: планируется. Использование в CPL файле приведёт к ошибке парсинга. Используйте client.address= с блоком define subnet в качестве альтернативы (глава 7).

Синтаксис:

client.ip_in_list=list_name

где:

  • list_name — имя именованного списка IP-адресов.

Слои и транзакции: Proxy.

Пример:

<Proxy>
    ; Разрешить доступ из доверенных IP
    client.ip_in_list=trusted_ips ALLOW

    ; Альтернатива (работает уже сейчас):
    define subnet trusted_ips
        10.0.0.0/8
        172.16.0.0/12
    end

    client.address=trusted_ips ALLOW

См. также: client.address= (глава 7).