Netfilter
netfilter — межсетевой экран (брандмауэр), встроен в ядро Linux с версии 2.4. Названиеiptables — название пользовательской утилиты (запускаемой из командной строки), предназначенной для управления системой netfilter. С её помощью администраторы создают и изменяют правила, управляющие фильтрацией и перенаправлением пакетов. Для работы с семейством протоколов IPv6 существует отдельная версия утилиты iptables — ip6tables. Некоторые авторы под словом netfilter имеют в виду только те элементы межсетевого экрана, которые непосредственно являются частью стека протоколов ядра, а всё прочее (систему таблиц и цепочек) называют iptables[1]. Из‑за не совсем ясной терминологии[2] иногда весь проект (внутриядерный межсетевой экран вместе с пользовательской утилитой) просто именуется netfilter/iptables. ИсторияПроект netfilter/iptables был основан в 1998. Автором является Расти Расселл (en:Rusty Russell); он же автор проекта‐предшественника ipchains. По мере развития проекта, в 1999 г. образовалась команда Netfilter Core Team (сокращено coreteam). Разработанный межсетевой экран получил официальное название netfilter. В марте 2000 г. был включен в ядро Linux 2.3. В августе 2003 руководителем coreteam стал Харальд Вельте (Harald Welte). В 2004 г. Вельте начал и выиграл судебный процесс против компании Sitecom GmbH, которая использовала netfilter в своей продукции, но отказывалась следовать лицензии GNU GPL[3]. До появления 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 по очереди проверяет, соответствует ли пакет всем критериям очередного правила, и если так, то выполняет действие (если критериев в правиле нет, то действие выполняется для всех пакетов, проходящих через правило). Вариантов возможных критериев очень много. Например, пакет соответствует критерию --source 192.168.1.1, если в заголовке пакета указано, что отправитель — 192.168.1.1. Самый простой тип перехода, iptables -A INPUT --source 192.168.1.1 --jump ACCEPT iptables -A INPUT --jump other_chain означают «добавить к концу цепочки INPUT следующие правила: пропустить пакеты из 192.168.1.1, а всё, что останется — отправить на анализ в цепочку other_chain». ЦепочкиСуществует 5 типов стандартных цепочек, встроенных в систему:
Также можно создавать и уничтожать собственные цепочки при помощи утилиты iptables.[4] ТаблицыЦепочки организованы в 4 таблицы:
Цепочки с одинаковым названием, но в разных таблицах — совершенно независимые объекты. Например, raw PREROUTING и mangle PREROUTING обычно содержат разный набор правил; пакеты сначала проходят через цепочку raw PREROUTING, а потом - через mangle PREROUTING. Механизм определения состоянийМеханизм определения состояний (state machine, connection tracking) — система трассировки соединений, важная часть netfilter, при помощи которой реализуется межсетевой экран на сеансовом уровне (stateful firewall). Система позволяет определить, к какому соединению или сеансу принадлежит пакет. Механизм определения состояний анализирует все пакеты, кроме тех, которые были помечены NOTRACK в таблице raw. В системе netfilter каждый пакет, проходящий через механизм определения состояний, может иметь одно из четырёх возможных состояний:
Эта классификация пакетов во многих случаях отличается от официального описания сетевых протоколов. Например, согласно 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 Утилита conntrack позволяет управлять механизмом определения состояний. См. такжеnftables — проект, который призван заменить существующую связку {ip,ip6,arp,eb}tables. Примечания
Ссылки
Администрирование netfilter
|