iptables: теория

Прежде всего дадим ссылку на документацию: iptables tutorial Оскара Андреассона в переводе Андрея Киселева. Это очень хорошее руководство, начинающее с азов и понемногу подводящее читателя к сложным и интересным темам (с подробным описанием идущих в системе процессов).

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

Заметим, что с денежными расчетами ситуация особая. Одно дело --- показатели работы сетевых интерфейсов, и совсем другое --- алгоритм, по которому мы можем выписывать счета. Именно это --- право манипулировать денежными документами --- и называется биллинг (англ. billing --- выписывание счёта). Для получения этого права нужна государственная сертификация соответствующего программного обеспечения. Заметим, что сам рассматриваемый нами инструмент --- iptables --- такой сертификации не имеет (это привилегия больших программных систем, например UTM).

iptables позволяет производить многие из необходимых для решения указанных задач действий (большей частью --- на уровне IP). Сетевой пакет может обрабатываться нашей системой в трех возможных ситуациях:

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

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

Books/LinuxIntro/15ChapterService/IPTables.dia.png

Большие блоки PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING называются цепочками. Заметим, что все возможные пути проходят хотя бы через одно принятие решения о маршрутизации, причем порядок действий для исходящих и входящих пакетов в этом смысле несимметричен.

Обработка пакетов, проходящих через iptables, происходит с помощью правил. Правила объединены в таблицы, а таблицы --- в цепочки. Можно считать, что цепочки --- это именно цепочки таблиц, которые друг другу передают пакеты. Таблицы могут иметь одно из четырёх названий: mangle, nat, filter, raw.

Таблица mangle предназначена для преобразований в заголовках пакетов. Здесь можно изменять QoS, ToS, TTL и другие служебные параметры.

В таблице nat происходит преобразование IP-адресов --- network address translation (NAT). Это, вообще говоря, тоже является изменением заголовков, но поскольку оно затрагивает адреса отправителя и получателя (а следовательно, непосредственно влияет на решение о маршрутизации), то вынесено в отдельную таблицу.

В таблице filter размещаются правила, которые занимаются собственно фильтрацией пакетов. Здесь принимаются решения о выбрасывании пакета, о перекладывании его в другую цепочку. Можно создавать и свои собственные цепочки, состоящие по умолчанию из пустых таблиц.

Таблица raw существует для обработки пакетов без отслеживания IP-соединения, по которому они проходят. Позволяет, соответственно, обрабатывать произвольные "сырые" (англ. raw --- сырой, необработанный) пакеты. Ввиду узкоспецифичности использования по умолчанию пуста.

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

Результаты анализа привели к следующим решениям. Во-первых, было выделено пять основных блоков, в которых происходит обработка пакетов. Во-вторых, произведено разделение на четыре основные задачи --- служебная модификация пакетов, содержательная модификация (подмена IP-адресов), фильтрация и предмодификационная обработка. Эти задачи соответствуют таблицам iptables, а блоки обработки --- основным цепочкам.

Итак, устройство iptables можно представить в виде ориентированного графа с пятью вершинами (это цепочки). Каждая вершина, в свою очередь, представляет собой другой ориентированный граф, в котором обыкновенно от двух до четырёх вершин (таблицы). Каждая таблица --- упорядоченный набор (список) правил вида "если для пакета выполняется такое-то условие, сделать то-то" (по сути дела, это просто пары "условие --- действие"). Перемещение пакета по графу осуществляется следующим образом: последовательно проверяются все условия, причем как только одно из них оказывается выполненым, соответствующее действие немедленно применяется. Если при этом пакет продолжает свое путешествие (он не был выброшен или, наоборот, принят в данной таблице) то будут проверяться следующие условия и так далее. При выходе из таблицы пакет переходит в следующую таблицу, а при выходе из всех таблиц цепочки --- в следующую цепочку. Принятие пакета в одной из таблиц также означает переход к следующей таблице (цепочке).

К сожалению, пользовательская документация к iptables составлена на основе внутреннего устройства этого программного продукта. Поэтому в ней (и в большинстве документации к iptables вообще, в том числе и в iptables tutorial) принято другое соглашение о логической структуре: цепочки объединяются в таблицы (таблица --- это группа цепочек одного типа, расположенных в разных местах). Понятно, что такая договоренность влияет лишь на способ представления, но не на принципы функционирования сетевого фильтра. Заметим, однако, что команд типа "показать по порядку все правила всех типов для исходящих пакетов" в стандартной поставке нет.

Необходимо сказать, что можно встретить и иное название для системы iptables --- netfilter. Это --- оригинальное название сетевого фильтра первого поколения в ядре Linux. После netfilter использовалась система ipchains, которую называют сетевым фильтром второго поколения (iptables представляет третье). В последнее время название iptables более распространено и почти всегда означает не просто утилиту управления, а все части этого сетевого фильтра как единую систему.

Посмотрим теперь, какие правила действуют сейчас в нашей системе:

[root@demo net]# iptables-save
# Generated by iptables-save v1.3.7 on Tue Jul  8 18:13:06 2008
*mangle
:PREROUTING ACCEPT [428:365625]
:INPUT ACCEPT [394:361829]
:FORWARD ACCEPT [7:296]
:OUTPUT ACCEPT [278:27722]
:POSTROUTING ACCEPT [361:43691]
COMMIT
# Completed on Tue Jul  8 18:13:06 2008
# Generated by iptables-save v1.3.7 on Tue Jul  8 18:13:06 2008
*nat
:PREROUTING ACCEPT [36:4238]
:POSTROUTING ACCEPT [30:2757]
:OUTPUT ACCEPT [29:2705]
COMMIT
# Completed on Tue Jul  8 18:13:06 2008
# Generated by iptables-save v1.3.7 on Tue Jul  8 18:13:06 2008
*filter
:INPUT ACCEPT [65:29557]
:FORWARD ACCEPT [7:296]
:OUTPUT ACCEPT [69:10645]
:stdin - [0:0]
COMMIT
# Completed on Tue Jul  8 18:13:06 2008

Как видно, в настоящее время заданных пользователем (администратором) правил нет.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

90

1

1

1

1

PavelSutyrin, DmitryChistikov, MaximByshevskiKonopko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080708/01IptablesTheory (последним исправлял пользователь MaximByshevskiKonopko 2008-10-09 21:31:29)