Welcome to Энциклопедия сетевых протоколов Санкт-Петербург
ул. Седова, д. 80
тел. (812) 4490770
факс (812) 4490771
Поиск

Модули
· Титульная страница
· Мир протоколов
· Моя страница
· Основные темы
· Архив публикаций
· Парад популярности
· Поиск
· Приватная почта
· Каталог ссылок
· Написать нам
· Сообщить новость
· Рекомендовать сайт
· Участники
· Документы и программы

Выбор языка
Язык интерфейса:


Статистика
19257039
запросов с 22 сентября 2005

Внешняя статистика
Rambler's Top100

Реклама от Google
Google


  
iptables- контроль состояния соединений
Опубликовано 20 Окт 2005 (Чтв) в 12:17:59
Тема: Вопросы безопасности

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



Машина состояний представляет собой специальный модуль в ядре Linux, обеспечивающий в реальности систему отслеживания состояния соединений для сетевого стека - conntrack. Для использования возможностей этой системы требуется ядро со включенной при компиляции опцией Connection tracking (required for masq/NAT)1. Контроль соединений требуется модулям Netfilter для того, чтобы иметь информацию о состоянии того или иного сетевого соединения. Для межсетевых экранов обычно требуется поддержка функций stateful inspection – проверки пакетов с учетом состояния соединений. Такая функциональность существенно повышает уровень безопасности в защищаемой брандмауэром сети и позволяет создавать более эффективные и понятные правила фильтрации.

Таблицы iptables могут прослеживать связь пакетов с тем или иным соединением и различать 4 варианта состояний:

  • NEW – пакет служит для организации нового соединения;

  • ESTABLISHED – пакет связан с одним из существующих соединений;

  • RELATED – соединение связано с другим соединением, находящемся в состоянии ESTABLISHED;

  • INVALID – пакет не относится ни к одному из существующих соединений и не служит для организации нового соединения.

Ниже мы рассмотрим каждое из этих состояний более подробно. Поддерживаемая iptables проверка соответствия --state позволяет создавать правила фильтрации с учетом состояния соединений и легко обнаруживать попытки организации новых сетевых соединений.

Все функции контроля соединений осуществляются модулем ядра Linux, носящим название conntrack. Этот модуль может быть загружаемым или встраивается в ядро в зависимости от выбранных опций компиляции ядра. Кроме основного модуля контроля состояний , обеспечивающего базовые функции, используются модули для отдельных протоколов (TCP, UDP, ICMP), предоставляющие более специфичную для соединений каждого из протоколов информацию, позволяющую контролировать все потоки данных через межсетевой экран. Собранные системой контроля соединений данные позволяют определить состояние каждого из существующих информационных потоков. Например, потоки данных UDP обычно можно идентифицировать по IP-адресам и номерам портов отправителя и получателя пакетов.

В ядрах версий до 2.4 имелась возможность управлять дефрагментацией пакетов. Поскольку iptables и Netfilter обеспечивают контроль состояния соединений, эта опция была исключена из новых версий ядра. Дело в том, что обеспечить контроль соединений при отключенной дефрагментации весьма проблематично, поэтому функции дефрагментации были включены в модуль conntrack и включаются автоматически. Поддержку дефрагментации невозможно отключить, не отказавшись от контроля соединений. При включенной опции Connection tracking дефрагментация подключается автоматически.

Все операции контроля соединений осуществляются до передачи пакетов в цепочку PREROUTING за исключением операций контроля для сгенерированных данным хостом пакетов, которые проходят только через цепочку OUTPUT. Если мы передаем в поток новый пакет, сгенерированный данным хостом, цепочка OUTPUT получит состояние NEW, а при получении ответного пакета состояние будет изменено для цепочки PREROUTING на ESTABLISHED. Если первый в соединении пакет не является локальным, цепочка PREROUTING получит состояние NEW.

Состояния соединений

При обработке внутри ядра пакеты могут находиться в различных состояниях по отношению к соединениям в зависимости от протокола. Однако за пределами ядра для описания всех возможных ситуаций достаточно 4 состояний, перечисленных выше и более подробно рассмотренных в таблице 7. Эти состояния будут в дальнейшем использоваться с опцией state для определения принадлежности пакетов к тому или иному соединению с учетом данных системы контроля соединений.

Таблица 7 Состояния сетевых соединений Linux

Имя

Описание

NEW

