• 3.2. Таблица Mangle
  • 3.3. Таблица Nat
  • 3.4. Таблица Filter
  • 3.1. Общие положения

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

    Таблица 3-1. Порядок движения транзитных пакетов

    (Шаг – Таблица – Цепочка – Примечание)


    Шаг:

    Таблица:

    Цепочка:

    Примечание: Кабель (т.е. Интернет)


    Шаг: 2

    Таблица:

    Цепочка: -

    Примечание: Сетевой интерфейс (например, eth0)


    Шаг: 3

    Таблица: mangle

    Цепочка: PREROUTING

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


    Шаг: 4

    Таблица: nat

    Цепочка: PREROUTING

    Примечание: Эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях


    Шаг: 5

    Таблица:

    Цепочка: -

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


    Шаг: 6

    Таблица: mangle

    Цепочка: FORWARD

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


    Шаг: 7

    Таблица: Filter

    Цепочка: FORWARD

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


    Шаг: 8

    Таблица: mangle

    Цепочка: POSTROUTING

    Примечание:  Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации.


    Шаг: 9

    Таблица: nat

    Цепочка: POSTROUTING

    Примечание:  Эта цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскарадинг (Masquerading).


    Шаг: 10

    Таблица:

    Цепочка: -

    Примечание:  Выходной сетевой интерфейс (например, eth1).


    Шаг: 11

    Таблица:

    Цепочка: -

    Примечание:  Кабель (пусть будет LAN).


    Как вы можете видеть, пакет проходит несколько этапов, прежде чем он будет передан далее. На каждом из них пакет может быть остановлен, будь то цепочка iptables или что либо еще, но нас главным образом интересует iptables. Заметьте, что нет каких либо цепочек, специфичных для отдельных интерфейсов или чего либо подобного. Цепочку FORWARD проходят ВСЕ пакеты, которые движутся через наш брандмауэр/ роутер. Не используйте цепочку INPUT для фильтрации транзитных пакетов, они туда просто не попадают! Через эту цепочку движутся только те пакеты, которые предназначены данному хосту!

    А теперь рассмотрим порядок движения пакета, предназначенного локальному процессу/приложению:

    Таблица 3-2. Для локального приложения

    (Шаг – Таблица – Цепочка – Примечание)


    Шаг: 1

    Таблица:

    Цепочка: -

    Примечание: Кабель (т.е. Интернет)


    Шаг:

    Таблица:

    Цепочка: -

    Примечание: Входной сетевой интерфейс (например, eth0)


    Шаг: 3

    Таблица: mangle

    Цепочка: PREROUTING

    Примечание: Обычно используется для внесения изменений в заголовок пакета, например для установки битов TOS и пр.


    Шаг: 4

    Таблица: nat

    Цепочка: PREROUTING

    Примечание: Преобразование адресов (Destination Network Address Translation). Фильтрация пакетов здесь допускается только в исключительных случаях.


    Шаг:

    Таблица:

    Цепочка: -

    Примечание: Принятие решения о маршрутизации.


    Шаг: 6

    Таблица: mangle

    Цепочка: INPUT

    Примечание: Пакет попадает в цепочку INPUT таблицы mangle. Здесь внесятся изменения в заголовок пакета перед тем как он будет передан локальному приложению.


    Шаг: 7

    Таблица: filter

    Цепочка: INPUT

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


    Шаг: 8

    Таблица:

    Цепочка: -

    Примечание:  Локальный процесс/приложение (т.е., программа-сервер или программа-клиент)


    Важно помнить, что на этот раз пакеты идут через цепочку INPUT, а не через FORWARD.

    И в заключение мы рассмотрим порядок движения пакетов, созданных локальными процессами.

    Таблица 3-3. От локальных процессов

    (Шаг – Таблица – Цепочка – Примечание)


    Шаг:

    Таблица:

    Цепочка: -

    Примечание:  Локальный процесс (т.е., программа-сервер или программа-клиент).


    Шаг: 2

    Таблица:

    Цепочка: -

    Примечание:  Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше – на какой адрес, через какой сетевой интерфейс и пр.


    Шаг: 3

    Таблица: mangle

    Цепочка: OUTPUT

    Примечание:  Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия.


    Шаг: 4

    Таблица: nat

    Цепочка: OUTPUT

    Примечание:  Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра.


    Шаг: 5

    Таблица: Filter

    Цепочка: OUTPUT

    Примечание:  Здесь фильтруется исходящий траффик.


    Шаг: 6

    Таблица: mangle

    Цепочка: POSTROUTING

    Примечание:  Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра.


    Шаг: 7

    Таблица: nat

    Цепочка: POSTROUTING

    Примечание:  Здесь выполняется Source Network Address Translation. Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP.


    Шаг:

    Таблица: -

    Цепочка: -

    Примечание:  Сетевой интерфейс (например, eth0)


    Шаг: 9

    Таблица: -

    Цепочка: -

    Примечание:  Кабель (т.е., Internet)


    Теперь мы знаем, что есть три различных варианта прохождения пакетов. Рисунок ниже более наглядно демонстрирует это:



    Этот рисунок дает довольно ясное представление о порядке прохождения пакетов через различные цепочки. В первой точке принятия решения о маршрутизации (routing decision) все пакеты, предназначенные данному хосту направляются в цепочку INPUT, остальные – в цепочку FORWARD.

    Обратите внимание также на тот факт, что пакеты, с адресом назначения на брандмауэр, могут претерпеть изменение сетевого адреса назначения (DNAT) в цепочке PREROUTING таблицы nat и соответственно дальнейшая маршрутизация в первой точке будет выполняться в зависимости от произведенных изменений. Запомните – все пакеты проходят через таблицы и цепочки по тому или иному маршруту. Даже если выполняется DNAT в ту же сеть, откуда пакет пришел, то он все равно продолжит движение по цепочкам.


    СОВЕТ: В сценарии rc.test-iptables.txt вы сможете найти дополнительную информацию о порядке прохождения пакетов.

    3.2. Таблица Mangle

    Как уже упоминалось выше, эта таблица предназначена, главным образом для внесения изменений в заголовки пакетов (mangle – искажать, изменять. прим. перев.). Т.е. в этой таблице вы можете устанавливать биты TOS (Type Of Service) и т.д.


    ОСТОРОЖНО: Еще раз напоминаю вам, что в этой таблице не следует производить любого рода фильтрацию, маскировку или преобразование адресов (DNAT, SNAT, MASQUERADE).


    В этой таблице допускается выполнять только нижеперечисленные действия:

    TOS

    TTL

    MARK

    Действие TOS выполняет установку битов поля Type of Service в пакете. Это поле используется для назначения сетевой политики обслуживания пакета, т.е. задает желаемый вариант маршрутизации. Однако, следует заметить, что данное свойство в действительности используется на незначительном количестве маршрутизаторов в Интернете. Другими словами, не следует изменять состояние этого поля для пакетов, уходящих в Интернет, потому что на роутерах, которые таки обслуживают это поле, может быть принято неправильное решение при выборе маршрута.

    Действие TTL используется для установки значения поля TTL (Time To Live) пакета. Есть одно неплохое применение этому действию. Мы можем присваивать определенное значение этому полю, чтобы скрыть наш брандмауэр от чересчур любопытных провайдеров (Internet Service Providers). Дело в том, что отдельные провайдеры очень не любят когда одно подключение разделяется несколькими компьютерами. и тогда они начинают проверять значение TTL приходящих пакетов и используют его как один из критериев определения того, один компьютер «сидит» на подключении или несколько.

    Действие MARK устанавливает специальную метку на пакет, которая затем может быть проверена другими правилами в iptables или другими программами, например iproute2. С помощью «меток» можно управлять маршрутизацией пакетов, ограничивать траффик и т.п.

    3.3. Таблица Nat

    Эта таблица используется для выполнения преобразований сетевых адресов NAT (Network Address Translation). Как уже упоминалось ранее, только первый пакет из потока проходит через цепочки этой таблицы, трансляция адресов или маскировка применяются ко всем последующим пакетам в потоке автоматически. Для этой таблицы характерны действия:

    DNAT

    SNAT

    MASQUERADE

    Действие DNAT (Destination Network Address Translation) производит преобразование адресов назначения в заголовках пакетов. Другими словами, этим действием производится перенаправление пакетов на другие адреса, отличные от указанных в заголовках пакетов.

    SNAT (Source Network Address Translation) используется для изменения исходных адресов пакетов. С помощью этого действия можно скрыть структуру локальной сети, а заодно и разделить единственный внешний IP адрес между компьютерами локальной сети для выхода в Интернет. В этом случае брандмауэр, с помощью SNAT, автоматически производит прямое и обратное преобразование адресов, тем самым давая возможность выполнять подключение к серверам в Интернете с компьютеров в локальной сети.

    Маскировка (MASQUERADE) применяется в тех же целях, что и SNAT, но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия – производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP, SLIP или DHCP.

    3.4. Таблица Filter

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









    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх