11.2. Шлюзы сеансового уровня

Шлюз сеансового уровня представляет собой транслятор TCP-соединения. Этот шлюз принимает запрос авторизованного клиента на конкретные услуги и после проверки допустимости запрошенного сеанса устанавливает соединение с местом назначения (внешним компьютером). После этого шлюз копирует пакеты в обоих направлениях, не осуществляя их фильтрации.

Как правило, пункт назначения задается заранее, в то время как источников может быть много (соединение типа «один – много»). Используя различные порты, можно создавать различные конфигурации соединений. Данный тип шлюза позволяет создать транслятор TCP-соединения для любого определенного пользователем сервиса, базирующегося на TCP, осуществлять контроль доступа к этому сервису и сбор статистики по его использованию.

Шлюз следит за подтверждением (квитированием) связи между авторизированным клиентом и внешним компьютером, определяя, является ли запрашиваемый сеанс связи допустимым. Чтобы выявить допустимость запроса на сеанс связи, шлюз выполняет следующую процедуру (рис. 11.2):

· когда авторизированный клиент запрашивает некоторый сервис, шлюз принимает этот запрос, проверяя, удовлетворяет ли данный клиент базовым критериям фильтрации (например, может ли DNS-сервер определить IP-адрес клиента и ассоциированное с ним имя);

· затем, действуя от имени клиента, шлюз устанавливает соединение с внешним компьютером и следит за выполнением процедуры квитирования связи по протоколу TCP. Эта процедура состоит из обмена TCP-пакетами, которые помечаются флагами SYN (синхронизировать) и АСК (подтвердить).

Первый пакет сеанса TCP, помеченный флагом SYN и содержащий произвольное число, например 1000, является запросом клиента на открытие сеанса. Внешний компьютер, получивший этот пакет, посылает в ответ другой, помеченный флагом АСК и содержащий число, на единицу большее, чем в принятом пакете (в нашем случае 1001), подтверждая тем самым прием пакета SYN от клиента.

Далее осуществляется обратная процедура: компьютер посылает клиенту пакет SYN с исходным числом (например, 2000), а клиент подтверждает его получение передачей пакета АСК, содержащего число 2001. На этом процесс квитирования связи завершается.

Шлюз сеансового уровня признает запрошенное соединение допустимым только в том случае, если при выполнении процедуры квитирования связи флаги SYN и АСК, а также числа, содержащиеся в TCP-пакетах, оказываются логически связанными между собой.

После того как шлюз определил, что доверенный клиент и внешний компьютер являются авторизованными участниками сеанса TCP, и проверил его допустимость, он устанавливает соединение. Начиная с этого момента шлюз копирует и перенаправляет пакеты туда и обратно, не проводя никакой фильтрации. Он поддерживает таблицу установленных соединений, пропуская данные, относящиеся к одному из сеансов связи, зафиксированных в данной таблице. Когда сеанс завершается, шлюз удаляет соответствующий элемент из таблицы и разрывает цепь, использовавшуюся в текущем сеансе.

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

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