Глава 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:
Шаг 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:
Шаг 4: Исправить неподдерживаемые конструкции (если есть ошибки валидации).
Шаг 5: Установить:
Примеры типичных замен при миграции:
; 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)