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

Глава 45. Миграция с BlueCoat CPL

44.1. Совместимый синтаксис

Следующие конструкции BlueCoat поддерживаются в Redcoat без изменений:

  • Структура файла: define-блоки, затем слои
  • Слои: <Proxy>, <SSL-Intercept>, <SSL>, <Cache>, <Forward>, <Exception>, <Admin>, <DNS-Proxy>
  • Условия: url.domain=, url.host=, url.path=, url.extension=, client.address=, url.address=, category=, group=, http.method=, proxy.port=, server.port=, hour=, weekday=, authenticated=
  • Действия: allow, deny, force_deny, redirect, authenticate, forward, direct, cache, bypass_cache, force_cache, ttl, log, access_log, label
  • Define-блоки: define subnet, define condition, define url.domain, define server_url.domain, define category, define action, define exception, define bandwidth_class
  • Синтаксис: комментарии (;), продолжение строк (\), списки в скобках (a, b, c), guard-условия в заголовках слоёв
  • Логика: пробел между условиями = AND, || внутри значений = OR
  • Отрицание: ! и !=

44.2. Различия в именах условий

Некоторые условия в Redcoat имеют отличные от BlueCoat имена:

BlueCoat Redcoat CPL Комментарий
request.body.size http.request.body.size Полный путь с http. префиксом
request.body.contains http.request.body.contains Полный путь с http. префиксом
response.body.contains http.response.body.contains Полный путь с http. префиксом
response.body.regex http.response.body.regex Полный путь с http. префиксом
response.code http.response.code Полный путь с http. префиксом
content_type content-type Через дефис, не через подчёркивание
proxy.card client.interface Переименовано
tls.has_client_cert client.certificate.presented Переименовано
tls.client_cert.cn client.certificate.subject.cn Переименовано
socks.gateway (действие) socks_gateway Через подчёркивание
server_url.address server.address Упрощённое имя

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

Конструкции, доступные в Redcoat, но отсутствующие в BlueCoat:

Расширение Описание
Дополнительные слои
<SOCKS> Отдельный слой для контроля SOCKS-соединений
<Diagnostics> Слой трассировки и отладки
Геолокация
geo.src.country, geo.dst.country Страна источника/назначения
geo.src.region, geo.dst.region Регион (область, штат)
geo.src.city, geo.dst.city Город
TLS
tls.sni Server Name Indication
tls.alpn Application-Layer Protocol Negotiation
tls.ech Encrypted Client Hello
ssl.block_expired_cert, ssl.block_invalid_cert, ssl.block_weak_cert Контроль сертификатов
ssl.min_key_size Минимальный размер ключа
http2.client.accept, ssl.quic, ssl.ech, ssl.dns_over_tls Контроль протоколов
ssl.profile Именованный SSL-профиль
ssl.subordinate_ca Подчинённый CA для подписи
Классификация клиента
url.host.is_private Проверка на RFC1918 адрес
client.is_mobile Мобильное устройство (по User-Agent)
client.is_bot Бот/краулер (по User-Agent)
client.interface Сетевой интерфейс клиента
client.certificate.presented Клиентский сертификат предъявлен
client.certificate.subject.cn CN клиентского сертификата
Анализ домена
domain.age Возраст домена
domain.is_new Домен зарегистрирован недавно
Инспекция тела
http.request.body.size Размер тела запроса
http.request.body.contains Поиск подстроки в теле запроса
http.response.body.contains Поиск подстроки в теле ответа
http.response.body.regex Regex по телу ответа
http.response.code Код HTTP-ответа
Контроль контента
content-type MIME-тип ответа
file.hash.sha256, file.hash.md5 Хеши файлов
QoS и Rate Limiting
rate_limit(count, period) Ограничение частоты запросов
max_bitrate(bps) Ограничение битрейта
DNS
dns.respond.a(ip), dns.respond.aaaa(ip) Подмена DNS A/AAAA ответов
dns.respond.ptr(hostname) Подмена PTR-ответа
dns.bypass Пропуск DNS-проксирования
Диагностика
trace.request, trace.session, trace.destination Трассировка (BlueCoat 7.3)
trace.rules Трассировка правил (Redcoat extension)
Расширения Exception
exception.content(html) Встроенный HTML для страницы ошибки
exception.url(url) Перенаправление на внешнюю страницу
exception.template(name) Именованный шаблон
exception.status(code) HTTP-код ответа
exception.content_type(type) MIME-тип страницы
exception.bypass_cache(yes/no) Не кэшировать страницу ошибки
exception.autopad(yes/no) Дополнение размера страницы, чтобы браузер не подменял её своей страницей ошибки
Аутентификация
authenticate.scheme(basic\|ntlm\|negotiate\|kerberos\|certificate\|form) Явный выбор схемы
authenticate.2fa(realm) Двухфакторная аутентификация
authenticate.2fa.method(totp\|sms\|email\|push) Метод 2FA
Контент-инъекция
inject_script, inject_css Инъекция JavaScript/CSS

