iptables: теория

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

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

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

(В выходные лектор на лориене выложит исходный текст книжки, и все ссылки нужно делать на нёё, чтобы локальные были)

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

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

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

(сюда бы картинку! Во вложениях к лекции пусто, ждём выкладки книжки?.. --PavelSutyrin)

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

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

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

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

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

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

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

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

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

Заметим, что можно встретить иное название этой же системы --- 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

41

1

1

1

1

PavelSutyrin, DmitryChistikov


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex