Глава 4. Слои (Layers)¶
Слой (layer) — именованная секция файла политики, содержащая правила, которые оцениваются на определённом этапе обработки транзакции. Каждый тип слоя отвечает за свою область решений.
В отличие от некоторых реализаций, где каждый тип слоя обрабатывается отдельной подсистемой, в Redcoat все слои обрабатываются единым движком политик. Это обеспечивает единообразное поведение и гарантирует, что результаты одного слоя корректно передаются в следующий.
Ключевые принципы обработки:
- Каждый слой оценивается независимо, но в строго определённом порядке
- В каждом слое срабатывает только первое совпавшее правило, все его действия выполняются
- Результаты слоёв накапливаются: нетерминальные действия (заголовки, логирование, кэш) собираются, терминальные (deny, redirect) определяют итоговое решение
- При
denyв слое Proxy управление передаётся в слой Exception для кастомизации страницы ошибки; приforce_deny— Exception пропускается
4.1. Порядок обработки слоёв¶
Слои обрабатываются в фиксированном порядке, независимо от их расположения в файле:
| Приоритет | Слой | Фаза | Назначение |
|---|---|---|---|
| 0 | <Admin> |
Запрос | Контроль доступа к консоли управления |
| 1 | <SSL-Intercept> |
TLS handshake | Решение о перехвате или туннелировании TLS |
| 2 | <SSL> |
После TLS handshake | Фильтрация по параметрам установленного TLS-соединения |
| 3 | <Proxy> |
Запрос | Основная фильтрация: allow/deny, аутентификация, заголовки |
| 4 | <Waf> |
Запрос/Ответ | Детектирование атак и anomaly-скоринг (расширение Redcoat); заполняет http.request.detection.* |
| 5 | <Cache> |
Ответ | Политики кэширования объектов |
| 6 | <Forward> |
Запрос | Выбор маршрута: upstream proxy, SOCKS gateway, direct |
| 7 | <DNS-Proxy> |
DNS-запрос | Фильтрация и подмена DNS |
| 8 | <SOCKS> |
SOCKS-запрос | Правила для SOCKS-прокси |
| 9 | <Exception> |
Ответ | Кастомизация страниц ошибок; здесь резолвится отложенный deny |
| 10 | <Diagnostics> |
Запрос | Трассировка и профилирование |
<Waf>исполняется после<Proxy>, но вердикт детекции виден уже в<Proxy>. Перед основным проходом по слоям выполняется отдельный проход детекции, который вычисляетhttp.request.detection.*; поэтому условия детекта доступны и в<Proxy>, и в<Exception>, хотя сам слой<Waf>стоит в конвейере после<Proxy>. Слой<Waf>— задокументированное расширение Redcoat (см. раздел про слой<Waf>), которого нет в BlueCoat ProxySG 7.3.
В файле может быть несколько слоёв одного типа. Все слои одного типа обрабатываются сверху вниз:
; Первый слой Proxy — правила для внутренних сетей
<Proxy>
client.address=10.0.0.0/8 allow
; Второй слой Proxy — правила для внешних пользователей
<Proxy>
authenticated=no deny
allow
4.2. <Proxy> — основная фильтрация запросов¶
Наиболее часто используемый слой. Определяет, будет ли запрос разрешён, запрещён, перенаправлен или потребует аутентификации.
Доступные действия: allow, deny, force_deny, redirect, authenticate, exception, управление заголовками, логирование, rate limiting.
<Proxy>
; Блокировка вредоносных сайтов
category=(Malware, Phishing) force_deny
; Аутентификация корпоративных пользователей
client.address=10.0.0.0/8 authenticate(LDAP_Realm)
; Блокировка загрузки исполняемых файлов
url.extension=(exe, msi, bat, cmd, ps1) deny
; Добавление заголовка
set(request.header.X-Forwarded-Proto, "https")
allow
4.3. <SSL-Intercept> — решение о перехвате TLS¶
Оценивается во время TLS handshake, до расшифровки трафика. Определяет, перехватывать ли соединение (MITM) для инспекции содержимого или туннелировать как есть.
Доступные действия: ssl.forward_proxy(yes) — перехватить, ssl.forward_proxy(no) — туннелировать.
<SSL-Intercept>
; Перехватывать весь TLS-трафик по умолчанию
ssl.forward_proxy(yes)
; Исключения: банки, медицинские сайты
url.domain=bank.example.com ssl.forward_proxy(no)
category="Financial Services" ssl.forward_proxy(no)
category="Health and Medicine" ssl.forward_proxy(no)
Важно: В этом слое доступна ограниченная информация — только SNI (имя хоста из ClientHello), IP клиента и IP сервера. Полный URL и заголовки недоступны, так как TLS ещё не расшифрован.
4.4. <SSL> — параметры TLS-соединения¶
Фильтрация по параметрам уже установленного TLS-соединения.
<SSL>
; Запретить устаревшие версии TLS
tls.version=TLSv1.0 deny
tls.version=TLSv1.1 deny
; Требовать клиентский сертификат для admin-зоны
url.path=/admin client.certificate.presented=no deny
4.5. <Cache> — политики кэширования¶
Определяет поведение кэша для ответов. Оценивается на фазе ответа.
<Cache>
; Не кэшировать API-ответы
url.path=/api cache(no)
; Принудительное кэширование статики
url.extension=(jpg, png, css, js, woff2) force_cache ttl(86400)
; Отключить кэш для аутентифицированных пользователей
authenticated=yes cache(no)
4.6. <Forward> — маршрутизация upstream¶
Определяет, куда направить запрос: напрямую к серверу, через upstream-прокси или через SOCKS-шлюз.
<Forward>
; Внутренние ресурсы — прямое соединение
url.host.is_private=yes direct
; Определённые домены — через SOCKS
url.domain=onion.example socks_gateway(tor-proxy:9050, 5)
; Всё остальное — через upstream прокси
forward(upstream-proxy.corp:3128)
4.7. <Exception> — обработка ошибок¶
Кастомизация страниц ошибок. Оценивается при генерации ответа об ошибке.
<Exception>
exception.id=policy_denied exception(custom_block_page)
exception.id=authentication_failed exception(login_page)
4.8. <DNS-Proxy> — фильтрация DNS¶
Правила для DNS-запросов, проходящих через DNS-прокси.
<DNS-Proxy>
; Блокировка вредоносных доменов
dns.request.name=malware.example.com dns.respond(nxdomain)
; Перенаправление на внутренний сервер
dns.request.name=portal.corp dns.respond.a(10.0.1.100)
allow
4.9. <SOCKS> — правила SOCKS-прокси¶
Правила для SOCKS4/SOCKS5 соединений.
<SOCKS>
; Разрешить только SOCKS5
socks.version=4 deny
; Требовать аутентификацию
socks.authenticated=no deny
allow
4.10. <Admin> — контроль доступа к управлению¶
Правила доступа к консоли управления и API.
4.11. <Diagnostics> — трассировка и отладка¶
Правила трассировки запросов.
4.12. Фазы обработки и поток выполнения¶
Фазы¶
Слои делятся на две фазы:
Фаза запроса (request phase) — оценивается при получении запроса от клиента:
- <Admin>, <SSL-Intercept>, <SSL>, <Proxy>, <Waf>, <Forward>, <SOCKS>, <DNS-Proxy>, <Diagnostics>
Фаза ответа (response phase) — оценивается при получении ответа от сервера:
- <Cache>, <Exception>
В правилах фазы запроса доступны условия по запросу (URL, заголовки запроса, IP клиента). В правилах фазы ответа дополнительно доступны условия по ответу (код статуса, заголовки ответа, тип контента).
Поток выполнения между слоями¶
Слои обрабатываются последовательно. На каждом шаге результат определяет дальнейший ход:
Запрос клиента
│
▼
[Admin] ──deny/force_deny──▶ ОТКАЗ
│ allow/нет совпадений
▼
[SSL-Intercept] ──▶ решение: intercept или tunnel
│
▼
[SSL] ──deny──▶ ОТКАЗ (разрыв TLS)
│ allow/нет совпадений
▼
[Proxy] ──force_deny──▶ ОТКАЗ (без Exception)
│ ──redirect──▶ ПЕРЕНАПРАВЛЕНИЕ
│ ──authenticate──▶ ЗАПРОС АУТЕНТИФИКАЦИИ (407/401)
│ ──rate_limit──▶ ОТКАЗ (429)
│ ──deny──┐
│ │ pending (не сразу отказ)
▼ ▼
[Waf] ──deny/force_deny──▶ ОТКАЗ (атака: sqli/xss/rce/path_traversal…)
│ детектирование угроз (anomaly-скоринг) →
│ поля http.request.detection.* (расширение Redcoat)
▼
[Cache] ◄── нетерминальные результаты накапливаются
│
▼
[Forward] ◄── выбор upstream маршрута
│
▼
[DNS-Proxy] ◄── для DNS-запросов
│
▼
[SOCKS] ◄── для SOCKS-соединений
│
▼
[Exception] ◄── вызывается ТОЛЬКО если есть pending deny
│ exception.id=policy_denied
│ может кастомизировать страницу ошибки
▼
[Diagnostics] ◄── трассировка
│
▼
Если pending deny ──▶ ОТКАЗ (с кастомной страницей из Exception или стандартной)
Иначе ──▶ запрос отправляется к серверу
Ключевые моменты потока:
-
Терминальные действия (
force_deny,redirect,authenticate,rate_limit,exception) немедленно прекращают обработку оставшихся слоёв. -
deny— особый случай. Он не прекращает обработку сразу, а откладывается. Это позволяет слою<Exception>кастомизировать страницу ошибки. После обработки всех слоёв отложенный deny становится терминальным. -
force_deny— немедленный отказ, слой<Exception>пропускается. Используйте для случаев, когда кастомизация страницы ошибки не нужна (malware, phishing). -
Нетерминальные действия (заголовки, маршрутизация, кэш, логирование и т.д.) накапливаются из всех слоёв и применяются к транзакции совместно.
-
Слой
<Exception>вызывается только при наличии отложенногоdeny. Если слой Proxy вернулallowили нетерминальное действие — Exception не оценивается.