Сетевые фильтры

В данной статье рассмотрена работа с сетевым фильтром iptables в Linux.


Всего в iptables 5 цепочек правил (PREROUTING, FORWARD, INPUT, OUTPUT, POSTROUTING), в каждой цепочке может быть несколько таблиц. На рисунке предоставлены варианты прохождения пакетом через сетевой фильт.

process

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

Движение пакетов по цепочкам

Существует три различных варианта прохождения пакетов.

  • Порядок движения транзитных пакетов.

    1. Сеть. Например, сетевой интерфейс eth0.
    2. mangle PREROUTING. Обычно эта таблица цепочки используется для внесения изменений в заголовок пакета. Например для изменения битов TOS.
    3. nat PREROUTING. Эта таблица цепочки используется для трансляции сетевых адресов (DNAT - Destination Network Address Translation). SNAT - Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях.
    4. Маршрутизация. Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдет пакет – локальному приложению или на другой узел сети.
    5. mangle FORWARD. Далее пакет попадает в цепочку FORWARD таблицы mangle, которая должна использоваться только в исключительных случаях, когда необходимо внести некоторые изменения в заголовок пакета между двумя точками принятия решения о маршрутизации.
    6. filter FORWARD. В цепочку FORWARD попадают только те пакеты, которые идут на другой хост. Вся фильтрация транзитного трафика должна выполняться здесь. Эту цепочку проходит траффик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации.
    7. mangle POSTROUTING. Цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации.
    8. nat POSTROUTING. Цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскарадинг (Masquerading).
    9. Сеть. Выходной сетевой интерфейс, например, eth0.
  • Для локального приложения.

    1. Сеть. Например, сетевой интерфейс eth0.
    2. mangle PREROUTING. Обычно используется для внесения изменений в заголовок пакета, например, для установки битов TOS.
    3. nat PREROUTING. Преобразование адресов (DNAT - Destination Network Address Translation). Фильтрация пакетов здесь допускается только в исключительных случаях.
    4. Маршрутизация. Принятие решения о маршрутизации.
    5. mangle INPUT. Пакет попадает в цепочку INPUT таблицы mangle. Здесь внесятся изменения в заголовок пакета перед тем как он будет передан локальному приложению.
    6. filter INPUT. Здесь производится фильтрация входящего трафика. Все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
    7. Локальные процессы. Локальный процесс/приложение (т.е., программа-сервер или программа-клиент).
  • От локальных процессов.

    1. Локальные процессы. Локальный процесс/приложение (т.е., программа-сервер или программа-клиент).
    2. Маршрутизация. Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдет пакет – локальному приложению или на другой узел сети.
    3. mangle OUTPUT. Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия.
    4. nat OUTPUT. Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра.
    5. filter OUTPUT. Здесь фильтруется исходящий траффик.
    6. mangle POSTROUTING. Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра.
    7. nat POSTROUTING. Здесь выполняется SNAT (Source Network Address Translation). Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP.
    8. Сеть. Сетевой интерфейс, например, eth0.

Таблицы

Существуют 3 основные таблицы движения трафика.

Mangle

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

  • TOS
  • TTL
  • MARK

Действие TOS выполняет установку битов поля Type of Service в пакете. Это поле используется для назначения сетевой политики обслуживания пакета, т.е. задает желаемый вариант маршрутизации. Однако, следует заметить, что данное свойство в действительности используется на незначительном количестве маршрутизаторов в Интернете. Другими словами, не следует изменять состояние этого поля для пакетов, уходящих в Интернет, потому что на роутерах, которые таки обслуживают это поле, может быть принято неправильное решение при выборе маршрута. Действие TTL используется для установки значения поля TTL (Time To Live) пакета. Есть одно неплохое применение этому действию. Мы можем присваивать определенное значение этому полю, чтобы скрыть наш брандмауэр от чересчур любопытных провайдеров (Internet Service Providers). Дело в том, что отдельные провайдеры очень не любят когда одно подключение разделяется несколькими компьютерами. Тогда они начинают проверять значение TTL приходящих пакетов и используют его как один из критериев определения того, один компьютер “сидит” на подключении или несколько. Действие MARK устанавливает специальную метку на пакет, которая затем может быть проверена другими правилами в iptables или другими программами, например iproute2. С помощью “меток” можно управлять маршрутизацией пакетов, ограничивать траффик и т.п.

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.

Filter

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

Сведения о статье:
Дата публикации: 20/02/2020 5:48AM
Последнее обновление: 21/02/2020 9:29PM (rmntrvn)
Поделиться статьей: 
Автор: rmntrvn
Постоянная ссылка: http://kb.rmntrvn.ru/kb/netfilters
iptables | nftables | network control | prerouting | postrouting | tables |