Энциклопедия сетевых протоколов

Прохождение пакетов через таблицы и цепочки iptables
Дата: 21 Окт 2005 (Птн) в 11:24:38
Тема: Вопросы безопасности


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

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



Пакеты, адресованные данному хосту

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

Таблица 8 Этапы обработки пакетов, адресованных локальному хосту

Таблица или модуль

Цепочка

Действия

1



Пакет принимается из сетевой среды (кабеля)

2



Пакет поступает в сетевой интерфейс (например, eth0 или ppp0)

3

conntrack


Собирается и запоминается в таблице информация о состоянии соединения, к которому может относиться данный пакет

4

raw

PREROUTING

Эта цепочка позволяет отменить для пакета операции контроля соединений или включить для пакетов запись в журнальный файл сведений о выполнении условий каждой следующей цепочки.

5

mangle

PREROUTING

Данная цепочка служит для изменения пакетов до трансляции адресов и маршрутизации (изменение параметров TOS и т. п.).

6

nat

PREROUTING

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

7

QDiscipline


На этом этапе используется система управления трафиком, помещающая пакет в очередь или отбрасывающая его1.

8

routed


Принимается решение о маршрутизации пакета. В рассматриваемом случае маршрутизация не нужна2 (пакет адресован локальному хосту).

9

filter

INPUT

Эта цепочка используется для фильтрации пакетов, адресованных данному хосту. Отметим, что через данную цепочку проходят все пакеты, адресованные этому хосту, независимо от того, через какой интерфейс был принят пакет.

10

conntrack


Собирается и запоминается в таблице информация о состоянии соединения, к которому может относиться данный пакет

11

mangle

INPUT

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

12



Пакет передается локальному процессу или прикладной программе для дальнейшей обработки.

Отметим, что для рассмотренного случая не используются цепочки таблиц FORWARD и OUTPUT. На первый взгляд это может показаться странным3, но при более внимательном рассмотрении кажущаяся странность исчезает. Цепочка INPUT служит только для обработки пакетов, адресованных данному хосту, FORWARD применяется к пересылаемым между сетевыми интерфейсами пакетам, а OUTPUT служит только для работы с пакетами, сгенерированными данным хостом.

Локально сгенерированные пакеты

В таблице 3 перечислены этапы обработки пакетов, сгенерированных данным хостом.

Таблица 9 Этапы обработки пакетов, сгенерированных локальным хостом

Таблица или модуль

Цепочка

Действия

1



Пакет принят от локального процесса или приложения.

2

conntrack


Собирается и запоминается в таблице информация о состоянии соединения, к которому может относиться данный пакет

3

raw

OUTPUT

Эта цепочка позволяет отменить для пакета операции контроля соединений или включить для пакетов запись в журнальный файл сведений о выполнении условий каждой следующей цепочки.

4

mangle

OUTPUT

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

5

nat

OUTPUT

Эта цепочка служит для трансляции адресов (DNAT) в пакетах, сгенерированных брандмауэром.

6

filter

OUTPUT

Фильтрация пакетов, сгенерированных локальным хостом.

7

routed


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

8

mangle

POSTROUTING

Правила цепочки POSTROUTING из таблицы mangle используются для изменения пакетов перед их передачей в сетевой интерфейс.

9

nat

POSTROUTING

В этой цепочке осуществляется трансляция адресов SNAT. Не следует создавать в данной цепочке какие-либо фильтры, поскольку их достаточно просто обойти даже при выборе для цепочки политики DROP.

10

conntrack


Собирается и запоминается в таблице информация о состоянии соединения, к которому может относиться данный пакет

11



Пакет передается в один из сетевых интерфейсов (например, eth0)

12



Сетевой интерфейс передает данные (пакет) в сетевую среду.

Пересылаемые пакеты

Для пакетов, пересылаемых маршрутизатором между своими интерфейсами, осуществляется самое большое число операций. Этапы обработки таких пакетов рассмотрены в таблице 4.

Таблица 10 Этапы обработки пересылаемых маршрутизатором пакетов

Таблица или модуль

Цепочка

Действия

1



Пакет принимается из сетевой среды (кабеля)

2



Пакет поступает в сетевой интерфейс (например, eth0 или ppp0)

3

conntrack


Собирается и запоминается в таблице информация о состоянии соединения, к которому может относиться данный пакет

4

raw

PREROUTING

Эта цепочка позволяет отменить для пакета операции контроля соединений

5

mangle

PREROUTING

Данная цепочка служит для изменения пакетов до трансляции адресов и маршрутизации (изменение параметров TOS и т. п.).

6

nat

PREROUTING

Эта цепочка служит прежде всего для трансляции адресов DNAT. Не следует использовать в данной цепочке какие-либо фильтры, поскольку в некоторых случаях эти фильтры очень просто обходятся. На этом этапе восстанавливаются адреса для откликов на пакеты,в которых адрес отправителя был изменен с помощью SNAT.

7

QDiscipline


На этом этапе используется система управления трафиком, помещающая пакет в очередь или отбрасывающая его4.

8

routed


Принимается решение о маршрутизации пакета.

9

mangle

FORWARD

После принятия решения о маршрутизации пакет передается цепочке FORWARD таблицы mangle. Правила этой цепочки могут использоваться для внесения в пакеты различных изменений, которые целесообразно выполнить после маршрутизации, но до передачи пакета в сетевой интерфейс.

10

filter

FORWARD

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

11

mangle

POSTROUTING

Правила цепочки POSTROUTING из таблицы mangle используются для изменения пакетов перед их передачей в сетевой интерфейс.

12

nat

POSTROUTING

В этой цепочке осуществляется трансляция адресов SNAT и маскирование. Не следует создавать в данной цепочке какие-либо фильтры, поскольку их достаточно просто обойти даже при выборе для цепочки политики DROP.

13

conntrack


Собирается и запоминается в таблице информация о состоянии соединения, к которому может относиться данный пакет

14



Пакет передается в один из сетевых интерфейсов (например, eth1)

15



Сетевой интерфейс передает данные (пакет) в сетевую среду.



1Информацию о системе управления трафиком в Linux вы сможете найти в на сайте http://www.tldp.org/HOWTO/Traffic-Control-HOWTO/

2Вариант пересылки пакета в другой интерфейс (маршрутизация) рассматривается в параграфе .

3Кажущаяся странность усиливается при сравнении с цепочками ipchains, где каждый пакет проходил через цепочки INPUT, FORWARD и OUTPUT.

4Информацию о системе управления трафиком в Linux вы сможете найти в на сайте http://www.tldp.org/HOWTO/Traffic-Control-HOWTO/







Статья опубликована на сайте Энциклопедия сетевых протоколов
https://protocols.ru

Ссылка на исходную публикацию:
https://protocols.ru/modules.php?name=News&file=article&sid=102