Способ обработки ТСР протокола в кластере сетевой вычислительной системы
METHOD OF PROCESSING A TCP PROTOCOL IN A CLUSTER OF A NETWORK COMPUTING SYSTEM

Область техники, к которой относится изобретение
Предлагаемое изобретение относится к способу обработки пакетов TCP протокола проходящих через кластер шлюзов безопасности сетевой вычислительной системы.
Уровень техники
Одним из подходов к повышению производительности устройств в области вычислительной техники является объединение двух и более устройств в одно логическое устройство, называемое кластером.
Объединение нескольких шлюзов безопасности в кластер требует устройства, которое будет распределять нагрузку между элементами кластера (шлюзами безопасности), такое устройство называется балансировщиком нагрузки.
Современные L2/L3 коммутаторы поддерживает различные режимы балансировки нагрузки. Но все подходы к балансировки нагрузки посредством внешнего устройства по отношению к кластеру не позволят гарантировать симметричность прохождения пакетов от клиента к серверу и в обратном направлении. Шлюз безопасности может корректно обрабатывать сетевой трафик, только если пакеты одного сетевого соединения от клиента к серверу и в обратном направлении идут через один и тот же шлюз безопасности. Но в случае балансировки внешним устройством трафик одного сетевого соединения может пойти ассиметрично, в направлении от клиента к серверу через один элемент кластера, а в обратном - через другой элемент кластера, что приведет к некорректной обработки сетевого потока.
Одним из подходов в решении проблемы ассиметричного прохождения трафика через кластер, является добавление функции пересылки пакетов между элементами кластера. Элемент кластера, который выполняет пересылку пакетов соединения, назовем экспедитором по отношению к данному соединению. Экспедитор пересылает пакеты соединения на элемент кластера, который содержит актуальный контекст для обработки пакетов данного соединения, такой элемент кластера назовем владельцем для данного соединения.
При выделении роли экспедитора возникает следующая задача, как экспедитору узнать какой элемент кластера является владельцем соединения, на который надо будет пересылать пакет. Существует ряд методов для решения данной задачи.
Так, например, после приема элементом кластера первого пакета нового соединения можно рассылать информацию об этом всем элементам кластера. Основной недостаток данного способа - повышенная нагрузка на все элементы кластера при обработке одного соединения.
Можно также выделить отдельный элемент кластера, который обладает информацией о владельце соединения, назовем эту роль директором для соединения, Директор однозначно вычисляется из идентификатора соединения (за идентификатор принимают кортеж из IP-адресов, номера протокола и портов соединения), например, посредством хэш-функции, отображающей множество идентификаторов соединений в множество элементов кластера). При приеме первого пакета соединения элементом кластера, информация о данном соединения распространяется не на все элементы кластера, а только на директора для данного соединения. Основной недостаток данного подхода - это необходимость выполнить запрос к директору перед обработкой пакета, для которого нет информации в отношении элемента кластера.
Известен также способ обработки протокола TCP в кластере (патент США №9800549, приоритет от 11.02.2015 г.), включающий
• получение пакета в одном из множества шлюзов безопасности (ШБ) в одном из множества кластеров ШБ в домене кластеров сетевой среды, причем
домен кластеров сформирован подсетью данных, образованной множеством центров обработки данных (ЦОД) с множеством кластеров ШБ, обслуживающих трафик для данного набора защищенных конечных пунктов приема в составе множества ЦОД,
любой кластер ШБ обслуживает соответствующий ЦОД из множества ЦОД,
каждый кластер ШБ включает множество ШБ;
• идентификацию пакета в ШБ как соответствующего профилю трафика ЦОД;
• идентификацию в ШБ кластера назначения во множестве кластеров ШБ в домене кластеров;
• формирование и передача запроса из ШБ директору домена о владельце потока;
• если владелец потока выявлен директором домена, то осуществляют отправку пакета владельцу потока в кластер назначения;
• если владелец потока не выявлен директором домена, и директор домена имеет данные о состоянии потока для потока, к которому пакет принадлежит, то назначают ШБ владельцем потока; и
• идентификацию ШБ как владельца потока, если владелец потока не выявлен директором домена, причем
директор домена имеет данные о состоянии потока для потока, к которому принадлежит пакет, и
пакет не является начинающим связь пакетом.
Способ также может предусматривать, в процессе идентификации кластера назначения, вычисление хэш-функции (cHash) всех кластеров ШБ в домене кластеров.
Кроме того, способ может дополнительно включать идентификацию директора домена в кластере назначения путем вычисления хэш-функции (cHash) всех ШБ в кластере назначения.
При описании способа используются некоторые специфические термины, в частности
1) поток (flow) - последовательность пакетов, пересылаемых в обоих направлениях при одном или более соединениях, при этом любой поток может быть идентифицирован с помощью уникального набора данных (кортежа), состоящего из типа протокола, сетевых адресов источника и получателя и используемых портов источника и получателя;
2) владелец потока - это шлюз безопасности (ШБ), который получает первый пакет потока;
3) директор домена - это сетевое устройство, в т.ч. другой ШБ, которое выполнено с возможностью поддерживать состояние (обработки) и сохранять данные потока в домене кластеров;
4) кластер назначения - это кластер, к которому принадлежит владелец потока.
5) экспедитор - это ШБ, который пересылает пакеты потока владельцу потока.
В известном способе предлагается процесс взаимодействия, позволяющий экспедитору при получении пакета с TCP-сообщением не запрашивать у директора домена информацию о владельце для данного пакета. Это достигается за счет того, что владелец сохраняет собственный информацию в поле TCP Cookie пакета, затем сохраненная информация будет присутствовать и в пакетах в обратном направлении, которые могут попасть на ШБ, не являющийся владельцем для данного потока. Тогда ШБ извлекает информацию о том, кто является владельцем из TCP Cookie, пересылает пакет владельцу и создает правило пересылки, которое обеспечит пересылку последующих пакетов данного потока владельцу. ШБ который пересылает пакет владельцу, является экспедитором.
Известный способ принимается за прототип.
Недостатками известного способа являются возможность DoS-атак на кластер путем посылки ложных пакетов и необходимость на протяжении всего соединения модифицировать все пакеты данного соединения.
Злоумышленник, находящийся в недоверенной зоне (например, Интернет) может послать пакеты с TCP-сообщением, в которых указан фиктивный владелец в TCP Cookie. При этом ШБ, который примет данный пакет, создаст правила пересылки. Если злоумышленник пошлет большое количество таких пакетов, то объем памяти в ШБ, выделенной под правила пересылки, израсходуется, и кластер перестанет корректно обрабатывать пакеты, соответственно, клиенты, которые работали через данный кластер, будут получать отказ в обслуживании.
Раскрытие изобретения
Техническим результатом является
1) обеспечение защиты кластера от DoS-атак,
2) отсутствие необходимости модифицировать все пакеты соединения.
Для этого предлагается способ обработки TCP протокола в кластере сетевой вычислительной системы, причем система включает
• кластер, установленный на границе защищаемого участка сети и содержащий
по меньшей мере, два шлюза безопасности, каждый из которых имеет уникальный номер в пределах кластера и выполнен с возможностью
принимать сетевые пакеты,
обрабатывать сетевые пакеты в соответствии с настройками,
создавать и использовать контекст соединения, который хранит необходимую информацию для обработки сетевых пакетов одного соединения,
вычислять ключевую криптографическую хэш-функцию (ККХФ),
формировать и хранить ключевую информацию,
принимать и обрабатывать пакеты от других шлюзов,
создавать правила пересылки между шлюзами,
пересылать пакеты в соответствии с правила пересылки;
два сетевых коммутатора, выполненные с возможностью
осуществлять балансировку трафика между шлюзами кластера,
назначать шлюзы для приема пакетов,
направлять пакеты одного и того же соединения на один и тот же шлюз безопасности,
причем 1-й коммутатор, соединяет защищаемый участок сети и шлюзы безопасности, 2-й коммутатор соединяет незащищаемый участок сети и шлюзы безопасности;
• по меньшей мере, одно сетевое устройство (клиент), расположенный в защищаемом участке сети и выполненный с возможностью инициировать и устанавливать TCP соединения;
• по меньшей мере, одно сетевое устройство (сервер), расположенный вне защищаемого участка сети и выполненный с возможностью устанавливать TCP соединения;
способ, заключающийся в том, что
• формируют в оперативной памяти каждого шлюза таблицу для хранения трех ключей и относящихся к каждому ключу атрибутам
порядковый номер,
признака четности порядкового номера,
время создания ключа;
• формируют в шлюзе безопасности, имеющий наименьший номер, случайный ключ;
• вычисляют для сформированного ключа порядковый номер, начиная с нуля, признаки четности порядкового номера и время создания ключа;
• рассылают ключ и связанные с ними атрибуты во все остальные шлюзы безопасности;
• сохраняют во всех шлюзах безопасности ключ и связанные с ними атрибуты в таблицу;
• устанавливают период смены ключа в кластере;
• посылают сетевой пакет, содержащий TCP-сообщение SYN для установки соединения (запрос), из клиента на сервер;
• принимают запрос от клиента в шлюзе безопасности кластера (1-м шлюзе), назначенном 1-м коммутатором;
• обрабатывает запрос в 1-м шлюзе, выполняя следующие действия:
создают контекст соединения, который содержит всю необходимую информацию для обработки последующих пакетов данного соединения;
обрабатывают запрос в соответствии с настройками шлюза безопасности;
формируют идентификатор сетевого потока из значений полей: IP-адрес источника, IP-адрес назначения, протокол, порт источника и порт назначения, которые будут в ответном сетевом пакете на запрос;
если в таблице три ключа, то выбирают ключ, имеющий промежуточное время создания, если в таблице два ключа, то выбирают ключ, имеющий наиболее раннее время создания, если в таблице один ключ, то выбирают имеющийся ключ;
вычисляют ключевую криптографическую хэш-функцию (ККХФ) от идентификатора сетевого потока с использованием выбранного ключа;
формируют сообщение ClusterSecCookie, содержащее следующие поля:
идентификатор шлюза, содержит идентификатора 1-го шлюза,
признак четности, содержит признака четности выбранного ключа,
значение ККХФ, содержит вычисленное значение ККХФ;
определяют наличие подзаголовка опций Timestamps option (TSopt) в поле Timestamp Value (TSval) в составе заголовка TCP протокола;
если подзаголовок имеется, то исходное значение поля TSval сохраняют в контексте соединения, иначе добавляют данный подзаголовок в контекст соединения;
записывают сообщение ClusterSecCookie в поле Timestamp Value (TSval) подзаголовка опций Timestamps option (TSopt);
• отправляют запрос из 1-го шлюза на серве;
• принимают запрос из 1-го шлюза на сервере;
• формируют на сервере сетевой пакет (ответ), включающий TCP-сообщение приема соединения SYNACK, которое содержит сообщение ClusterSecCookie в поле Timestamp Echo Reply (TSecr);
• отправляют ответ от сервера в адрес клиента;
• принимают ответ от сервера в шлюзе безопасности кластера (2-м шлюзе), назначенном 2-м коммутатором;
• обрабатывает ответ в 2-м шлюзе, выполняя следующие действия:
формируют идентификатор сетевого потока из значений полей: IP-адрес источника, IP-адрес назначения, протокол, порт источника и порт назначения ответа;
извлекают сообщение ClusterSecCookie из поля Timestamp Echo Reply (TSecr);
выбирают ключ из таблицы ключей, выполняя следующие действия:
если в таблице три ключа и признак четности из ClusterSecCookie совпадает с признаком четности ключа, имеющего промежуточное время создания, то выбирают данный ключ;
если в таблице два ключа и признак четности из ClusterSecCookie совпадает с признаком четности ключа, имеющего более раннее время создания, то выбирают данный ключ;
если в таблице один ключ и признак четности из ClusterSecCookie совпадает с признаком четности ключа, то выбирают данный ключ;
если ключ не выбран и в таблице есть ключ, признак четности которого совпадает с признаком четности из ClusterSecCookie, и время создания которого отличается от текущего времени не более чем на одну четвертую от периода смены ключа, то выбирают данный ключ,
если не удалось выбрать ключ, то обработка ответа завершается;
вычисляет ККХФ от идентификатора сетевого потока, используя выбранный ключ;
если вычисленное значение ККХФ не совпадает со значением ККХФ из ClusterSecCookie, то обработка ответа завершается;
если вычисленное значение совпадает со значением ККХФ из Cluster-SecCookie, то выполняют следующие действия:
пересылают ответ шлюзу, указанному в поле идентификатор шлюза ClusterSecCookie (1-й шлюз);
создают правило обработки, которое обеспечивает пересылку в 1-й шлюз сетевых пакетов, идентификатор сетевого потока которых совпадает с идентификатор сетевого потока ответа;
• принимают ответ из 2-го шлюза в 1-м шлюзе;
• находят в 1-м шлюзе контекст соединения;
• восстанавливают в 1-м шлюзе сохраненное ранее значение поля Timestamp Value (TSval) в поле Timestamp Echo Reply (TSecr);
• обрабатываем в 1-м шлюзе ответ в соответствии с настройками шлюза;
• отправляют ответ из 1-го шлюза клиенту;
• периодически сменяют ключ, выполняя следующие действия:
если с момента времени последней смены ключа прошло более половины периода смены ключа, то в шлюзе безопасности, имеющий наименьший номер, выполняя следующие действия:
формируют случайный ключ;
вычисляют для сформированного ключа порядковый номер, признак четности порядкового номера и время создания ключа;
рассылают ключ и связанные с ними атрибуты во все остальные шлюзы безопасности;
если получен новый ключ, то в каждом шлюзе выполняют следующие действия:
если в таблице три ключа, то полученный ключ и его атрибуты сохраняют на месте ключа с наиболее ранним временем создания;
иначе полученный ключ и его атрибуты добавляют в таблицу.
После запроса об установке соединения и ответа, последующие пакеты данного соединения будут следовать через кластер без модификации полей Timestamp Value (TSval) и Timestamp Echo Reply (TSecr).
В отличие от прототипа, где идентификатор элемента кластера сохраняется TCP Cookie без механизмов проверки подлинности данного значения, предлагаемый способ использует ККХФ и расписание смены секретного ключа для ККХФ, что обеспечивает проверку подлинности идентификатора элемента кластера, сохраненного за соединением (в полях Timestamp Value и Timestamp Echo Reply).
Это делает невозможным посылку фиктивных пакетов с наличием TCP-сообщения о приеме соединения SYNACK, с поддельной информацией о владельце соединения (в предлагаемом способе это - 1-й шлюз).
Если такой защиты нет, то пакет принимается и обрабатывается экспедитором (в предлагаемом способе это - 2-й шлюз), на каждое соединения экспедитор будет создавать запись для пересылки, которая расходует оперативную память. Большое количество фиктивных записей, которое будет создаваться в ходе DoS-атаки, может исчерпать память и снизить общую производительность элемента кластера.
В результате, обеспечивается защита кластера от DoS-атак и отсутствует необходимость модифицировать все пакеты соединения.
Краткое описание чертежей
На фигуре графического изображения приведена схема кластера в сети, где указаны следующие элементы:
1 - клиент,
2 - кластер,
3 - коммутатор внутренний (в защищаемой сети),
7 - коммутатор внешний (со стороны незащищаемой сети),
4, 5, 6 - шлюзы безопасности,
8 - сервер.
Осуществление изобретения
Рассмотрим реализацию предложенного способа, на примере взаимодействие веб-браузера с веб-сервером.
В качестве клиента (элемент 1 на фигуре графического изображения), выполняющего запрос, может использоваться компьютер с веб-браузером Mozilla, в качестве сервера (элемент 8 на фигуре графического изображения) - компьютер с Apache HTTP Server.
Коммутаторы (элементы 3 и 7 на фигуре графического изображения), выполняющие распределение трафика между ШБ (элементы 4, 5 и 6 на фигуре графи-ческого изображения), должен иметь функцию Equal-cost multi-path (ЕСМР) маршрутизации, обеспечивающую сохранение маршрута для пакетов одного и того же соединения.
В качестве ШБ используется сервер с операционной системой (ОС) Linux, с разработанным программным модулем анализа и пересылки пакетов, который peaлизует предложенный способ. В качестве функции безопасности ОС Linux выполняет фильтрацию сетевого трафика посредством подсистем netfilter и iptable. Подсистема netfilter создает и хранит контекст соединения, который расширяется дополнительными полями, необходимыми для реализации способа.
ОС Linux с подсистемами netfilter и iptable, обеспечивает выполнение следующих возможностей:
• принимать сетевые пакеты,
• обрабатывать сетевые пакеты в соответствии с настройками,
• создавать и использовать контекст соединения, который хранит необходимую информацию для обработки сетевых пакетов одного соединения,
• принимать и обрабатывать пакеты от других шлюзов.
Модуль анализа и пересылки пакетов, обеспечивает выполнение следующих функций:
• вычислять ключевую криптографическую хэш-функцию (ККХФ),
• формировать и хранить ключевую информацию,
• создавать правила пересылки между шлюзами,
• пересылать пакеты в соответствии с правила пересылки.
Модуль анализа и пересылки пакетов требует задания следующих параметров:
• уникальный номер ШБ в кластере на котором исполняется модуль,
• список ШБ, входящих в кластер, с указанием уникального номера и МАС-адреса каждого шлюза,
• период смены ключа.
Сформировать модуль анализа и пересылки пакетов, может специалист в области программирования (программист), компетентный в области сетевых технологий.
После сформирования модуля можно начать выполнение способа, для чего в модуле анализа и пересылки пакетов выполняются следующие действия:
• формируют в оперативной памяти таблицу для хранения трех ключей и относящихся к каждому ключу атрибутам
порядковый номер,
признака четности порядкового номера,
время создания ключа;
• сохраняют в памяти заданные параметры:
уникальный номер ШБ текущего ШБ,
список ШБ, входящих в кластер, с указанием уникального номера и МАС-адреса каждого шлюза,
период смены ключа;
• если уникальный номер текущего шлюза наименьший среди уникальных номеров в списке ШБ, то
формируют в ШБ, имеющий наименьший номер, случайный ключ,
вычисляют для сформированного ключа порядковый номер, начиная с нуля, признак четности порядкового номера и время создания ключа,
рассылают ключ и связанные с ними атрибуты во все остальные ШБ,
если уникальный номер текущего шлюза не наименьший среди уникальных номеров в списке ШБ, то при получении ключа и атрибутов ключа, сохраняют их в таблицу ключей.
Модуль анализа и пересылки пакетов регистрирует в ОС функцию обработки сетевых пакетов, которая должна быть применена к пакетам, которые будут переправлены в сеть в соответствии с правилами маршрутизации.
Для обработки сетевых пакетов в модуле анализа и пересылки пакетов выполняют следующие действия:
• если пакет содержит TCP-сообщение SYN (запрос), то
формируют идентификатор сетевого потока из значений полей: IP-адрес источника, IP-адрес назначения, протокол, порт источника и порт назначения, которые будут в ответном сетевом пакете на запрос;
если в таблице три ключа, то выбирают ключ, имеющий промежуточное время создания, если в таблице два ключа, то выбирают ключ, имеющий наиболее раннее время создания, если в таблице один ключ, то выбирают имеющийся ключ;
вычисляют ключевую криптографическую хэш-функцию (ККХФ) от идентификатора сетевого потока с использованием выбранного ключа;
формируют сообщение ClusterSecCookie, содержащее следующие поля:
идентификатор шлюза, содержит идентификатора текущего шлюза,
признак четности, содержит признак четности выбранного ключа,
значение ККХФ, содержит вычисленное значение ККХФ;
определяют наличие подзаголовка опций Timestamps option (TSopt) в поле Timestamp Value (TSval) в составе заголовка TCP протокола;
если подзаголовок имеется, то исходное значение поля TSval сохраняют в контексте соединения, иначе добавляют данный подзаголовок в контекст соединения;
записывают сообщение ClusterSecCookie в поле Timestamp Value (TSval) подзаголовка опций Timestamps option (TSopt);
• если пакет содержит TCP-сообщение SYNACK (ответ), то
формируют идентификатор сетевого потока из значений полей: IP-адрес источника, IP-адрес назначения, протокола, порт источника и порт назначения ответа;
извлекают сообщение ClusterSecCookie из поле Timestamp Echo Reply (TSecr);
выбирают ключ из таблицы ключей, выполняя следующие действия:
если в таблице три ключа и значение признака четности из Clus-terSecCookie совпадает с признаком четности ключа, имеющего промежуточное время создания, то выбираем данный ключ;
если в таблице два ключа и значение признака четности из Clus-terSecCookie совпадает с признаком четности ключа, имеющего более раннее время создания, то выбираем данный ключ;
если в таблице один ключ и значение признака четности из ClusterSecCookie совпадает с признаком четности ключа, то вы-бираем данный ключ;
если ключ не выбран и в таблице есть ключ, признак четности которого совпадает с признаком четности из ClusterSecCookie, и время создания которого отличается от текущего времени не более чем на одну четвертую от периода смены ключа, то выбирают данный ключ;
если не удалось выбрать ключ, то обработка ответа завершается, пакет отбрасывается и далее не обрабатывается;
вычисляют ККХФ от идентификатора сетевого потока, используя выбранный ключ;
если вычисленное значение ККХФ не совпадает со значением ККХФ из ClusterSecCookie, то обработка ответа завершается, пакет отбрасывается и далее не обрабатывается;
если вычисленное значение совпадает со значением поля значение ККХФ из ClusterSecCookie, то выполняют следующие действия:
пересылают ответ шлюзу, указанному в поле идентификатор шлюза ClusterSecCookie;
создают правило обработки, которое обеспечивает пересылку в шлюз указанный в ClusterSecCookie сетевых пакетов, идентификатор сетевого потока которых совпадает с идентификатор сетевого потока ответа;
пакет передается обратно в ОС для дальнейшей обработки (кроме отброшенных пакетов).
Модуль анализа и пересылки пакетов, для которого уникальный номер текущего ШБ наименьший в списке ШБ, выполняет периодическую смену ключа, если с момента времени последней смены ключа прошло более половины периода смены ключа, для чего выполняются следующие действия:
• формируют случайный ключ;
• вычисляют для сформированного ключа порядковые номера, признак четности порядкового номера и время создания ключа;
• рассылают ключ и связанные с ними атрибуты во все остальные шлюзы безопасности;
• если в таблице три ключа, то сформированный ключ и атрибуты сохраняют на месте ключа с наиболее ранним временем создания, иначе сформированный ключ и атрибуты добавляют в таблицу.
В модуле анализа и пересылки пакетов периодически сменяют ключ, выполняя следующие действия:
если с момента времени последней смены ключа прошло более половины периода смены ключа, то в шлюзе безопасности, имеющий наименьший номер, выполняя следующие действия:
формируют случайный ключ;
вычисляют для сформированного ключа порядковый номер, при-знак четности порядкового номера и время создания ключа;
рассылают ключ и связанные с ними атрибуты во все остальные шлюзы безопасности;
если получен новый ключ, то в каждом шлюзе выполняют следующие действия
если в таблице три ключа, то полученный ключ и его атрибуты сохраняют на месте ключа с наиболее ранним временем создания;
иначе полученный ключ и его атрибуты добавляют в таблицу.
Сообщение ClusterSecCookie помещается в поля Timestamp Value (TSval) и Timestamp Echo Reply (TSecr) TCP-заголовка, согласно RFC 7323 [https://tools.ietf.org/html/rfc7323], под данные поля отводится 4 байта (32 бита), распределить их можно на основе табл. 1.
В поля помещаются следующие данные
• поле идентификатор шлюза - содержит идентификатора шлюза,
• поле признак четности - содержит признака четности выбранного ключа,
• поле значение ККХФ, содержит вычисленное значение ККХФ.