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

Глава 1. Обзор языка политик CPL

1.1. Назначение и область применения

CPL (Content Policy Language) — декларативный язык описания политик обработки трафика в Redcoat Proxy. Политика CPL определяет, как прокси-сервер обрабатывает каждый входящий запрос: разрешить или запретить доступ, перенаправить, модифицировать заголовки, выбрать upstream-маршрут, включить или отключить TLS-инспекцию и многое другое.

Каждая транзакция (HTTP-запрос, DNS-запрос, SOCKS-соединение) проходит через движок политик, который оценивает условия и применяет действия согласно загруженному файлу политики.

Что контролирует CPL:

Область Примеры
Контроль доступа Разрешение/запрет по IP, домену, категории, группе пользователей
SSL/TLS инспекция Решение о перехвате (MITM) или туннелировании для каждого TLS-соединения
Маршрутизация Выбор upstream-прокси, SOCKS-шлюза или прямого соединения
Модификация трафика Добавление, удаление и изменение HTTP-заголовков
Кэширование Управление кэшированием объектов и их TTL
DNS-фильтрация Перехват и подмена DNS-ответов
Ограничение скорости Ограничение частоты запросов и управление полосой пропускания
Логирование Управление записью в access log, подавление и перезапись полей
Аутентификация Запрос учётных данных, выбор realm и режима аутентификации
Диагностика Трассировка обработки запросов, профилирование

Файл политики — текстовый файл с расширением .cpl, расположенный по умолчанию в /etc/rproxy/policy.cpl. Файл загружается при старте прокси и может быть перезагружен в любой момент без перезапуска сервиса — через CLI, REST API или веб-интерфейс.

1.2. Совместимость с BlueCoat CPL

Redcoat поддерживает синтаксис CPL, совместимый с BlueCoat ProxySG CPL. Это означает, что политики, написанные для ProxySG, могут быть использованы в Redcoat с минимальными изменениями.

Совместимые элементы:

  • Синтаксис слоёв (<Proxy>, <SSL-Intercept>, <Forward> и др.)
  • Формат условий (url.domain=, client.address=, category= и т.д.)
  • Блоки определений (define subnet, define condition, define category и др.)
  • Свойства/действия (allow, deny, redirect, forward и т.д.)
  • Комментарии (;), продолжение строк (\), списки значений в скобках
  • Логика AND/OR: пробел между условиями = AND, || внутри значений = OR
  • Отрицание через ! и !=

Различия:

Redcoat расширяет стандартный CPL рядом возможностей, не присутствующих в BlueCoat ProxySG. Эти расширения описаны в разделе 1.3. При миграции с BlueCoat следует обратиться к Главе 44. Миграция с BlueCoat CPL для получения списка неподдерживаемых конструкций и их аналогов.

1.3. Расширения Redcoat

Помимо стандартного CPL, Redcoat добавляет ряд возможностей:

Расширенные условия:

Условие Описание
geo.src.country, geo.dst.country Геолокация по стране (source и destination)
geo.src.region, geo.src.city Регион и город источника
geo.src.asn, geo.src.org ASN и организация источника
geo.dst.* Аналогичные поля для назначения
tls.sni Server Name Indication
tls.alpn Application-Layer Protocol Negotiation
tls.ech Encrypted Client Hello
url.host.is_private Хост резолвится в приватный IP
client.is_mobile, client.is_bot Классификация клиента по User-Agent
domain.age, domain.is_new Возраст домена
threat.score Оценка угрозы
file.hash.sha256, file.hash.md5 Хеши файлов
http.request.body.contains, http.response.body.regex Инспекция тела
dns.nxdomain, dns.resolved Состояние DNS-резолвинга

Расширенные свойства (действия):

Свойство Описание
rate_limit(count/period) Ограничение запросов (token bucket)
max_bitrate(bps) Ограничение битрейта
dns.respond.a(ip), dns.respond.aaaa(ipv6) Подмена DNS-ответов
inject_script(url), inject_css(url) Инъекция в HTML-контент
trace.request, trace.session Детальная трассировка
debug.header, debug.timing Диагностические действия

Дополнительные слои:

Слой Описание
<SOCKS> Правила специфичные для SOCKS-прокси
<Diagnostics> Трассировка и отладка

Переменные препроцессора:

Redcoat поддерживает подстановку переменных $(variable) в любом месте файла политики — в условиях, действиях и строковых аргументах. Подробнее см. Глава 3, раздел 3.5.

Инструменты управления:

  • Визуальный редактор политик (VPM) в веб-интерфейсе
  • Текстовый редактор CPL с синтаксической подсветкой
  • TUI-редактор в CLI (cpl edit)
  • REST API для программного управления
  • Горячая перезагрузка без перезапуска сервиса
  • Автоматический откат на предыдущую версию