Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Таблицы IPTables.

Рубрика: Безопасность -> Брандмауэр
Метки: |
Среда, 11 февраля 2009 г.
Просмотров: 6705

Рассмотрим путь прохождения пакета через определенные таблицы и цепочки IPTables, так называемый жизненный цикл пакета.

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


     Рассмотрим последовательность таблиц, через которые проходит входящий пакет, предназначенный для локальной (то есть этой) машины:

  1. Сетевая плата получает входящий пакет и передает его дальше ядру системы.

  2. Пакет приходит на цепочку PREROUTING таблицы mangle.
  3. Пакет поступает на цепочку PREROUTING таблицы NAT.
  4. После выхода пакета из цепочки PREROUTING, ядро используя таблицу маршрутизации определяет, куда нужно отправить пакет.
  5. После принятия решения о маршрутизации, пакет поступает на цепочку INPUT таблицы mangle.
  6. Пакет поступает на цепочку INPUT таблицы filter. В этом месте происхо­дит фильтрация пакетов.
  7. Ядро передает пакет конечному прило­жению, которому он посылался.
     Фильтрация пакетов происходит только после принятия решения о маршрутизации, на которое влияют правила цепочек PREROUTING. Цепочка PREROUTING таблицы NAT, как правило, использу­ется для осуществления DNAT.

     Последовательность обработки локальных пакетов, предназначенных для удаленных компьютеров, немного другая. Цепочки PREROUTING не применяются - вместо них используются цепочки POSTROUTING. Обработка правил этой цепочки выполняется после принятия решения о маршрутизации (используется в SNAT).

     Рассмотрим порядок обработки исходящих пакетов:

  1. Локальное приложение посылает пакет. Ядро принимает решение о маршрутизации пакета, исходя из адреса получателя.

  2. Пакет попадает на цепочку OUTPUT таблицы mangle.
  3. Пакет прибывает на цепочку OUTPUT таблицы NAT.
  4. Пакет поступает на цепочку OUTPUT таблицы filter.
  5. Пакет приходит на цепочку POSTROUTING таблицы mangle.
  6. Пакет доставляется на цепочку POSTROUTING таблицы NAT.
  7. Ядро передает пакет сетевой плате.
  8. В это время происходит фильтрация пакетов в цепочке OUTPUT таблицы filter.
     Последний сценарий: входящий пакет предна­значен не для локальной машины. Нужно сделать форвардинг пакета. Обработка пакета происходит в следующем порядке:

  1. Пакет получает сетевая плата и передает его ядру.

  2. Пакет приходит на цепочку PREROUTING таблицы mangle.
  3. Пакет прибывает на цепочку PREROUTING таблицы NAT.
  4. Ядро принимает решение о маршрутизации.
  5. Пакет поступает на цепочку FORWARD таблицы mangle.
  6. Пакет доставляется на цепочку FORWARD таблицы NAT.
  7. Пакет попадает на цепочку FORWARD таблицы filter.
     Первоначально пакет обрабатывается правилами из цепочек PREROUTING таб­лицы mangle и NAT, в итоге адрес получателя может быть изме­нен. Если в результате принятия решения о маршрутизации станет ясно, что пакет нужно перенаправить, он переходит в цепочки FORWARD таблиц mangle, NAT и filter. Тогда пакет проходит не по цепочкам OUTPUT, а по цепочкам FORWARD.