Глубокое погружение в архитектуру Iptables и Netfilter

Вступление

Firewalls - важный инструмент, который можно настроить для защиты ваших серверов и инфраструктуры. В экосистеме Linux + iptables + - это широко используемый инструмент брандмауэра, который взаимодействует с ядром `+ netfilter + 'инфраструктурой фильтрации пакетов. Для пользователей и администраторов, которые не понимают архитектуру этих систем, создание надежных политик брандмауэра может быть пугающим не только из-за сложного синтаксиса, но и из-за количества взаимосвязанных частей, присутствующих в платформе.

В этом руководстве мы углубимся в архитектуру «+ iptables », чтобы сделать ее более понятной для пользователей, которым необходимо создавать собственные политики брандмауэра. Мы обсудим, как ` iptables ` взаимодействует с ` netfilter +` и как различные компоненты сочетаются друг с другом, чтобы обеспечить комплексную систему фильтрации и искажения.

Что такое IPTables и Netfilter?

Базовое программное обеспечение брандмауэра, наиболее часто используемое в Linux, называется + iptables +. Брандмауэр + iptables работает, взаимодействуя с хуками фильтрации пакетов в сетевом стеке ядра Linux. Эти хуки ядра известны как + netfilter + framework.

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

Крючки Netfilter

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

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

  • + NF_IP_PRE_ROUTING +: эта ловушка будет вызываться любым входящим трафиком очень скоро после входа в сетевой стек. Этот хук обрабатывается до того, как будут приняты какие-либо решения относительно маршрутизации пакета.

  • + NF_IP_LOCAL_IN +: эта ловушка запускается после того, как входящий пакет был маршрутизирован, если пакет предназначен для локальной системы.

  • + NF_IP_FORWARD +: эта ловушка запускается после того, как входящий пакет был перенаправлен, если пакет должен быть перенаправлен на другой хост.

  • + NF_IP_LOCAL_OUT +: эта ловушка запускается любым локально созданным исходящим трафиком, как только он попадает в сетевой стек.

  • + NF_IP_POST_ROUTING +: эта ловушка вызывается любым исходящим или перенаправленным трафиком после того, как маршрутизация произошла и непосредственно перед выводом на провод.

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

Таблицы и цепочки IPTables

Межсетевой экран + iptables + использует таблицы для организации своих правил. Эти таблицы классифицируют правила в соответствии с типом решений, которые они принимают. Например, если правило касается преобразования сетевых адресов, оно будет помещено в таблицу + nat +. Если правило используется, чтобы решить, следует ли разрешить пакету продолжаться до его места назначения, оно, вероятно, будет добавлено в таблицу + filter +.

Внутри каждой таблицы + iptables + правила далее организованы в отдельные «цепочки». В то время как таблицы определяются общей целью правил, которые они содержат, встроенные цепочки представляют хуки + netfilter +, которые их запускают. Цепочки в основном определяют, когда будут оцениваться правила.

Как видите, имена встроенных цепочек отражают имена хуков + netfilter +, с которыми они связаны:

  • + PREROUTING +: запускается ловушкой + NF_IP_PRE_ROUTING +.

  • + INPUT +: запускается ловушкой + NF_IP_LOCAL_IN +.

  • + FORWARD +: запускается ловушкой + NF_IP_FORWARD +.

  • + OUTPUT +: запускается ловушкой + NF_IP_LOCAL_OUT +.

  • + POSTROUTING +: запускается с помощью ловушки + NF_IP_POST_ROUTING +.

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

Существует только пять хуков ядра + netfilter +, поэтому цепочки из нескольких таблиц регистрируются в каждой хуке. Например, три таблицы имеют цепочки + PREROUTING +. Когда эти цепочки регистрируются в связанном хуке + NF_IP_PRE_ROUTING +, они указывают приоритет, определяющий порядок вызова цепочки + PREROUTING + каждой таблицы. Каждое из правил внутри цепочки + PREROUTING + с наивысшим приоритетом оценивается последовательно перед переходом к следующей цепочке + PREROUTING +. Мы рассмотрим конкретный порядок каждой цепочки в данный момент.

Какие таблицы доступны?

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

Таблица фильтров

Таблица фильтров является одной из наиболее широко используемых таблиц в + iptables +. Таблица + filter + используется для принятия решения о том, разрешить ли пакету продолжить свое предназначение или отклонить его запрос. На языке брандмауэра это называется «фильтрацией» пакетов. В этой таблице представлены основные функциональные возможности, о которых думают люди при обсуждении брандмауэров.

Таблица NAT

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

Стол Мангл

Таблица + mangle + используется для изменения IP-заголовков пакета различными способами. Например, вы можете настроить значение TTL (время жизни) пакета, увеличивая или уменьшая количество допустимых сетевых скачков, которые может выдержать пакет. Другие заголовки IP могут быть изменены аналогичным образом.

Эта таблица также может разместить внутреннюю «метку» ядра на пакете для дальнейшей обработки в других таблицах и другими сетевыми инструментами. Эта метка не касается реального пакета, но добавляет метку к представлению пакета в ядре.

Сырой Стол

Межсетевой экран + iptables + является состоящим из состояния, что означает, что пакеты оцениваются с точки зрения их отношения к предыдущим пакетам. Функции отслеживания соединений, построенные на основе инфраструктуры + netfilter, позволяют + iptables + просматривать пакеты как часть текущего соединения или сеанса, а не как поток дискретных, не связанных между собой пакетов. Логика отслеживания соединения обычно применяется очень скоро после того, как пакет достигнет сетевого интерфейса.

Таблица + raw + имеет очень узко определенную функцию. Его единственная цель - предоставить механизм для маркировки пакетов, чтобы отказаться от отслеживания соединения.

Таблица безопасности

Таблица + security + используется для установки внутренних меток контекста безопасности SELinux для пакетов, которые будут влиять на то, как SELinux или другие системы, которые могут интерпретировать контексты безопасности SELinux, обрабатывают пакеты. Эти метки могут быть применены для каждого пакета или каждого соединения.

Какие цепочки реализованы в каждой таблице?

Мы говорили о таблицах и цепочках отдельно. Давайте рассмотрим, какие цепочки есть в каждой таблице. В этом обсуждении подразумевается дальнейшее обсуждение порядка оценки цепочек, зарегистрированных для одного хука. Если три таблицы имеют цепочки + PREROUTING +, в каком порядке они оцениваются?

В следующей таблице указаны цепочки, которые доступны в каждой таблице + iptables + при чтении слева направо. Например, мы можем сказать, что таблица + raw + имеет цепочки + PREROUTING + и + OUTPUT +. При чтении сверху вниз, он также отображает порядок, в котором каждая цепочка вызывается, когда срабатывает связанный хук + netfilter +.

Несколько вещей следует отметить. В представленном ниже представлении таблица + nat + была разделена между операциями + DNAT + (теми, которые изменяют адрес назначения пакета) и операциями + SNAT + (теми, которые изменяют адрес источника), чтобы отобразить их порядок более четко. Мы также включили строки, которые представляют точки, где принимаются решения о маршрутизации и где отслеживание соединений включено, чтобы дать более целостное представление о происходящих процессах:

Tables↓/Chains→ PREROUTING INPUT FORWARD OUTPUT POSTROUTING

(routing decision)

raw

(connection tracking enabled)

mangle

nat (DNAT)

(routing decision)

filter

security

nat (SNAT)

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

Некоторые события могут привести к пропуску цепочки таблицы во время обработки. Например, только первый пакет в соединении будет оцениваться по правилам NAT. Любые решения + nat +, принятые для первого пакета, будут применяться ко всем последующим пакетам в соединении без дополнительной оценки. Ответы на соединения с NAT будут автоматически иметь обратные правила NAT, применяемые для правильной маршрутизации.

Порядок обхода цепи

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

  • * Входящие пакеты, предназначенные для локальной системы *: + PREROUTING →` + INPUT`

  • * Входящие пакеты, предназначенные для другого хоста *: + PREROUTING ++ FORWARD ++ POSTROUTING +

  • * Локально сгенерированные пакеты *: + OUTPUT ++ POSTROUTING +

Если мы объединим вышеуказанную информацию с порядком, изложенным в предыдущей таблице, мы увидим, что входящий пакет, предназначенный для локальной системы, сначала будет оцениваться по цепочкам + PREROUTING + цепочек + raw +, + mangle + и + nat + таблицы. Затем он будет проходить по цепочкам + INPUT + таблиц + mangle +, + filter +, + security + и + nat + перед окончательной доставкой в ​​локальный сокет.

Правила IPTables

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

согласование

Соответствующая часть правила определяет критерии, которым должен соответствовать пакет, чтобы выполнить соответствующее действие (или «цель»).

Система сопоставления очень гибкая и может быть значительно расширена с помощью расширений + iptables +, доступных в системе. Правила могут быть составлены так, чтобы они соответствовали типу протокола, адресу назначения или источнику, порту назначения или источнику, сети назначения или источника, интерфейсу ввода или вывода, заголовкам или состоянию соединения среди других критериев. Их можно комбинировать для создания довольно сложных наборов правил, чтобы различать различный трафик.

Цели

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

  • * Завершающие цели *: Завершающие цели выполняют действие, которое завершает оценку в цепочке и возвращает управление хуку + netfilter +. В зависимости от предоставленного возвращаемого значения ловушка может отбросить пакет или позволить пакету перейти к следующему этапу обработки.

  • * Не заканчивающиеся цели *: Не прекращающиеся цели выполняют действие и продолжают оценку в цепочке. Хотя каждая цепочка должна в конечном итоге вернуть окончательное завершающее решение, любое количество не заканчивающихся целей может быть выполнено заранее.

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

Переход к пользовательским цепочкам

Следует упомянуть специальный класс неконечной цели: цель прыжка. Цели перехода - это действия, в результате которых оценка перемещается в другую цепочку для дополнительной обработки. Мы довольно много говорили о встроенных цепочках, которые тесно связаны с хуками + netfilter + ', которые их вызывают. Однако `+ iptables + также позволяет администраторам создавать свои собственные цепочки для организационных целей.

Правила могут быть помещены в определенные пользователем цепочки так же, как они могут быть помещены во встроенные цепочки. Разница в том, что пользовательские цепочки могут быть достигнуты только путем «перехода» к ним из правила (они не регистрируются с помощью ловушки + netfilter +).

Пользовательские цепочки действуют как простые расширения цепочки, которая их назвала. Например, в пользовательской цепочке оценка будет возвращаться обратно в вызывающую цепочку, если достигнут конец списка правил или если цель + RETURN + активирована соответствующим правилом. Оценка также может перейти к дополнительным пользовательским цепочкам.

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

IPTables и отслеживание соединений

Мы представили систему отслеживания соединений, реализованную поверх фреймворка + netfilter +, когда обсуждали таблицу + raw + и критерии соответствия состояния соединения. Отслеживание соединения позволяет + iptables + принимать решения о пакетах, просматриваемых в контексте текущего соединения. Система отслеживания соединений предоставляет + iptables + функциональность, необходимую для выполнения операций с состоянием.

Отслеживание соединения применяется очень скоро после того, как пакеты входят в сетевой стек. Цепочки таблиц + raw + и некоторые базовые проверки работоспособности являются единственной логикой, которая выполняется над пакетами до их связывания с соединением.

Система проверяет каждый пакет на соответствие существующим соединениям. При необходимости он обновит состояние соединения в своем хранилище и при необходимости добавит новые соединения в систему. Пакеты, помеченные с целью + NOTRACK + в одной из цепочек + raw +, будут обходить процедуры отслеживания соединений.

Доступные состояния

Соединения, отслеживаемые системой отслеживания соединений, будут находиться в одном из следующих состояний:

  • + NEW +: Когда приходит пакет, который не связан с существующим соединением, но не является недействительным в качестве первого пакета, новое соединение будет добавлено в систему с этой меткой. Это происходит как для протоколов с поддержкой соединения, таких как TCP, так и для протоколов без установления соединения, таких как UDP.

  • + ESTABLISHED +: соединение изменяется с + NEW + на + ESTABLISHED +, когда оно получает действительный ответ в противоположном направлении. Для TCP-соединений это означает + SYN / ACK +, а для UDP и ICMP-трафика это означает ответ, в котором переключаются источник и назначение исходного пакета.

  • + RELATED +: Пакеты, которые не являются частью существующего соединения, но связаны с соединением, уже находящимся в системе, помечаются как + RELATED +. Это может означать вспомогательное соединение, как в случае с соединениями для передачи данных по FTP, или это могут быть ответы ICMP на попытки подключения по другим протоколам.

  • + INVALID +: пакеты могут быть помечены как + + INVALID + `, если они не связаны с существующим соединением и не подходят для открытия нового соединения, если они не могут быть идентифицированы или если они не маршрутизируются по другим причинам.

  • + UNTRACKED +: пакеты могут быть помечены как + UNTRACKED +, если они были нацелены в цепочку таблиц `+ raw + ', чтобы обойти отслеживание.

  • + SNAT +: виртуальное состояние, установленное, когда адрес источника был изменен операциями NAT. Это используется системой отслеживания соединений, так что она знает, как изменить исходные адреса обратно в ответных пакетах.

  • + DNAT +: виртуальное состояние, установленное, когда адрес назначения был изменен операциями NAT. Это используется системой отслеживания соединений, так что она знает, чтобы изменить адрес получателя обратно при маршрутизации ответных пакетов.

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

Заключение

Инфраструктура фильтрации пакетов + netfilter + и брандмауэр` + iptables + являются основой для большинства решений брандмауэра на серверах Linux. Хуки ядра `+ netfilter + достаточно близки к сетевому стеку, чтобы обеспечить мощный контроль над пакетами, когда они обрабатываются системой. Межсетевой экран «+ iptables +» использует эти возможности для предоставления гибкого, расширяемого метода передачи требований политики к ядру. Узнав, как эти части сочетаются друг с другом, вы можете лучше использовать их для контроля и защиты ваших серверных сред.

Если вы хотите узнать больше о том, как выбирать эффективные политики + iptables +, ознакомьтесь с https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-firewall-policy-to- безопасные ваши серверы [это руководство].

Эти руководства помогут вам начать реализацию правил брандмауэра + iptables +:

Related