главная - Статьи - Linux, FreeBSD
Порядок прохождения таблиц и цепочек IPTABLES
Порядок прохождения таблиц и цепочек IPTABLES
В этой главе мы рассмотрим порядок прохождения таблиц и цепочек в каждой таблице. Эта информация будет очень важна для вас позднее, когда вы начнете строить свои наборы правил, особенно когда в наборы правил будут включаться такие действия как DNAT, SNAT и конечно же TOS. Источник.
Общие положения
Когда пакет приходит на наш брандмауэр, то он сперва попадает на сетевое устройство, перехватывается соответствующим драйвером и далее передается в ядро. Далее пакет проходит ряд таблиц и затем передается либо локальному приложению, либо переправляется на другую машину. Порядок следования пакета приводится ниже.
Таблица 1. Порядок движения транзитных пакетов
Шаг |
Таблица |
Цепочка |
Примечание |
1 |
═ |
═ |
Кабель (т.е. Интернет) |
2 |
═ |
═ |
Сетевой интерфейс (например, eth0) |
3 |
Mangle |
PREROUTING |
Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.. |
4 |
Nat |
PREROUTING |
Эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях |
5 |
═ |
═ |
Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдет пакет - локальному приложению или на другой узел сети. |
6 |
Filter |
FORWARD |
В цепочку FORWARD попадают только те пакеты, которые идут на другой хост Вся фильтрация транзитного трафика должна выполняться здесь. Не забывайте, что через эту цепочку проходит траффик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации. |
7 |
Mangle |
FORWARD |
Далее пакет попадает в цепочку FORWARD> таблицы mangle, которая должна использоваться только в исключительных случаях, когда необходимо внести некоторые изменения в заголовок пакета между двумя точками принятия решения о маршрутизации. |
8 |
═ |
═ |
Принятие решения о дальнейшей маршрутизации, т.е. в этой точке, к примеру, решается на какой интерфейс пойдет пакет. |
9 |
Nat |
POSTROUTING |
Эта цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскировка (Masquerading). |
10 |
Mangle |
POSTROUTING |
Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации. |
11 |
═ |
═ |
Выходной сетевой интерфейс (например, eth1). |
12 |
═ |
═ |
Кабель (пусть будет LAN). |
Как вы можете видеть, пакет проходит несколько этапов, прежде чем он будет передан далее. На каждом из них пакет может быть остановлен, будь то цепочка iptables или что либо еще, но нас главным образом интересует iptables. Заметьте, что нет каких либо цепочек, специфичных для отдельных интерфейсов или чего либо подобного. Цепочку FORWARD проходят ВСЕ пакеты, которые движутся через наш брандмауэр/роутер. Не используйте цепочку INPUT для фильтрации транзитных пакетов, они туда просто не попадают! Через эту цепочку движутся только те пакеты, которые предназначены данному хосту!
А теперь рассмотрим порядок движения пакета, предназначенного локальному процессу/приложению
Таблица 2. Для локального приложения
Шаг |
Таблица |
Цепочка |
Примечаниеt |
1 |
═ |
═ |
Кабель (т.е. Интернет) |
2 |
═ |
═ |
Входной сетевой интерфейс (например, eth0) |
3 |
Mangle |
PREROUTING |
Обычно используется для внесения изменений в заголовок пакета, например для установки битов TOS и пр. |
4 |
Nat |
PREROUTING |
Преобразование адресов (Destination Network Address Translation). Фильтрация пакетов здесь допускается только в исключительных случаях. |
5 |
═ |
═ |
Принятие решения о маршрутизации. |
6 |
Mangle |
INPUT |
Пакет попадает в цепочку INPUT таблицы mangle. Здесь внесятся изменения в заголовок пакета перед тем как он будет передан локальному приложению. |
7 |
Filter |
INPUT |
Здесь производится фильтрация входящего трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили. |
8 |
═ |
═ |
Локальный процесс/приложение |
Важно помнить, что на этот раз пакеты идут через цепочку INPUT, а не через FORWARD. И в заключение мы рассмотрим порядок движения пакетов, созданных локальными процессами.
Таблица 3. От локальных процессов
Шаг |
Таблица |
Цепочка |
Примечание |
1 |
═ |
═ |
Локальный процесс |
2 |
Mangle |
OUTPUT |
Здесь производится внесение изменений в заголовок пакета. Фильтрация, выполняемая в этой цепочке, может иметь негативные последствия. |
3 |
Nat |
OUTPUT |
Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра. |
4 |
Filter |
OUTPUT |
Здесь фильтруется исходящий траффик. |
5 |
═ |
═ |
Принятие решения о маршрутизации. Здесь решается - куда пойдет пакет дальше. |
6 |
Nat |
POSTROUTING |
Здесь выполняется Source Network Address Translation (SNAT). Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP. |
7 |
Mangle |
POSTROUTING |
Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра. |
8 |
═ |
═ |
Сетевой интерфейс (например, eth0) |
9 |
═ |
═ |
Кабель (т.е., Internet) |
Теперь мы знаем, что есть три различных варианта прохождения пакетов. Рисунок ниже более наглядно демонстрирует это.
Этот рисунок дает довольно ясное представление о порядке прохождения пакетов через различные цепочки. В первой точке принятия решения о маршрутизации (routing decision) все пакеты, предназначенные данному хосту направляются в цепочку INPUT, остальные - в цепочку FORWARD.
Обратите внимание также на тот факт, что пакеты, с адресом назначения на брандмауэр, могут претерпеть трансляцию сетевого адреса (DNAT) в цепочке PREROUTING таблицы nat и соответственно дальнейшая маршрутизация в первой точке будет выполняться в зависимости от произведенных изменений.
Авторизуйтесь для добавления комментариев!