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 размещаются правила, которые занимаются собственно фильтрацией пакетов. Здесь принимаются решения о выбрасывании пакета, о перекладывании его в другую цепочку. Можно создавать и свои собственные цепочки, состоящие по умолчанию из пустых таблиц.

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

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

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

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

Заметим, что можно встретить иное название этой же системы --- netfilter. Так по традиции называется соответствующая часть ядра. Можно считать также, что это оригинальное название первого поколения сетевого фильтра. После 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

20

1

1

1

1

PavelSutyrin, DmitryChistikov


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex