Для понимания процессов фильтрации важно разобраться в процессах, происходящий при перемещении пакетов по стеку сетевых протоколов. В последующих параграфах мы рассмотрим все этапы обработки пакетов, принятых хостом для себя или пересылки другим хостам. Особое внимание будет уделено процессам принятия решения о пересылке пакетов (маршрутизация) и преобразовании сетевых адресов (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
|
|
|
Сетевой интерфейс передает данные (пакет) в сетевую среду.
|
Примечание:
|