44.4. Неподдерживаемые конструкции BlueCoat

Конструкции BlueCoat CPL, не поддерживаемые в текущей версии Redcoat:

Конструкция BlueCoat Альтернатива в Redcoat
<Tenant> слой Не поддерживается (однотенантная архитектура)
streaming.* (WM, Real, QuickTime) content-type=video/x-ms-wmv deny или url.extension=
adn.* (Application Delivery Network) Не поддерживается
wccp.* Не поддерживается (transparent через bridge/iptables)
p2p.* Используйте url.domain=, socks.destination.port=
webpulse.* Используйте локальные категории (define category)
socks.accelerate Не поддерживается
isolate() (Web Isolation) Не поддерживается
quota.* (квоты по времени/объёму) Используйте rate_limit(count, period)
user.login.count Не поддерживается
VPM XML формат Используйте CPL текст или VPM WebGUI
health_check.* Конфигурируется через proxy.toml, не через CPL

44.5. Пошаговая миграция

Шаг 1: Экспортировать CPL с BlueCoat ProxySG:

SGOS# show policy source > policy_export.cpl

Шаг 2: Выполнить автоматические замены переименованных условий:

; request.body.size → http.request.body.size
; request.body.contains → http.request.body.contains
; response.body.contains → http.response.body.contains
; response.body.regex → http.response.body.regex
; response.code → http.response.code
; content_type → content-type
; proxy.card → client.interface
; tls.has_client_cert → client.certificate.presented
; tls.client_cert.cn → client.certificate.subject.cn
; socks.gateway(...) → socks_gateway(...)

Шаг 3: Валидировать на Redcoat:

rproxy# policy validate /tmp/policy_export.cpl

Шаг 4: Исправить неподдерживаемые конструкции (если есть ошибки валидации).

Шаг 5: Установить:

rproxy# policy install /tmp/policy_export.cpl

Примеры типичных замен при миграции:

; BlueCoat: streaming control
; streaming.client=wm deny
; Redcoat: через content type
content-type=video/x-ms-wmv deny

; BlueCoat: quota
; quota.time.authorize(daily_quota, 3600)
; Redcoat: через rate limit
rate_limit(1000, hour)

; BlueCoat: WebPulse mode
; webpulse.categorize.mode(realtime)
; Redcoat: не требуется (категоризация всегда включена)

; BlueCoat: response code
; response.code=403..599 deny
; Redcoat: переименовано
http.response.code=403..599 deny

; BlueCoat: proxy card
; proxy.card=eth0 deny
; Redcoat: переименовано
client.interface=eth0 deny

; BlueCoat: socks gateway action
; socks.gateway(tor-proxy:9050, 5)
; Redcoat: через подчёркивание
socks_gateway(tor-proxy, 9050, 5)