Iptables

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
iptables
Логотип программы iptables
Скриншот программы iptables
Тип Межсетевой экран
Автор Расти Рассел[вд]
Разработчик Netfilter Core Team
Написана на C
Операционная система на ядре Linux
Первый выпуск 1998
Аппаратные платформы ядро Linux и Linux-libre
Последняя версия
Репозиторий git.netfilter.org/iptabl…
git.netfilter.org/iptabl…
git.netfilter.org/iptabl…
Лицензия GNU GPL
Сайт netfilter.org
Логотип Викисклада Медиафайлы на Викискладе

iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux, начиная с версии 2.4. Для использования утилиты iptables требуются привилегии суперпользователя (root).

Изначально разработка netfilter и iptables шла совместно, поэтому в ранней истории этих проектов есть много общего. Подробности см. в статье про netfilter.

Предшественниками iptables были проекты ipchains (применялась для администрирования фаервола ядра Linux версии 2.2) и ipfwadm (аналогично для ядер Linux версий 2.0). Последний был основан на BSD-утилите ipfw.

iptables сохраняет идеологию, ведущую начало от ipfwadm: функционирование фаервола определяется набором правил, каждое из которых состоит из условия и действия (например DROP или ACCEPT), применяемого к пакетам, подпадающим под это условие. В ipchains появилась концепция цепочек — независимых списков правил. Были введены отдельные цепочки для фильтрации входящих (INPUT), исходящих (OUTPUT) и транзитных (FORWARD) пакетов. В продолжении этой идеи, в iptables появились таблицы — независимые группы цепочек. Каждая таблица решала свою задачу — цепочки таблицы filter отвечали за фильтрацию, цепочки таблицы nat — за преобразование сетевых адресов (NAT), к задачам таблицы mangle относились прочие модификации заголовков пакетов (например, изменение TTL или TOS). Кроме того, была слегка изменена логика работы цепочек: в ipchains все входящие пакеты, включая транзитные, проходили цепочку INPUT. В iptables через INPUT проходят только пакеты, адресованные самому хосту.

Такое разделение функциональности позволило iptables при обработке отдельных пакетов использовать информацию о соединениях в целом (ранее это было возможно только для NAT). В этом iptables значительно превосходит ipchains, так iptables может отслеживать состояние соединения и перенаправлять, изменять или отфильтровывать пакеты, основываясь не только на данных из их заголовков (источник, получатель) или содержимом пакетов, но и на основании данных о соединении. Такая возможность фаервола называется stateful-фильтрацией, в отличие от реализованной в ipchains примитивной stateless-фильтрации (подробнее о видах фильтрации см. статью о фаерволах). Можно сказать, что iptables анализирует не только передаваемые данные, но и контекст их передачи, в отличие от ipchains, и поэтому может принимать более обоснованные решения о судьбе каждого конкретного пакета. Более подробно о stateful-фильтрации в netfilter/iptables см. Netfilter#Механизм определения состояний.

В будущем, разработчики netfilter планируют заменить iptables на nftables — инструмент нового поколения[2].

Архитектура

[править | править код]

Основные понятия

[править | править код]
Схема прохождения таблиц

Ключевыми понятиями iptables являются:

  • Правило — состоит из условия, действия и счетчика. Если пакет соответствует условию, к нему применяется действие, и он учитывается счетчиком. Условия может и не быть — тогда неявно предполагается условие «все пакеты». Указывать действие тоже не обязательно — в отсутствие действия правило будет работать только как счетчик.
    • Условие — логическое выражение, анализирующее свойства пакета и/или соединения и определяющее, попадает ли данный конкретный пакет под действие условия текущего правила.
    • Действие — описание действия, которое нужно проделать с пакетом (и/или соединением), если пакет (и/или соединение) попадает под условие этого правила. О действиях более подробно будет рассказано ниже.
    • Счетчик — компонент правила, обеспечивающий учёт количества пакетов, которые попали под условие данного правила. Также счетчик учитывает суммарный объём таких пакетов в байтах.
  • Цепочка — упорядоченная последовательность правил. Цепочки можно разделить на пользовательские и базовые.
    • Базовая цепочка — цепочка, создаваемая по умолчанию при инициализации таблицы. Каждый пакет, в зависимости от того, предназначен ли он самому хосту, сгенерирован им или является транзитным, должен пройти положенный ему набор базовых цепочек различных таблиц. Кроме того, базовая цепочка отличается от пользовательской наличием «действия по умолчанию» (default policy). Это действие применяется к тем пакетам, которые не были обработаны другими правилами этой цепочки и вызванных из неё цепочек. Имена базовых цепочек всегда записываются в верхнем регистре (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).
    • Пользовательская цепочка — цепочка, созданная пользователем. Может использоваться только в пределах своей таблицы. Рекомендуется не использовать для таких цепочек имена в верхнем регистре, чтобы избежать путаницы с базовыми цепочками и встроенными действиями.
  • Таблица — совокупность базовых и пользовательских цепочек, объединённых общим функциональным назначением. Имена таблиц (как и модулей условий) записываются в нижнем регистре, так как в принципе не могут конфликтовать с именами пользовательских цепочек. При вызове команды iptables таблица указывается в формате -t имя_таблицы. При отсутствии явного указания, используется таблица filter.

Примечания

[править | править код]
  1. [ANNOUNCE iptables 1.8.11 release] — 2024.
  2. Разработчики Netfilter представили замену iptables. Дата обращения: 16 июля 2009. Архивировано 23 марта 2009 года.

Литература

[править | править код]
  • Gregor N. Purdy. Linux iptables. Pocket Reference. — O’Reilly, 2004. — С. 97. — ISBN 0-596-00569-5.