большинстве случаев эти программы выполняются как пользовательские процессы, но они могут быть и процессами ядра. Примерами приложений, которые выполняются как процессы ядра, являются средства поддержки NFS, реализованные в ядре, и Web-сервер kHTTPd. Как информация, генерируемая локальными процессами, так и выходные данные цепочки FORWARD
предаются для обработки с помощью цепочки OUTPUT
.
Рис. 25.1. Для обработки информационных пакетов сетевое ядро Linux использует несколько цепочек
Информационный пакет не обязательно должен проходить весь цикл обработки, показанный на рис. 25.1. Некоторые пакеты могут быть блокированы одной из цепочек; не исключено также, что локальный процесс, получив пакет, не станет отвечать на него. В некоторых случаях транзакция инициируется локальным процессом. Ответ на запрос, сгенерированный локальным процессом, будет получен на входе системы.
Каждая из цепочек, показанных на рис. 25.1. предоставляет возможность обрабатывать пакеты. Фильтрация пакетов осуществляется на основании анализа таких данных, как IP-адрес источника и назначения, порт источника и назначения, а также интерфейс, через который передаются пакеты. Каждая из цепочек представляет собой набор правил, на соответствие которым проверяются пакеты. Если пакет соответствует условию правила, над ним выполняются действия, предусмотренные в правилах. При создании брандмауэров используются идентификаторы, определяющие действия. К ним относятся ACCEPT
(принять пакет для обработки), DROP
(игнорировать пакет), QUEUE
(передать пакет пользовательскому процессу) и RETURN
(прекратить обработку и вернуться к вызывающей цепочке). Некоторые действия требуют активизации опций ядра. К ним относятся REJECT
(отвергнуть пакет, сообщив об этом отправителю), MASQUERADE
(используется при организации NAT-преобразования) и LOG
(применяется для протоколирования хода фильтрации).
Цепочки объединяются в filter
, которая используется для обработки стандартных типов трафика. Стандартными таблицами также являются nat
(она используется при построении NAT- преобразователей) и mangle
(с ее помощью осуществляются некоторые типы преобразования пакетов). Вы можете поместить в таблицу новые цепочки и вызвать их из существующих цепочек. Это позволяет реализовать сложные процедуры фильтрации.
Таблицы и цепочки являются средствами ядра Linux, a iptables
— это программа, которая выполняется как пользовательский процесс и предоставляет возможность управлять таблицами и цепочками. Программу iptables
можно использовать для добавления правил к любой из цепочек, показанных на рис. 25.1, а также к другим цепочкам. Например, вы можете включить в цепочку INPUT
правила, блокирующие все пакеты, в заголовке которых указан определенный порт назначения, или добавить в цепочку OUTPUT
правила, запрещающие передавать пакеты системе, взаимодействие с которой по каким-либо причинам запрещено. С помощью этих и других цепочек вы можете реализовать брандмауэр, NAT-преобразователь или другое средство защиты системы.
Изменения, вносимые утилитой iptables
, носят временный характер; информация о них удаляется после перезагрузки компьютера. По этой причине для работы с iptables
следует создавать сценарии. В состав некоторых дистрибутивных пакетов, например Red Hat и Mandrake, включаются инструментальные средства, упрощающие создание брандмауэров и NAT-преобразователь. Сценарий, предназначенный для создания правил посредством утилиты iptables
, обычно запускается как сценарий SysV или локальный сценарий запуска.
Программа iptables
была создана для работы с ядром 2.4.x. С ранними версиями ядра использовались другие инструменты. Например, для взаимодействия с соответствующими средствами ядра 2.2.x применялась программа ipchains
, а для работы с ядром 2.0.x — программа ipfwadm
. Смена инструментов отражает изменения в структуре ядра. Программа iptables
дает возможность работать с такими средствами ядра 2.4.x, которые отсутствовали в ядре 2.2.x. Например, она позволяет выполнять
При работе с версиями ядра, предшествующими версии 2.4.x, вам придется использовать ipchains
или ipfwadm
. В данной главе не уделяется внимание работе с этими программами, поэтому всю необходимую информацию вам придется искать в документации на соответствующий инструмент. Для работы со средствами фильтрации пакетов, которые будут реализованы в последующих версиях ядра, наверное, будут разработаны новые инструментальные средства. Вероятнее всего, что общие принципы их работы будут такими же, какие используются в iptables
, поэтому знание этой программы пригодится при работе с версиями ядра, которые придут на смену версии 2.4.x.
Если вы хотите продолжать работу с инструментами ipfwadm
и ipchains
, вы можете использовать их и для взаимодействия с ядром 2.4.x, но для этого надо настроить соответствующим образом ядро системы. Программы ipfwadm
и ipchains
позволяют решать те же задачи, которые решаются при работе с версиями 2.0.x и 2.2.x, но вы не сможете воспользоваться новыми возможностями, предоставляемыми ядром 2.4.x.
Некоторые из правил фильтрации пакетов, реализуемые посредством iptables
, дублируют соответствующие возможности TCP Wrappers, xinetd
и средств контроля доступа к отдельным серверам. Все эти инструменты позволяют ограничить возможность взаимодействия с серверами на основе анализа IP-адресов. Если одно и то же ограничение может быть реализовано несколькими инструментами, я рекомендую не ограничиваться использованием одного из них. При одновременном применении нескольких средств последствия ошибки в конфигурации или в коде одной из программ будут устранены другими программами. По сравнению с прочими инструментами подобного назначения iptables
реализует средства более низкого уровня, поэтому ограничения, накладываемые с помощью этой программы, охватывают большее число протоколов и серверов. Например, если xinetd
защищает только серверы, запускаемые с его помощью, то iptables
позволяет ограничить доступ ко всем серверам.
Конфигурация ядра для работы с iptables
Для того чтобы использовать iptables, необходимо активизировать соответствующие средства ядра. В версии ядра 2.4 все необходимые для этого опции сосредоточены в меню Networking Options и некоторых его подменю. Опции, которые необходимо активизировать, перечислены ниже.
• Network Packet Filtering. Данная опция расположена в меню Networking Options.
• Connection Tracking. Эта опция находится в подменю Netfilter Configuration меню Networking Options. Данная опция используется при создании NAT-преобразователей. (Все последующие опции также расположены в подменю Netfilter Configuration.)