Глава 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 для программного управления
- Горячая перезагрузка без перезапуска сервиса
- Автоматический откат на предыдущую версию