Интернет магазин китайских планшетных компьютеров



Компьютеры - Netfilter - Архитектура

11 мая 2011


Оглавление:
1. Netfilter
2. Архитектура



Путь проверки пакета в системе netfilter

В системе netfilter, пакеты пропускаются через цепочки. Цепочка является упорядоченным списком правил, а каждое правило может содержать критерии и действие или переход. Когда пакет проходит через цепочку, система netfilter по очереди проверяет, соответствует ли пакет всем критериям очередного правила, и если так, то выполняет действие. Вариантов возможных критериев очень много. Например, пакет соответствует критерию --source 192.168.1.1 если в заголовке пакета указано, что отправитель — 192.168.1.1. Самый простой тип перехода, --jump, просто пересылает пакет в начало другой цепочки. Также при помощи --jump можно указать действие. Стандартные действия доступные во всех цепочках — ACCEPT, DROP, QUEUE, и RETURN. Например, команды

iptables -A INPUT --source 192.168.1.1 --jump ACCEPT
iptables -A INPUT --jump other_chain

означают «добавить к концу цепочки INPUT следующие правила: пропустить пакеты из 192.168.1.1, а всё, что останется — отправить на анализ в цепочку other_chain».

Существует пять типов стандартных цепочек, встроенных в систему:

  • PREROUTING — для изначальной обработки входящих пакетов.
  • INPUT — для входящих пакетов адресованных непосредственно локальному процессу.
  • FORWARD — для входящих пакетов перенаправленных на выход.
  • OUTPUT — для пакетов генерируемых локальными процессами.
  • POSTROUTING — для окончательной обработки исходящих пакетов.

Также можно создавать и уничтожать собственные цепочки при помощи утилиты iptables.

Цепочки организованны в 4 таблицы:

  • raw — просматривается до передачи пакета системе определения состояний. Используется редко, например для маркировки пакетов, которые НЕ должны обрабатываться системой определения состояний. Для этого в правиле указывается действие NOTRACK. Содержит цепочки PREROUTING и OUTPUT.
  • mangle — содержит правила модификации IP‐пакетов. Среди прочего, поддерживает действия TTL, TOS, и MARK. Редко необходима и может быть опасна. Содержит все пять стандартных цепочек.
  • nat — просматривает только пакеты, создающие новое соединение. Поддерживает действия DNAT, SNAT, MASQUERADE, REDIRECT. Содержит цепочки PREROUTING, OUTPUT, и POSTROUTING.
  • filter — основная таблица, используется по умолчанию если название таблицы не указано. Содержит цепочки INPUT, FORWARD, и OUTPUT.

Цепочки с одинаковым названием но в разных таблицах — совершенно независимые объекты. Например, raw PREROUTING и mangle PREROUTING обычно содержат разный набор правил; пакеты сначала проходят через цепочку raw PREROUTING, а потом через mangle PREROUTING.

Механизм определения состояний

Механизм определения состояний — система трассировки соединений, важная часть netfilter, при помощи которой реализуется межсетевой экран на сеансовом уровне. Система позволяет определить, к какому соединению или сеансу принадлежит пакет. Механизм определения состояний анализирует все пакеты кроме тех, которые были помечены NOTRACK в таблице raw.

В системе netfilter, каждый пакет проходящий через механизм определения состояний, может иметь одно из четырёх возможных состояний:

  • NEW — пакет открывает новый сеанс. Классический пример — пакет TCP с флагом SYN.
  • ESTABLISHED — пакет является частью уже существующего сеанса.
  • RELATED — пакет открывает новый сеанс, связанный с уже открытым сеансом. Например, во время сеанса пассивного FTP, клиент подсоединяется к порту 21 сервера, сервер сообщает клиенту номер второго, случайно выбранного порта, после чего клиент подсоединяется ко второму порту для передачи файлов. В этом случае второй сеанс связан с уже существующим сеансом.
  • INVALID — все прочие пакеты.

Эта классификация пакетов во многих случаях отличается от официального описания сетевых протоколов. Например, согласно netfilter, TCP пакет ACK отвечающий на SYN — часть существующего сеанса, а по определению TCP такой пакет — всего лишь элемент открытия сеанса.

Определить сеансы некоторых протоколов очень просто; например, признак сеанса UDP — клиент с порта X посылает серверу на порт Y пакеты не реже чем раз в 30 секунд. У других протоколов сеанс определить сложнее, и netfilter должен анализировать содержимое пакетов чтобы правильно определить их состояние.

Просмотреть атрибуты активных подключений можно в псевдо‐файле /proc/net/nf_conntrack. Для каждого подключения указывается информация следующего вида:

tcp      6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 dport=22
 src=192.168.1.9 dst=192.168.1.6 sport=22 dport=32775 use=2

Утилита conntrack позволяет управлять механизмом определения состояний.



Просмотров: 1793


<<< Open Source Development Labs