Netfilter
netfilter | |
Файл:Netfilter-logo.png | |
Тип | Межсетевой экран |
Разработчик | Netfilter Core Team |
ОС | на ядре Linux |
Лицензия | GNU GPL |
Сайт | www.netfilter.org |
Netfilter — межсетевой экран (брандмауэр), встроен в ядро Linux версий 2.4 и 2.6.
iptables — название пользовательской утилиты (запускаемой из командной строки) предназначенной для управления системой netfilter. С ее помощью администраторы создают и изменяют правила, управляющие фильтрацией и перенаправлением пакетов. Для работы с семейством протоколов IPv6 существует отдельная версия утилиты iptables — ip6tables.
Некоторые авторы под словом netfilter имеют в виду только те элементы межсетевого экрана, которые непосредственно являются частью стека протоколов ядра, а всё прочее (систему таблиц и цепочек) называют iptables.[1] Из‑за не совсем ясной терминологии, иногда весь проект (внутриядерный межсетевой экран вместе с пользовательской утилитой) просто именуется 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.[2]
До появления 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. Самый простой тип перехода, --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».
Существует пять типов стандартных цепочек, встроенных в систему:
- PREROUTING — для изначальной обработки входящих пакетов.
- INPUT — для входящих пакетов адресованных непосредственно локальному процессу (клиенту или серверу).
- FORWARD — для входящих пакетов перенаправленных на выход (заметьте, что перенаправляемые пакеты проходят сначала цепь PREROUTING, затем FORWARD и POSTROUTING).
- OUTPUT — для пакетов генерируемых локальными процессами.
- POSTROUTING — для окончательной обработки исходящих пакетов.
Также можно создавать и уничтожать собственные цепочки при помощи утилиты iptables.
Цепочки организованны в 4 таблицы:
- raw — просматривается до передачи пакета системе определения состояний. Используется редко, например для маркировки пакетов, которые НЕ должны обрабатываться системой определения состояний. Для этого в правиле указывается действие NOTRACK. Содержит цепочки PREROUTING и OUTPUT.
- mangle — содержит правила модификации (обычно заголовка) IP‐пакетов. Среди прочего, поддерживает действия TTL, TOS, и MARK (для изменения полей TTL и TOS, и для изменения маркеров пакета). Редко необходима и может быть опасна. Содержит все пять стандартных цепочек.
- nat — просматривает только пакеты, создающие новое соединение (согласно системе определения состояний). Поддерживает действия DNAT, SNAT, MASQUERADE, REDIRECT. Содержит цепочки PREROUTING, OUTPUT, и POSTROUTING.
- 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
Утилита conntrack позволяет управлять механизмом определения состояний.
Примечания
- ↑ Coulson, David Mastering IPTables (англ.). www.linuxformat.co.uk (4 апреля 2001).
- ↑ Urteil Harald Welte gegen Sitecom Deutschland GmbH (нем.). Мюнхенский суд (19 мая 2004).
Ссылки
В Википедии есть портал «Свободное программное обеспечение» |
- Сайт проекта
- Iptables Tutorial в русском переводе
- Статья о механизме определения состояний в netfilter
Администрирование netfilter
- NuFW an authenticating firewall using Netfilter
- Firewall Builder
- dwall All-purpose firewall generator
- Firestarter Визуальный редактор
- NetfilterOne A free graphical tool for managing Netfilter’s security policy (This software is no longer available directly from Solsoft)
- KMyFirewall Графический интерфейс (GUI) на основе KDE/Qt
- GIPT - C++/Qt API
ar:نت فيلتر de:Netfilter en:Netfilter es:Netfilter/iptables fr:Netfilter it:Netfilter lv:Netfilter/iptables no:Netfilter og iptables pl:Netfilter pt:Netfilter
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....