Состояние NEW говорит о том, что пакет является первым, который был обнаружен модулем conntrack для данного (возможно не существующего) соединения. Например, пакет SYN, являющийся первым пакетом для данного соединения, соответствует состоянию NEW. Однако не только пакеты SYN могут быть связаны с состоянием NEW. Такой подход может вызывать проблемы в некоторых случаях, но эта возможность очень полезна при попытках восстановить оборванные соединения с другими брандмауэрами или когда соединение разорвано по тайм-ауту, но не закрыто.

ESTABLISHED

Состояние ESTABLISHED говорит о потоке трафика в обоих направлениях. Соединения в состоянии ESTABLISHED просты для понимания. Для перехода в это состояние достаточно того, чтобы хост передал пакет и получил на него отклик от другого хоста. Соединения, находящиеся в состоянии NEW после получения отклика переходят в состояние ESTABLISHED. Сообщения об ошибках или перенаправления ICMP также могут рассматриваться как соединения ESTABLISHED, если это отклик на сгенерированное локально сообщение ICMP.

RELATED

Соединение считается находящимся в состоянии RELATED, если оно связано с другим соединением, уже находящимся в состоянии ESTABLISHED. Это означает, что до констатации состояния RELATED мы должны иметь соединение в состоянии ESTABLISHED. Последнее ESTABLISHED может породить новое соединение, которое будет рассматриваться как RELATED, если модуль conntrack сможет отследить связь между этими соединениями. Хорошим примером соединений в состоянии RELATED являются соединения FTP-data относительно соединений с портом FTP control, а также соединения DCC, организуемые через IRC. Использование контроля состояния позволяет передавать отклики ICMP, организовывать передачу данных по протоколу FTP и организовывать соединения DCC через межсетевые экраны. Отметим, что большинство протоколов TCP и некоторые протоколы UDP, использующие подобные механизмы, достаточно сложны и могут передавать информацию о соединениях в сегментах данных TCP или UDP и, следовательно, требуют специальной обработки (с помощью helper-модулей).

INVALID

Состояние INVALID означает, что пакет не может быть отнесен ни к одному из перечисленных выше состояний. Это может происходить в результате нехватки памяти в системе, сообщений об ошибках ICMP, не относящихся ни к одному из имеющихся соединений, и т. д. В общем случае имеет смысл отбрасывать (DROP) пакеты, для которых установлено состояние INVALID.

Описанные здесь состояния можно использовать вместе с соответствием --state (см. параграф 5.1.9.6.2 на стр. 164) для фильтрации пакетов в зависимости от состояния соединений. Такая возможность позволяет создавать межсетевые экраны с мощной системой контроля трафика, учитывающей состояние каждого соединения. До появления таких фильтров зачастую приходилось открывать все порты с номерами более 1024 для свободного прохода пакетов-откликов в сеть. Система отслеживания соединений и контроля их состояний обеспечивает возможность эффективной фильтрации входящего трафика.




Примечание:

 
Вход
Регистрационное имя

Пароль

[Восстановить пароль]

Если у Вас еще нет учетной записи, Вы можете зарегистрироваться.


Связанные ссылки
· Поиск в разделе Вопросы безопасности
· Статьи пользователя Николай Малых


Самая популярная статья раздела Вопросы безопасности:
Соответствия для правил iptables (часть 3)


Оценка статьи
Средняя оценка: 0
голос.: 0

Оцените эту публикацию:

Отлично
Очень хорошо
Хорошо
Приемлемо
Плохо


Параметры

 Вариант для печати Вариант для печати


Связанные темы

Контроль сетевого трафикаДетектирование попыток вторжения в сетьВопросы маршрутизации

"Вход" | Вход/регистрация | 0 коммент.
Комментарии выражают мнение их авторов. Администрация сайта не несет никакой ответственности за достоверность представленных в комментариях посетителей сведений, а также за содержание таких комментариев.

Для публикации своих комментариев Вам нужно зарегистрироваться..
Copyright © BiLiM Systems
Все права на опубликованные на сайте материалы принадлежат компании BiLiM Systems, если в опубликованном на сайте документе явно не указано иное.
Не разрешается воспроизведение опубликованных на сайте документов без согласия BiLiM Systems.

Copyright © 2005 by Nikolai Malykh
Based on PHP-Nuke by Francisco Burzi. This is free software, and you may redistribute it under the GPL. Author comes with absolutely no warranty.
Время генерации страницы: 0.11 сек.