Таблицы IPTables.
Рассмотрим путь прохождения пакета через определенные таблицы и цепочки IPTables, так называемый жизненный цикл пакета.
Входящий или исходящий пакеты проходят обязательную обработку брандмауэром и только потом они направляются конечному приложению или дальше по таблице маршрутизации, или отбрасываются(уничтожаются).
Рассмотрим последовательность таблиц, через которые проходит входящий пакет, предназначенный для локальной (то есть этой) машины:
- Сетевая плата получает входящий пакет и передает его дальше ядру системы.
- Пакет приходит на цепочку PREROUTING таблицы mangle.
- Пакет поступает на цепочку PREROUTING таблицы NAT.
- После выхода пакета из цепочки PREROUTING, ядро используя таблицу маршрутизации определяет, куда нужно отправить пакет.
- После принятия решения о маршрутизации, пакет поступает на цепочку INPUT таблицы mangle.
- Пакет поступает на цепочку INPUT таблицы filter. В этом месте происходит фильтрация пакетов.
- Ядро передает пакет конечному приложению, которому он посылался.
Последовательность обработки локальных пакетов, предназначенных для удаленных компьютеров, немного другая. Цепочки PREROUTING не применяются - вместо них используются цепочки POSTROUTING. Обработка правил этой цепочки выполняется после принятия решения о маршрутизации (используется в SNAT).
Рассмотрим порядок обработки исходящих пакетов:
- Локальное приложение посылает пакет. Ядро принимает решение о маршрутизации пакета, исходя из адреса получателя.
- Пакет попадает на цепочку OUTPUT таблицы mangle.
- Пакет прибывает на цепочку OUTPUT таблицы NAT.
- Пакет поступает на цепочку OUTPUT таблицы filter.
- Пакет приходит на цепочку POSTROUTING таблицы mangle.
- Пакет доставляется на цепочку POSTROUTING таблицы NAT.
- Ядро передает пакет сетевой плате.
- В это время происходит фильтрация пакетов в цепочке OUTPUT таблицы filter.
- Пакет получает сетевая плата и передает его ядру.
- Пакет приходит на цепочку PREROUTING таблицы mangle.
- Пакет прибывает на цепочку PREROUTING таблицы NAT.
- Ядро принимает решение о маршрутизации.
- Пакет поступает на цепочку FORWARD таблицы mangle.
- Пакет доставляется на цепочку FORWARD таблицы NAT.
- Пакет попадает на цепочку FORWARD таблицы filter.