Защита WebSocket-соединений (версия ПО 7.4.1 и выше)

ID статьи: 2297
Последнее обновление: 11 сен, 2025
Product: WAF
Version: 7.x

UserGate WAF, работающий в режиме reverse-прокси, может контролировать безопасность установления соединений по протоколу WebSocket.

Протокол WebSocket обеспечивает двунаправленную связь между клиентом и сервером в реальном времени и позволяет поддерживать постоянное соединение, по которому данные могут передаваться в обе стороны без необходимости повторных запросов от клиента. Принцип работы протокола WebSocket следующий:

  1. Установление соединения. Клиент отправляет HTTP-запрос на «рукопожатие» (handshake-запрос) серверу, предлагая установить WebSocket-соединение. Если сервер поддерживает протокол WebSocket, он возвращает подтверждающий ответ, и соединение переключается с HTTP на WebSocket.

  2. Двунаправленный обмен данными. После успешного подключения клиент и сервер могут свободно отправлять данные друг другу в любое время без дополнительного подтверждения.

  3. Закрытие соединения. Соединение может быть закрыто по инициативе клиента или сервера с отправкой кода закрытия и возможного описания причины.

В UserGate WAF правила установления WebSocket-соединений определяются WebSocket-профилем, который позволяет настроить:

  • Блокирование любого WebSocket-трафика, который приходит в UserGate WAF.

  • Проверку целостности handshake-запроса.

  • Проверку наличия заголовка Origin — HTTP-заголовка, который браузеры автоматически добавляют в запрос при установке WebSocket-соединения. Заголовок Origin содержит URL источника, который инициирует соединение.

  • Списки значений заголовков запроса (Origin, Sec-WebSocket-Extensions, Sec-WebSocket-Protocols), на основании которых UserGate WAF будет устанавливать WebSocket-соединение с доверенными источниками или игнорировать запросы, поступающие из нежелательных источников.

  • Журналирование событий, связанных с установлением WebSocket-соединений. Подробнее — в разделе «Журнал WebSocket».

Настройка WebSocket-профиля для блокирования всего WebSocket-трафика

Чтобы создать WebSocket-профиль, блокирующий весь WebSocket-трафик:

1. В разделе Настройки Политика безопасности ➜ WebSocket-профили нажмите Добавить.

2. В окне Свойства WebSocket-профиля на вкладке Общие установите флажок Блокировать WebSocket-трафик.

3. Если необходимо, включите журналирование событий

4. Сохраните изменения.

Чтобы начать блокирование трафика в соответствии с настроенным WebSocket-профилем, его нужно подключить в правиле reverse-прокси.

Настройка WebSocket-профиля для фильтрации WebSocket-соединений

Чтобы создать WebSocket-профиль, фильтрующий WebSocket-соединения:

1. В разделе Настройки Политика безопасности ➜ WebSocket-профили нажмите Добавить.

2. В окне Свойства WebSocket-профиля на вкладке Общие укажите название профиля.

3. Настройте один или несколько параметров фильтрации WebSocket-соединений:

  • На вкладке Общие включите проверку целостности запроса, установив соответствующий флажок.

  • На вкладке Источники установите флажок Учитывать Origin, нажмите Создать и добавить новый объект и создайте список URL источников, с которыми разрешается устанавливать WebSocket-соединение.

ПримечаниеВы также можете настроить WebSocket-профиль, игнорирующий источники, запрашивающие WebSocket-соединение. Для этого на вкладке «Источники» нужно сформировать список нежелательных источников либо добавить предустановленные списки и включить «Инвертировать».
  • На вкладке Расширения и протоколы установите флажки Учитывать Sec-WebSocket-Extensions и Учитывать Sec-WebSocket-Protocols и добавьте списки разрешенных расширений и субпротоколов, которые указываются в заголовках Sec-WebSocket-Extensions и Sec-WebSocket-Protocols. WebSocket-соединения будут устанавливаться только по тем запросам, в заголовках которых указаны разрешенные значения.

ПримечаниеВы также можете настроить WebSocket-профиль на игнорирование WebSocket-соединений по запросам, в заголовках которых найдены расширения и субпротоколы из добавленных списков. Для этого на вкладке «Расширения и протоколы» нужно добавить списки нежелательных расширений и субпротоколов и включить «Инвертировать».

4. Если необходимо, на вкладке Общие включите журналирование событий.

5. Сохраните изменения.

Чтобы начать фильтрацию WebSocket-соединений в соответствии с настроенным WebSocket-профилем, его нужно подключить в правиле reverse-прокси.

Создание списков расширений и субпротоколов для WebSocket-соединений

Handshake-запрос может содержать в том числе следующие заголовки:

  • Sec-WebSocket-Protocol — содержит набор субпротоколов, которые клиент будет использовать при передаче данных.

  • Sec-WebSocket-Extensions — содержит дополнительные расширения WebSocket-протокола, которые поддерживает браузер. Например, может быть указан метод сжатия передаваемых данных.

Вы можете создавать списки расширений и субпротоколов и использовать их в WebSocket-профиле для фильтрации WebSocket-соединений.

Чтобы создать список расширений:

1. В разделе Настройки ➜ Библиотеки ➜ WebSocket-расширения нажмите Добавить и укажите название списка.

2. Выберите тип списка:

  • Локальный, если список будет поддерживаться вручную.

  • Обновляемый, если список будет загружаться из внешнего источника. В этом случае укажите URL источника и настройте расписание автоматических обновлений списка.

3. Сохраните список.

Чтобы создать список субпротоколов:

1. В разделе Настройки ➜ Библиотеки ➜ WebSocket-протоколы нажмите Добавить и укажите название списка.

2. Выберите тип списка:

  • Локальный, если список будет поддерживаться вручную.

  • Обновляемый, если список будет загружаться из внешнего источника. В этом случае укажите URL источника и настройте расписание автоматических обновлений списка.

3. Сохраните список.

О настройке расписания обновлений списков

Вы можете выбрать одно из предустановленных значений или указать время вручную в cron-формате: <минуты: 0–59> <часы: 0–23> <дни месяца: 1–31> <месяцы: 1–12> <дни недели: 0–6, где 0 — воскресенье>.

При ручном вводе также можно использовать следующие символы:

  • Звездочка (*) — для выбора всех значений. Например, в поле для ввода часов символ означает, что резервное копирование должно выполняться каждый час.

  • Дефис (-) — для указания диапазона значений.

  • Запятая (,) — в качестве разделителя значений.

  • Косая черта (/) — для указания шага между значениями. Например, «2-10/2» будет означать «2,4,6,8,10», а выражение «*/2» в поле «часы» будет означать «каждые два часа».

Подключение WebSocket-профиля в правиле reverse-прокси

Чтобы подключить WebSocket-профиль в правиле reverse-прокси:

1. В разделе Настройки ➜ Глобальный портал ➜ Правила reverse-прокси создайте или выберите из списка правило. Подробнее — в разделе «Создание правила публикации reverse-прокси».

2. В окне Настройка правила reverse-прокси на вкладке Профили безопасности установите флажок Включить защиту WebSocket-соединений и выберите нужный WebSocket-профиль.

3. Сохраните изменения.

Эта статья была:   Полезна | Не полезна
ID статьи: 2297
Последнее обновление: 11 сен, 2025
Ревизия: 57
Просмотры: 318
Комментарии: 0