Добавление политики обработки трафика
Для добавления новой политики обработки трафика в систему 5А выполните следующие шаги:
-
Откройте раздел Главная → Кластеры балансировки.
-
Перейдите в кластер, в котором находится сервис, для которого будет добавлена новая политика.
-
Откройте раздел Политики.
-
Нажмите Добавить политику.
-
Заполните форму Новая политика. Все поля, отмеченные
, являются обязательными для заполнения.
Пример заполнения формы "Новая политика"
-
Название — название для добавляемой политики, которое будет использоваться в системе 5А.
-
Протокол — сетевой протокол, на котором будет обработка трафика с помощью данной политики. Доступные варианты:
- http,
- https,
- tcp.
-
Место помещения — параметр определяет, на каком этапе обработки трафика будет применяться выбранная политика — до или после взаимодействия с бэкенд-сервером. Доступные варианты зависят от выбранного протокола и позволяют точно контролировать, где именно происходят модификации данных.
Протоколы HTTP/HTTPS:
- Изменение данных на пути к серверу — политика применяется к HTTP-запросу, исходящему от клиента к бэкенду. Позволяет модифицировать заголовки запроса, URI, метод, тело перед отправкой на сервер.
- Изменение заголовков ответа от сервера — политика применяется к HTTP-ответу, возвращаемому бэкендом клиенту. Позволяет изменять, удалять или добавлять HTTP-заголовки.
- Изменение тела ответа от сервера — политика применяется к телу HTTP-ответа перед отправкой клиенту. Поддерживает поиск и замену текстовых шаблонов и манипуляции с контентом.
Протокол TCP:
- Изменение TCP-данных — политика применяется к данным TCP-потока между клиентом и сервером.
-
Описание — краткое описание назначения и особенностей политики.
-
Стратегия — способ комбинирования условий политики. Доступные варианты:
- Первое совпадение — если хотя бы одно условие было соблюдено при анализе трафика (логическое "ИЛИ"), применяется обработка трафика (выполняются все действия политики в порядке их добавления);
- Все совпадения — обработка трафика применяется, если все условия были соблюдены при анализе трафика (логическое "И").
-
Условия политики — набор требований к свойствам трафика, по которым проводится его анализ. Подробное описание условий и их параметров представлено ниже в разделе Справочник условий для правил политики.
- НЕ — флажок инвертирует результат проверки условия. Флажок есть у каждого условия, но у условий, где отрицание не поддерживается, он отображается приглушённым и недоступен.
- Группа — основной тип параметра проверки трафика. Для протокола TCP доступны группы: TCP Хост, Источник IP и TLS ClientHello (последняя — только для анализа начального TLS-сообщения без расшифровки).
- Атрибут — уточняющий тип параметра проверки трафика. Набор атрибутов зависит от выбранной группы.
- Значение — значение параметра, по которому производится проверка трафика.
ℹ️Дополнительные условия добавляются нажатием на Добавить условие. Удаление условий выполняется нажатием на
справа от условия.
-
Действия политики — действие с трафиком, выполняемое при выполнении условий политики. Подробное описание действий и их параметров представлено ниже в разделе Справочник действий для правил политики.
- Действие — основной тип выполняемого действия с трафиком. При использовании группы TLS ClientHello доступно только действие Перенаправление трафика.
- Атрибут — уточняющий параметр для действия. Для Перенаправление трафика доступны: Хост (указание адреса) или Группа узлов (выбор группы серверов).
- Параметры — значение параметра для выполняемого действия.
ℹ️Дополнительные действия добавляются нажатием на Добавить действие. Удаление действий выполняется нажатием на
справа от действия.
Важно: порядок выполнения действий будет от верхнего (первого) к нижнему (последнему).
-
-
Нажмите Сохранить для добавления политику в систему 5А.
Справочник условий для правил
HTTP/HTTPS-политики
- Выполнять всегда — указывается для безусловного выполнения действий политики.
- HTTP Заголовок — проверка соответствия указанному HTTP-заголовку, дополнительных атрибутов нет.
- HTTP Хост — проверка соответствия серверу HTTP-запроса. Доступные атрибуты:
- Хост — соответствие по имени сервера;
- Порт — соответствие по порту сервера;
- Полная строка — соответствие по полному строковому заголовку сервера.
- HTTP URI — проверка соответствия полному URI запроса или соответствие его частям. Доступные атрибуты:
- Схема — соответствие схеме (например, https, ftp);
- Хост — соответствие имени сервера в URI;
- Параметр query — соответствие значению указанного параметра запроса из строки запроса;
- Значение query — соответствие тексту, указанному в строке запроса;
- Порт — соответствие номера порта в URI;
- Расширение — соответствие расширению файла в URI (например, html);
- Путь — соответствие пути в URI;
- Сегмент пути — соответствие части пути URI по числовому индексу;
- Полная строка — соответствие указанному полному строковому тексту.
- HTTP User Agent — проверка соответствия на основе данных в заголовке User Agent. Доступные атрибуты:
- Браузер — соответствие по имени или типу браузера из указанного списка;
- Версия браузера — соответствие по версии браузера;
- Тип устройства — соответствие по типу устройства из указанного списка.
- HTTP метод — проверка соответствия используемому типу HTTP-метода.
- Источник IP — проверка соответствия указанному IP-адресу.
- Аутентификация — проверка по тому, кто вошёл: имя пользователя, группа, атрибут. Доступные атрибуты описаны в статье Аутентификация в политиках и сценариях.
TCP-политики
-
TCP Хост — проверка соответствия серверу TCP-запроса. Доступные атрибуты:
- Хост назначения — соответствие по имени сервера;
- Порт назначения — соответствие по порту сервера.
-
Источник IP — проверка соответствия адресу или подсети. Доступные атрибуты:
- IP-адрес — соответствие IP-адресу;
- Вхождение в подсеть — соответствие подсети, указывается в формате "xxx.xxx.xxx.xxx/xx".
-
TLS ClientHello — группа предназначена для анализа начального TLS-сообщения клиента
ClientHelloбез расшифровки полезного трафика. На основании набора шифров, заявленных клиентом, можно определить наличие ГОСТ-шифров и перенаправить такой трафик на отдельную группу серверов или устройство дешифрации, например NGate.⚠️Ограничения для условий группы TLS ClientHello:
- Условие доступно только для политик с протоколом TCP.
- В рамках одного правила может быть добавлено только одно условие из группы TLS ClientHello.
- Для правил, содержащих условие TLS ClientHello, доступно только одно действие — «Перенаправление трафика».
- Отрицание условия (
НЕ) не поддерживается.
Доступные атрибуты:
-
Cipher suites: ГОСТ - атрибут для обнаружения трафика, в котором клиент в
ClientHelloпредлагает ГОСТ-шифры (коды0xC100…0xC106). При выборе этого атрибута поле Значение автоматически устанавливается вГОСТи не редактируется. Если условие срабатывает, трафик считается ГОСТ-трафиком и может быть перенаправлен на отдельный backend.
Пример выбора атрибута "Cipher suites: ГОСТ"
-
Cipher suites: список - атрибут для ручного задания произвольного набора cipher suites. В поле Значение укажите список шестнадцатеричных кодов шифров через запятую, например:
0xC100, 0xC101, 0xC102. Условие считается выполненным, если вClientHelloклиента присутствует хотя бы один шифр из указанного списка.
Пример заполнения атрибута "Cipher suites: список"
Справочник действий для правил
HTTP/HTTPS-политики
-
Редирект — действие по перенаправлению соединения. Доступные атрибуты:
- Полный редирект — перенаправление на указанный URL.
- Замена схемы — выполнение замены протокола вида HTTP->HTTPS или HTTP->HTTP с изменением используемого порта.
- Замена части URL — перенаправление на новый URL, который получается путем подстановки указанных замен в изначальном URL.
-
Замена — действие по замене HTTP-заголовка в запросе или ответе. Доступные атрибуты:
- Заголовок — замена HTTP-заголовка в запросе;
- HTTP Host — замена заголовка HTTP Host в запросе;
- HTTP Referer — замена заголовка HTTP Referer в запросе;
- HTTP URI — замена HTTP URI, пути или строки в запросе.
-
Добавление — действие по добавлению HTTP-заголовка из запроса или ответа. Доступные атрибуты:
- Заголовок — добавление HTTP-заголовка в запрос или ответ;
- HTTP Cookie — добавление заголовка HTTP Cookie в ответ;
- HTTP Referer — добавление заголовка HTTP Referer в запрос;
- HTTP Set Cookie — добавление заголовка HTTP Set Cookie в ответ.
-
Удаление — действие по удалению HTTP-заголовка из запроса или ответа. Доступные атрибуты:
- Заголовок — удаление HTTP-заголовка из запроса или ответа;
- HTTP Cookie — удаление заголовка HTTP Cookie из ответа;
- HTTP Referer — удаление заголовка HTTP Referer из запроса;
- HTTP Set Cookie — удаление заголовка HTTP Set Cookie из ответа.
-
Перенаправление трафика (forwarding) — действие по перенаправлению трафика на указанный URL. Доступные атрибуты:
- Хост — перенаправление на указанный URL (например,
https://example.com).
- Хост — перенаправление на указанный URL (например,
-
Перенаправление на группу — действие по перенаправлению трафика на заранее заданную группу серверов. Доступные атрибуты:
- Группа серверов — выбор группы из выпадающего списка групп, созданных в кластере. Запрос направляется на пул серверов этой группы.
-
Установка повторного шифрования — действие, включающее или отключающее TLS-шифрование между балансировщиком и бэкендом. Доступные атрибуты:
- Включить — при установке флажка (чекбокса) соединение до бэкенда будет шифроваться (re-encrypt), при снятии — нет. В интерфейсе поле представлено в виде галочки.

Пример заполнения "Повторное шифрование"
-
Установка SSL имени — действие, задающее SNI (Server Name Indication) для TLS-соединения с бэкендом. Доступные атрибуты:
- Имя — доменное имя, которое будет использовано в SNI и для проверки сертификата бэкенда.
-
Логирование — действие по записи сообщения в лог-файл. В качестве атрибута указывается уровень критичности сообщения.
- Сообщение — запись указанного текста сообщения в лог-файл.
-
Аутентификация — требование входа выбранным профилем аутентификации. Доступные атрибуты описаны в статье Аутентификация в политиках и сценариях.
- Системная переменная — дополнительно в тексте сообщения будет отображено значение выбранной переменной на момент записи.
-
Заблокировать — блокировка трафика на ресурс.
-
Кастомная страничка — отправка клиенту кастомной HTML-страницы. Доступные атрибуты:
-
Простой HTML — в качестве параметра передается исходный код простой HTML-страницы.
⚠️Важно: код страницы не должен содержать работу с внешними ресурсами, такими как импорты, работу с файлами и т.п. Пример допустимой страницы представлен ниже в разделе Дополнительные материалы.
-
Из файла — в качестве параметра передается полное имя файла (с расширением), который должен быть размещён на балансировщике в папке
/etc/nginx/html/. В файле должна находится HTML-страница в формате строки BASE64, причем все вложенные структуры (изображения, стили и т.д.) должны быть тоже в формате BASE64.ℹ️Для подготовки файла используйте скрипт, представленный ниже в разделе Дополнительные материалы.
-
-
Обновление заголовка — изменение данных в HTTP-заголовке ответа, отправляемого сервером. Действие доступно при указании значения "Изменение заголовков ответа от сервера" в параметре Место помещения.
-
Обновление тела ответа — изменение данных в HTTP-теле ответа, отправляемого сервером. Действие доступно при указании значения "Изменение тела ответа от сервера" в параметре Место помещения.
TCP-политики
-
Перенаправление трафика — действие перенаправляет TCP-соединение на указанный backend. Доступные атрибуты:
- Хост — адрес сервера (например,
10.0.0.5:8080); - Группа узлов — выбор группы серверов из выпадающего списка.
- Хост — адрес сервера (например,
-
Сброс соединения — принудительный сброс TCP-соединения. Доступные атрибуты:
- По причине - в качестве Параметра указывается текст, который будет выводиться в логах при сбросе.
-
SSL — действие задаёт SNI (Server Name Indication) для TLS-соединения с бэкендом. Доступные атрибуты:
- SNI к бэкенду — доменное имя, которое будет использовано в SNI.
Дополнительные материалы
Для подготовки статического контента, который должен быть использован в рамках действия "Кастомная страничка" с параметром "Из файла",
используйте приведённый ниже скрипт на Python. Скрипт рекурсивно обходит директорию web/, собирает все файлы (включая HTML, изображения и другие ресурсы) и создаёт
итоговый файл data.txt, который должен быть размещён на балансировщике в директории /etc/nginx/html/.
Пример структуры директории web/:
web/
├── index.html
├── main.css
├── logo.png
└── banner.jpgСкрипт:
import os
import base64
import mimetypes
import re
from bs4 import BeautifulSoup
from PIL import Image
import io
import json
def optimize_image(image_path):
"""Сжимает картинку в WebP и возвращает bytes"""
img = Image.open(image_path)
buf = io.BytesIO()
img.save(buf, format="WEBP", quality=70) # качество 70%
return buf.getvalue(), "image/webp"
def file_to_data_uri(file_path):
try:
data, mime_type = optimize_image(file_path)
except Exception:
# fallback: если не удалось в WebP — читаем как есть
with open(file_path, "rb") as f:
data = f.read()
mime_type, _ = mimetypes.guess_type(file_path)
if mime_type is None:
mime_type = "application/octet-stream"
encoded = base64.b64encode(data).decode("utf-8")
return f"data:{mime_type};base64,{encoded}"
def replace_urls(css_text, folder_path):
def repl(match):
url = match.group(1).strip('"\'')
img_path = os.path.join(folder_path, url)
if os.path.isfile(img_path):
return f'url("{file_to_data_uri(img_path)}")'
else:
print(f"⚠️ Файл {url} не найден, пропускаю")
return match.group(0)
return re.sub(r'url\(([^)]+)\)', repl, css_text)
def convert_html(folder_path):
html_path = os.path.join(folder_path, "index.html")
with open(html_path, "r", encoding="utf-8") as f:
soup = BeautifulSoup(f, "html.parser")
# <img src="...">
for img in soup.find_all("img"):
src = img.get("src")
if not src:
continue
img_path = os.path.join(folder_path, src)
if not os.path.isfile(img_path):
continue
img["src"] = file_to_data_uri(img_path)
# CSS url(...)
for style in soup.find_all("style"):
if style.string:
style.string = replace_urls(style.string, folder_path)
for tag in soup.find_all(style=True):
tag["style"] = replace_urls(tag["style"], folder_path)
# Минимизируем HTML: убираем лишние пробелы и переносы
final_html = " ".join(str(soup).split())
encoded_html = base64.b64encode(final_html.encode("utf-8")).decode("utf-8")
# Сохраняем в data.txt
with open("data.txt", "w", encoding="utf-8") as f:
f.write(encoded_html)
print(f"✅ Готово! Файл сохранён")
if __name__ == "__main__":
convert_html("web")Пример простой HTML-страницы для действия "Кастомная страничка" с параметром "Простой HTML":
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Ошибка 405</title>
<style>
body {
margin: 0;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background: linear-gradient(teal, navy);
color: #ffffffff;
font-family: sans-serif;
text-align: center;
}
h1 {
font-size: 4em;
margin: 0;
}
p {
font-size: 1.2em;
margin: 0.5em 0;
}
.emoji {
font-size: 5em;
margin-bottom: 0.3em;
}
</style>
</head>
<body>
<div>
<div class="emoji"> ⛔️ </div>
<h1>405</h1>
<p>Метод GET запрещён</p>
</div>
</body>
</html>