СПОСОБ УПРАВЛЕНИЯ СОЕДИНЕНИЯМИ В МЕЖСЕТЕВОМ ЭКРАНЕ
METHOD OF MANAGING CONNECTIONS IN FIREWALL

Область техники, к которой относится изобретение
Предлагаемое изобретение относится к вычислительной технике и, в частности, к способам управления соединениями в межсетевых экранах, используемых в сетях передачи данных.
Уровень техники
Для обеспечения безопасности в современных сетях передачи данных часто используют специализированные устройства, межсетевые экраны (МЭ), для отделения участков сети от других участков и магистральных линий. В большинстве МЭ реализованы механизмы отслеживания соединений, которые позволяют выполнять контекстную обработку трафика и тем самым повысить уровень защищенности сети. Поскольку хранение информации об установленных соединениях потребляет ресурсы МЭ, то необходимо ограничивать количество одновременно установленных соединений и удалять неиспользуемые соединения.
Особенно значимой такая задача становится при повышении нагрузки на МЭ.
Для обеспечения сохранения устойчивости и максимальной пропускной способности в сетевых устройствах при повышенных нагрузках и перегрузках используются разные методы.
Так, например, в сетевых маршрутизаторах в условиях повышенной нагрузки могут применяться методы регулирования размеров очереди на входе (алгоритм RED/WRED) и/или блокировки пакетов при переполнении входного буфера (алгоритм Leaky bucket) [1, 2]. Несмотря на то, что данные механизмы достаточно эффективно справляются с перегрузками сети, они имеют ряд недостатков, обусловленных сферой их применения. Поскольку маршрутизаторы работают на сетевом уровне модели OSI, то они ориентируются исключительно на IP-заголовок, не анализируя при этом контекст соединений. Таким образом, в случае перегрузки сетевой маршрутизатор будет отбрасывать пакеты, относящиеся к уже установленным соединениям, наравне с новыми запросами, что повлечет за собой разрыв установленных соединений, что, в частности, является также целью атак типа отказ в обслуживании (DoS/DDoS-атаки).
Известен также способ управления состоянием соединений [3] в сетевом устройстве, выполняющем функции МЭ и содержащем
- процессор;
- модуль памяти;
- модуль сетевого интерфейса, обеспечивающий прием пакетов данных из внешней сети передачи данных и передачу пакетов во внутреннюю сеть;
- обеспечивающие модули.
Способ включает следующие действия:
- получают пакеты из внешней сети;
- формируют таблицу соединений, содержащую следующие сведения:
- тип сетевого протокола;
- состояние соединения;
- отметку времени обработки последнего пакета;
- определяют общее количество установленных соединений на данный момент времени;
- анализируют данные для каждого соединения, имеющиеся в таблице соединений;
- удаляют соединение, если отметка времени обработки последнего пакета в соединении превышает заранее определенное пороговое значение.
Непосредственная реализация операций в способе обеспечивается с помощью программного обеспечения (ПО), установленного в МЭ.
Известный способ принят за прототип для предлагаемого технического решения.
Основным механизмом очистки таблицы является удаление устаревших соединений, которые определяются путем сравнения отметки времени обработки последнего пакета в соединении с заранее определенным пороговым значением - таймаутом (под таймаутом будем понимать время ожидания пакетов в соединении перед его закрытием). В случае заполнения таблицы соединений перед добавлением нового соединения происходит поиск и удаление устаревших соединений с помощью LRU-алгоритма (Least Recently Used). Такой механизм очистки устаревших соединений работает не лучшим образом при повышенных нагрузках МЭ, поскольку каждое новое соединение будет требовать очистки заполненной таблицы и потребует вызова LRU-алгоритма. Поиск устаревших соединений является ресурсоемкой операцией, поэтому обращение к ней для каждого нового пакета может привести к исчерпанию ресурса процессора и снижению скорости обработки всего трафика. С другой стороны, дополнительные задержки в обработке трафика могут привести к переполнению входного буфера пакетов, что приведет к потере необработанных пакетов. Поскольку потерянные пакеты будут относиться как к новым соединениям, так и к уже установленным, то это повлечет нарушение обмена трафиком в рамках установленных соединений. Невысокая эффективность работы и нарушение работы установленных соединений при повышенных нагрузках является основным недостатком известного способа.
В известном способе для поиска в таблице соединений также предлагается использование хеш-значений, вычисленных на основании данных из пакета (адрес источника, адрес назначения, порт источника, порт назначения). При этом для исходного пакета (от клиента к серверу) и для ответного пакета предполагается формирование одного и того же хеш-значения за счет перестановки адресов источника и назначения при формировании хеш-значения для ответного пакета. Предложенный способ не учитывает возможности модификации пакета в результате трансляции адресов (NAT), что сужает границы его применения.
Кроме того, известный способ не учитывает группы логически связанных соединений. Так, например, при прохождении ICMP-сообщения об ошибке необходимо закрыть соединение, к которому оно относится. А в рамках некоторых протоколов, таких как FTP, для передачи могут создаваться дополнительные соединения, и управлять временем жизни необходимо для всей группы соединений целиком, а не для отдельных соединений. Указанные ограничения также являются недостатком известного способа.
Раскрытие изобретения
Предлагаемый способ позволяет решить задачу очистки таблицы соединений в МЭ, в том числе при повышенных нагрузках.
Техническим результатом является:
- обеспечение устойчивой и надежной обработки установленных сетевых соединений независимо от уровня загрузки МЭ;
- обеспечение максимальной пропускной способности при повышении нагрузки МЭ.
Дополнительным техническим результатом является:
- повышение устойчивости межсетевого экрана к DoS/DDoS-атакам;
- возможность управления соединениями с трансляцией адресов;
- возможность управления группой логически связанных соединений для прикладных сетевых протоколов.
Для этого предлагается способ управления соединениями в межсетевом экране, заключающийся в том, что
- получают пакеты из внешней сети;
- формируют таблицу соединений, содержащую следующие сведения:
- информацию о пакетах, входящих в соединение (исходный пакет, ответный пакет, ошибки ICMP);
- информацию о преобразованиях пакета в случае трансляции адресов; о типе сетевого протокола;
- состояние соединения (новое, установленное, закрытое);  отметка времени обработки последнего пакета;
- информацию о группах соединений в случае прикладных протоколов (FTP, SIP);
- определяют общее количество установленных соединений на данный момент времени;
- определяют уровень загрузки межсетевого экрана путем сравнения количества установленных соединений с определенной пороговой величиной;
- определяют новые и установленные соединения на основе двустороннего обмена пакетами между клиентом и сервером;
- определяют закрытые соединения на основании обработки ICMP-сообщений об ошибках или флагов в TCP-заголовке (только для протокола TCP);
- динамически определяют текущие значения таймаутов для соединений на основании следующих параметров:
- тип сетевого протокола;
- состояние соединения;
- уровень загрузки межсетевого экрана;
- изменяют отметку времени обработки последнего пакета в случае прохождения любого пакета в рамках данного соединения или в рамках группы соединений;
- удаляют соединение, если отметка времени обработки последнего пакета отличается от текущего времени больше, чем таймаут данного соединения.
Таким образом, в отличие от известного способа, в предложенном способе таймауты соединений динамически изменяются при изменении нагрузки МЭ. При увеличении нагрузки текущие значения таймаутов снижаются, что повышает пропускную способность МЭ.
В отличие от известного способа, очистка таблицы от устаревших соединений происходит на периодической основе, а не при обработке каждого нового пакета, поэтому затраты ресурса процессора на удаление устаревших соединений будут постоянны и не будут зависеть от загрузки МЭ.
Установленные соединения имеют приоритет перед новыми соединениями, поэтому в случае заполнения таблицы соединений будут блокироваться запросы на новые соединения, при этом обработка трафика в рамках уже установленных соединений не нарушается.
Механизм контроля состояния соединений позволяет повысить устойчивость МЭ к DoS/DDoS-атакам. В частности, использование принципов «трехстороннего рукопожатия» для всех протоколов (по аналогии с установкой соединений в TCP) позволяет значительно снизить вероятность реализации атаки типа UDP-flood, поскольку все соединения, в рамках которых не было произведено двустороннего обмена пакетами, будут считаться новыми и очищаться в первую очередь.
Осуществление изобретения
Рассмотрим пример реализации предложенного способа в МЭ, соединяющем внешнюю сеть (например, Интернет) и внутреннюю корпоративную сеть передачи данных.
МЭ состоит из следующих элементов:
- процессора;
- модуля памяти (оперативной и постоянной);
- модуля сетевого интерфейса, обеспечивающего прием пакетов данных из внешней сети и передачу пакетов во внутреннюю сеть и обратно.
МЭ работает под управлением операционной системы общего назначения (например, Linux Ubuntu 9.10) и программного обеспечения (ПО), реализующего необходимые функции МЭ.
При описании алгоритма термин "клиент" будет применяться по отношению к узлу, инициирующему соединение, а термин "сервер" - к узлу, принимающему соединение. Под исходным пакетом будет подразумеваться пакет от клиента к серверу, а под ответным - от сервера к клиенту.
С помощью ПО реализуются:
- подсистема фильтрации пакетов;
- подсистема обработки соединений;
- подсистема обработки прикладных протоколов.
Перед началом работы МЭ в подсистеме фильтрации пакетов пользователем (или системным администратором) могут быть установлены правила обработки сетевых пакетов (фильтры) для конкретной конфигурации внутренней сети. Также администратор может указать в подсистеме обработки соединений следующие значения:
- максимально допустимое количество установленных соединений (Max-Connection);
- максимальное значение таймаута для новых и закрывающихся соединений (TimeoutNewOrClosed);
- максимальное значение таймаута для соединений по протоколу UDP (TimeoutUdp);
- максимальное значение таймаута для соединений по протоколу TCP (TimeoutTcp);
- максимальное значение таймаута для остальных соединений (TimeoutlpOther);
- периодичность очистки устаревших соединений (TimeoutCleanup).
В функции подсистемы фильтрации пакетов входит:
- блокировка пакета в соответствии с настроенными сетевыми фильтрами;
- модификация пакета в соответствии с настроенными правилами трансляции;
- передача пакета в подсистему обработки соединений (в случае если пакет был пропущен фильтром).
В функции подсистемы обработки соединений входит:
- формирование и модификация таблицы соединений;
- формирование и модификация одной или нескольких таблиц для поиска принадлежащих соединениям пакетов;
- проверка соответствия (принадлежности) принятых пакетов установленным соединениям;
- управление состоянием соединений (создание, изменение состояния, удаление);
- управление значениями таймаутов для соединений.
В функции подсистемы обработки прикладных протоколов входит:
- поиск в составе пакетов запросов на установку дополнительных соединений;
- регистрация новых соединений в подсистеме обработки соединений;
- установка взаимосвязей между дочерними и родительскими соединениями в рамках группы соединений.
Таблица соединений содержит список всех установленных соединений и связанную с ними информацию:
- информация о пакетах, входящих в соединение (исходный пакет, ответный пакет, ошибки ICMP).
- тип сетевого протокола;
- состояние соединения;
- отметка времени обработки последнего пакета;
- информацию о преобразованиях пакета в случае трансляции адресов;
- информацию о группах соединений в случае прикладных протоколов (FTP, SIP).
Таблицы для поиска пакетов представляют собой индексированный список пакетов, оптимизированный для ускорения поиска. Список пакетов может быть реализован в форме бинарного дерева поиска, хеш-таблицы или иным способом. Одновременно могут использоваться сразу несколько списков для поиска пакетов, каждый из которых обрабатывает отдельные типы пакетов, на основе специфичной для них информации. Например, для обработки сообщений об ошибках ICMP требуется анализировать не только заголовок пакета, но и его содержимое.
Пакеты, принятые модулем сетевого интерфейса, сначала проверяются на принадлежность уже установленным соединениям. Если пакет принадлежит установленному соединению, то подсистема обработки соединений выполняет все необходимые действия над пакетом, и на этом обработка заканчивается.
В случае если подходящего соединения не найдено, то пакет передается на проверку в подсистему фильтрации пакетов. Подсистема фильтрации проверяет пакет на соответствие настроенным фильтрам, а также выполняет его модификацию, в соответствии с настроенными правилами трансляции адресов. Если пакет оказался заблокирован каким-то из фильтров, то на этом его обработка заканчивается.
Если подсистема фильтрации разрешила прохождение пакета для дальнейшей обработки, то в подсистеме обработки соединений создается запись о новом соединении. При создании нового соединения определяется информация обо всех пакетах, передаваемых в рамках соединения. Информация о пакетах, принадлежащих соединению, запоминается в таблицах поиска.
Если в процессе обработки пакет был модифицирован правилами трансляции, то эта информация отражается в информации о соединении следующим образом. Пакет до модификации сохраняется как исходный пакет, а на основании измененного пакета формируется ответный пакет (путем перестановки адресов и портов отправителя и получателя). Кроме этого, в соединении сохраняется информации о преобразовании пакета с указанием тех полей пакета, которые были изменены правилом NAT (SourcelP, SourcePort, DestinationIP, DestinationPort). На основании сохраненной информации в рамках соединения происходит следующая обработка пакета:
- если получен пакет от клиента к серверу и в информации о преобразовании пакета установлен флаг SourcelP/SourcePort, то в пакете в качестве IP-адреса/порта отправителя устанавливают значение 1Р-адреса/порта получателя из ответного пакета;
- если получен пакет от сервера к клиенту и в информации о преобразовании пакета установлен флаг SourcelP/SourcePort, то в пакете в качестве IP-адреса/порта получателя устанавливают значение IP-адреса/порта отправителя из исходного пакета;
- если получен пакет от клиента к серверу и в информации о преобразовании пакета установлен флаг DestinationlP/DestinationPort, то в пакете в качестве IP-адреса/порта получателя устанавливают значение IP-адреса/порта отправителя из ответного пакета;
- если получен пакет от сервера к клиенту и в информации о преобразовании пакета установлен флаг DestinationlP/DestinationPort, то в пакете в качестве IP-адреса/порта отправителя устанавливают значение IP-адреса/порта получателя из исходного пакета.
Для некоторых прикладных протоколов, таких как FTP и SIP, требуется организовывать соединения в группы для их совместного управления. Создание групп соединений производится в подсистеме обработки прикладных протоколов, которая анализирует весь передаваемый трафик в рамках заданных протоколов и ищет в составе пакетов запросы на установку дополнительных соединений. При обнаружении запроса на установку дополнительного соединения подсистема обработки прикладных протоколов регистрирует новое соединение в подсистеме обработки соединения и помечает его как дочернее, при этом соединение, в рамках которого была получена команда, помечается как родительское.
При обработке пакетов в рамках соединений отслеживается информация о состоянии соединения. Для управления состоянием соединения определяется набор флагов (в байте, характеризующем состояние соединения), приведенный в табл.1.
Таблица 1
Флаг
Бинарное представление
Описание
StateNew
00000000b
Новое соединение
StateSyn
00000001b
Отправлен 1-й пакет от клиента
StateSynAck
00000010b
Отправлен 1-й пакет от сервера
StateAck
00000100b
Отправлен 2-й пакет от клиента
StateEstablished
00000111b
Соединение установлено
StateFinClient
00001000b
Отправлен FIN по инициативе клиента
StateFinAckClient
00010000b
Подтверждение FIN, отправленного по инициативе клиента
StateFinServer
00100000b
Отправлен FIN по инициативе сервера
StateFinAckServer
01000000b
Подтверждение FIN, отправленного по инициативе сервера
StateClosed
01111000b
Соединение закрыто
Состояние соединения изменяется в зависимости от текущего состояния соединения, направления движения пакета и флагов TCP (только для TCP протокола). Анализ текущего состояния соединения осуществляется с помощью двух типов операций: оператор сравнения и проверка установленных битов. Изменение состояния соединения происходит за счет установки соответствующих битов.
При создании нового соединения его состояние инициализируется значением StateNew. После этого происходит проверка двустороннего обмена пакетами между узлом, инициирующим соединение (клиентом), и узлом, принимающим соединение (сервером). В случае успешного завершения проверки состояние соединения равно StateEstablished.
Реализация проверки двустороннего обмена пакетами для любого протокола выполняется следующим образом:
- в состоянии соединения устанавливается флаг StateSyn, если выполняются следующие условия:
- текущее состояние соединения равно StateNew;
- обрабатываемый пакет направлен от клиента к серверу;
- в случае протокола TCP в заголовке пакета установлен TCP флаг SYN;
- в состоянии соединения устанавливается флаг StateSynAck, если выполняются следующие условия:
- текущее состояние соединения равно StateSyn;
- обрабатываемый пакет направлен от сервера к клиенту;
- в случае протокола TCP в заголовке пакета установлены TCP флаги SYN и АСК;
- в состоянии соединения устанавливается флаг StateAck, если выполняются следующие условия:
- текущее состояние соединения равно StateSynAck;
- обрабатываемый пакет направлен от клиента к серверу;
- в случае протокола TCP в заголовке пакета установлен TCP флаг АСК.
Для протокола TCP предусмотрено изменение состояния соединения на основании TCP-флагов FIN и RST. Реализация обработки завершения ТСР-соединения выполняется следующим образом:
- в состоянии соединения устанавливается флаг StateClosed, если в заголовке TCP-пакета установлен флаг RST;
- в состоянии соединения устанавливается флаг StateFinClient, если выполняются следующие условия:
- в заголовке TCP-пакета установлен флаг FIN;
- обрабатываемый пакет направлен от клиента к серверу;
- в состоянии соединения устанавливается флаг StateFinServer, если выполняются следующие условия:
- в заголовке TCP-пакета установлен флаг FIN;
- обрабатываемый пакет направлен от сервера к клиенту;
- в состоянии соединения устанавливается флаг StateFinAckClient, если выполняются следующие условия:
- в текущем состоянии соединений установлен флаг StateFinClient;
- в заголовке TCP-пакета установлен флаг АСК;
- обрабатываемый пакет направлен от сервера к клиенту;
- в состоянии соединения устанавливается флаг StateFinAckServer, если выполняются следующие условия:
- в текущем состоянии соединений установлен флаг StateFinServer;
- в заголовке TCP-пакета установлен флаг АСК;
- обрабатываемый пакет направлен от клиента к серверу.
Если в рамках соединения для любого протокола получено ICMP-сообщение об ошибке (тип ICMP равен 3, 4, 11 или 12), то в состоянии соединения устанавливается флаг StateClosed.
При прохождении пакета в рамках соединения в качестве временной метки соединения устанавливается текущее время. Для дочерних соединений, принадлежащих к группе соединений, корректируется временная метка родительского соединения.
Подсистема обработки соединений на периодической основе выполняет процедуру очистки устаревших соединений. При проверке актуальности соединения учитываются только родительские соединения в группе. Если разница между текущим временем и временной меткой соединения превышает время ожидания для данного типа соединений, то такое соединение удаляется (в случае удаления родительского соединения удаляется вся группа целиком).
Таймаут соединения зависит от его текущего состояния и протокола и рассчитывается каждый раз при выполнении процедуры очистки соединения:
- если в состоянии соединения не установлен флаг StateEstablished или же установлен флаг StateClosed, то в качестве таймаута соединения берется значение TimeoutNewOrClosed;
- если не выполняется предыдущее условие, то таймаут соединения устанавливается в зависимости от протокола (TimeoutTcp, TimeoutUdp, TimeoutlpOther).
В зависимости от общего количества соединений, установленных на данный момент на МЭ, подсистема обработки соединений может корректировать заданные значения таймаутов. Поскольку таймауты соединений рассчитываются динамически на основании заданных констант, то изменение этих констант влияет на таймауты всех соединений (как новых, так и уже установленных). Для каждого типа таймаутов (TimeoutNewOrClosed, TimeoutTcp, TimeoutUdp, TimeoutlpOther), кроме его текущего значения, запоминается максимальное значение (которое было задано изначально), а также минимальное значение и шаг изменения.
В случае превышения количества установленных соединений над определенной пороговой величиной (UpperThreshold) таймауты всех соединений уменьшаются на соответствующий шаг изменения, при этом полученное значение не должно быть меньше минимального. После того как нагрузка снижается до нижней пороговой величины (LowerThreshold), текущие значения таймаутов увеличиваются на шаг изменения, при этом результат не должен превышать максимальное значение таймаута для данного типа соединений. Таким образом, с помощью механизма динамического изменения таймаутов МЭ может гибко управлять пропускной способностью в зависимости от текущей нагрузки.
Размер таблицы соединений, пороговые величины, значения таймаутов для разного типа соединений и период очистки могут варьироваться в зависимости от характеристик оборудования и характера передаваемого трафика.
Могут быть рекомендованы следующие соотношения для пороговых значений:
UpperThreshold=0,8*MaxConnection, LowerThreshold=0,5*MaxConnection.
При этом максимальный размер таблицы соединений (MaxConnection) определяется на основе объема доступной памяти МЭ и объема памяти, занимаемого одним соединением (зависит от реализации МЭ).
При выборе значений для таймаутов следует руководствоваться общим правилом, что таймаут соединений TCP кратно превышает таймаут соединений по протоколу UDP или IP, который, в свою очередь, на порядок превышает таймаут для новых и закрытых соединений. Период очистки соединений рекомендуется установить на порядок меньше, чем таймаут новых и закрытых соединений.
На основании опыта могут быть рекомендованы следующие максимальные значения таймаутов (в секундах):
TimeoutTcp=1800,
TimeoutUdp=TimeoutlpOther=300,
TimeoutNewOrClosed=5.
TimeoutCleanup=0,5.
Шаг изменения и минимальное значения таймаутов удобно определить на уровне 20% от максимального значения таймаутов.
Рассмотрим, каким образом использование механизма динамических таймаутов и контроль состояния соединений позволяет повысить устойчивость МЭ к DoS/DDoS-атакам. Обычно DoS/DDoS-атаки характеризуются большим количеством запросов на установление соединений, отправленных с различных IP-адресов. Таким образом, резко возрастает нагрузка на МЭ, при этом большинство соединений являются новыми (т.е. в них не установлен флаг StateEstablished). Поскольку значение таймаута для новых соединений (TimeoutNewOrClosed) намного меньше таймаутов для установленных соединений, то такие соединения будут очищаться в первую очередь, не создавая проблем установленным соединениям.
В отличие от прототипа, очистка устаревших соединений в МЭ происходит на периодической основе, а не при обработке пакета, поэтому затраты ресурса процессора на удаление устаревших соединений будут постоянны и не будут зависеть от загрузки МЭ. В случае достижения максимально допустимого количества соединений МЭ будет вынужден блокировать все новые запросы на соединения до очередного цикла очистки. Но даже в этом случае превышение количества соединений будет влиять только на новые соединения и никак не скажется на уже установленные соединения. В результате предложенный способ показывает высокую устойчивость к атакам типа отказ в обслуживании.
Все описанные процедуры и алгоритмы могут быть реализованы специалистом в данной области на основе известности выполняемых функций. Необходимо отметить, что возможны и другие варианты реализации предложенного способа, отличающиеся от описанного выше и зависящие от личных предпочтений при программировании отдельных действий и функций.
Источники информации
1. Семенов Ю.А. Телекоммуникационные технологии (v3.28, 20.08.2012 г.), электронная версия в сети Интернет по адресу http://book.itep.ru/
2. Степанов С.Н. Основы телетрафика мультисервисных сетей, М., Эко-Трендз, 2010.
3. Патент США №7831822, с приоритетом от 04.12.2006 г.