Глава 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=в качестве альтернативы.
Синтаксис:
где:
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-совместимый). Значение регулярного выражения должно быть заключено в двойные кавычки.
Синтаксис:
где:
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 файле приведёт к ошибке парсинга.
Синтаксис:
где:
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 файле приведёт к ошибке парсинга.
Синтаксис:
где:
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 файле приведёт к ошибке парсинга.
Синтаксис:
где:
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 файле приведёт к ошибке парсинга.
Синтаксис:
где:
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).
Синтаксис:
где:
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).