Interested Article - Netfilter

netfilter межсетевой экран (брандмауэр), встроен в ядро Linux с версии 2.4.

Название

iptables — название пользовательской утилиты (запускаемой из командной строки), предназначенной для управления системой netfilter. С её помощью администраторы создают и изменяют правила, управляющие фильтрацией и перенаправлением пакетов. Для работы с семейством протоколов IPv6 существует отдельная версия утилиты iptables — ip6tables .

Некоторые авторы под словом netfilter имеют в виду только те элементы межсетевого экрана, которые непосредственно являются частью стека протоколов ядра, а всё прочее (систему таблиц и цепочек) называют iptables . Из‑за не совсем ясной терминологии иногда весь проект (внутриядерный межсетевой экран вместе с пользовательской утилитой) просто именуется netfilter/iptables .

История

Flow of network packets through Netfilter

Проект netfilter/iptables был основан в 1998. Автором является ( ); он же автор проекта‐предшественника ipchains . По мере развития проекта, в 1999 г. образовалась команда (сокращено coreteam). Разработанный межсетевой экран получил официальное название netfilter. В марте 2000 г. был включен в ядро Linux 2.3. В августе 2003 руководителем coreteam стал Харальд Вельте (Harald Welte). В 2004 г. Вельте начал и выиграл судебный процесс против компании Sitecom GmbH, которая использовала netfilter в своей продукции, но отказывалась следовать лицензии GNU GPL .

До появления iptables для обеспечения возможностей межсетевого экрана в Linux использовались проекты ipchains в Linux 2.2 и ipfwadm в Linux 2.0, в свою очередь, основанный на ipfw из системы BSD . Проекты ipchains и ipfwadm изменяли работу стека протоколов ядра Linux, поскольку до появления netfilter в архитектуре ядра не существовало возможностей для подключения дополнительных модулей управления пакетами. iptables сохранил основную идею ipfwadm — список правил, состоящих из критериев и действия, которое выполняется, если пакет соответствует критериям. В ipchains была представлена новая концепция — возможность создавать новые цепочки правил и переход пакетов между цепочками, а в iptables концепция была расширена до четырёх таблиц, разграничивающих цепочки правил по задачам: фильтрация, NAT и модификация пакетов. Также iptables расширил возможности Linux в области определения состояний, позволяя создавать межсетевые экраны, работающие на сеансовом уровне.

Архитектура

Путь проверки пакета в системе netfilter

В системе netfilter пакеты пропускаются через цепочки . Цепочка является упорядоченным списком правил , а каждое правило может содержать критерии и действие или переход . Когда пакет проходит через цепочку, система netfilter по очереди проверяет, соответствует ли пакет всем критериям очередного правила, и если так, то выполняет действие (если критериев в правиле нет, то действие выполняется для всех пакетов, проходящих через правило). Вариантов возможных критериев очень много. Например, пакет соответствует критерию --source 192.168.1.1 , если в заголовке пакета указано, что отправитель — 192.168.1.1. Самый простой тип перехода, --jump , просто пересылает пакет в начало другой цепочки. Также при помощи --jump можно указать действие. Стандартные действия, доступные во всех цепочках — ACCEPT (пропустить), DROP (удалить), QUEUE (передать на анализ внешней программе), и RETURN (вернуть на анализ в предыдущую цепочку). Например, команды

iptables -A INPUT --source 192.168.1.1 --jump ACCEPT
iptables -A INPUT --jump other_chain

означают «добавить к концу цепочки INPUT следующие правила: пропустить пакеты из 192.168.1.1, а всё, что останется — отправить на анализ в цепочку other_chain ».

Цепочки

Существует 5 типов стандартных цепочек, встроенных в систему:

  • PREROUTING — для изначальной обработки входящих пакетов.
  • INPUT — для входящих пакетов, адресованных непосредственно локальному процессу ( клиенту или серверу ).
  • FORWARD — для входящих пакетов, перенаправленных на выход (заметьте, что перенаправляемые пакеты проходят сначала цепь PREROUTING , затем FORWARD и POSTROUTING ).
  • OUTPUT — для пакетов, генерируемых локальными процессами.
  • POSTROUTING — для окончательной обработки исходящих пакетов.

Также можно создавать и уничтожать собственные цепочки при помощи утилиты iptables.

Таблицы

Цепочки организованы в 4 таблицы:

  • raw — просматривается до передачи пакета системе определения состояний. Используется редко, например для маркировки пакетов, которые НЕ должны обрабатываться системой определения состояний. Для этого в правиле указывается действие NOTRACK . Содержит цепочки PREROUTING и OUTPUT .
  • mangle — содержит правила модификации (обычно заголовка) IP‐пакетов. Среди прочего, поддерживает действия TTL ( Time to live ) , TOS ( Type of Service ) , и MARK (для изменения полей TTL и TOS, и для изменения маркеров пакета). Редко необходима и может быть опасна. Содержится во всех пяти стандартных цепочках.
  • nat — просматривает только пакеты, создающие новое соединение (согласно системе определения состояний). Поддерживает действия DNAT , SNAT , MASQUERADE , REDIRECT . Содержит цепочки PREROUTING , OUTPUT , и POSTROUTING . Для версий ядра > 2.6.35 в таблицу nat также добавлена цепочка INPUT .
  • filter — основная таблица, используется по умолчанию, если название таблицы не указано. Содержит цепочки INPUT , FORWARD , и OUTPUT .

Цепочки с одинаковым названием, но в разных таблицах — совершенно независимые объекты. Например, raw PREROUTING и mangle PREROUTING обычно содержат разный набор правил; пакеты сначала проходят через цепочку raw PREROUTING , а потом - через mangle PREROUTING .

Механизм определения состояний

Механизм определения состояний (state machine, connection tracking) — система трассировки соединений, важная часть netfilter, при помощи которой реализуется межсетевой экран на сеансовом уровне (stateful firewall). Система позволяет определить, к какому соединению или сеансу принадлежит пакет. Механизм определения состояний анализирует все пакеты, кроме тех, которые были помечены NOTRACK в таблице raw .

В системе netfilter каждый пакет, проходящий через механизм определения состояний, может иметь одно из четырёх возможных состояний:

  • NEW — пакет открывает новый сеанс. Классический пример — пакет TCP с флагом SYN.
  • ESTABLISHED — пакет является частью уже существующего сеанса.
  • RELATED — пакет открывает новый сеанс, связанный с уже открытым сеансом. Например, во время сеанса пассивного FTP клиент подсоединяется к порту 21 сервера, сервер сообщает клиенту номер второго, случайно выбранного порта, после чего клиент подсоединяется ко второму порту для передачи файлов. В этом случае второй сеанс (передача файлов по второму порту) связан с уже существующим сеансом (изначальное подсоединение к порту 21).
  • INVALID — все прочие пакеты.

Эта классификация пакетов во многих случаях отличается от официального описания сетевых протоколов. Например, согласно netfilter, TCP пакет ACK, отвечающий на SYN — часть существующего сеанса, а по определению TCP такой пакет — всего лишь элемент открытия сеанса.

Определить сеансы некоторых протоколов очень просто; например, признак сеанса UDP — клиент с порта X посылает серверу на порт Y (или наоборот) пакеты не реже, чем раз в 30 секунд. У других протоколов ( FTP , SIP , H.323 и т. д.) сеанс определить сложнее, и netfilter должен анализировать содержимое пакетов, чтобы правильно определить их состояние.

Просмотреть атрибуты активных подключений можно в псевдофайле /proc/net/nf_conntrack (или /proc/net/ip_conntrack) . Для каждого подключения указывается информация следующего вида:

tcp      6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 dport=22
[UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 dport=32775 [ASSURED] use=2

Утилита позволяет управлять механизмом определения состояний.

См. также

nftables — проект, который призван заменить существующую связку {ip,ip6,arp,eb}tables.

Примечания

  1. Coulson, David (англ.) . www.linuxformat.co.uk (4 апреля 2001). Дата обращения: 14 июля 2007. Архивировано из 13 февраля 2007 года.
  2. Крис Касперски "Техника сетевых атак. Приёмы противодействия. Глава 'Что такое интернет' (Архитектура интернет. Дерево протоколов. Пакеты в Internet. Назначение портов.) "
  3. (нем.) . Мюнхенский суд (19 мая 2004). Архивировано из 24 февраля 2012 года.
  4. Денис Колисниченко. Серверное применение Linux. 3 издание. Глава "Настройка брандмауэра", стр. 372.
  5. . Дата обращения: 22 апреля 2014. 11 марта 2014 года.

Ссылки

Администрирование netfilter

  • All-purpose firewall generator
  • Визуальный редактор
  • A free graphical tool for managing Netfilter’s security policy (This software is no longer available directly from Solsoft)
  • Графический интерфейс ( GUI ) на основе KDE / Qt
  • C++ / Qt API
  • — инструмент, позволяющий компактно описывать межсетевые экраны
Источник —

Same as Netfilter