Сетевой фильтр
Первоначальный выпуск | 26 августа 1999 г | (Linux 2.3.15)
---|---|
Стабильная версия | 6.9.5 [1] / 16 июня 2024 г |
Написано в | С |
Операционная система | Линукс |
Тип |
|
Лицензия | GNU GPL |
Веб-сайт | сетевой фильтр |
Netfilter — это платформа , предоставляемая ядром Linux различные сетевые , которая позволяет реализовывать операции в форме настраиваемых обработчиков. Netfilter предлагает различные функции и операции для фильтрации пакетов , трансляции сетевых адресов и трансляции портов , которые обеспечивают функциональность, необходимую для направления пакетов через сеть и запрета пакетам достигать конфиденциальных мест в сети.
Netfilter представляет собой набор перехватчиков внутри ядра Linux, позволяющих определенным модулям ядра регистрировать функции обратного вызова в сетевом стеке ядра. Эти функции, обычно применяемые к трафику в форме правил фильтрации и модификации, вызываются для каждого пакета, который проходит соответствующий перехватчик в сетевом стеке. [2]
История [ править ]
Расти Рассел начал проект netfilter/iptables в 1998 году; он также был автором предшественника проекта, ipchains . По мере роста проекта в 1999 году он основал Netfilter Core Team (или просто coreteam ). Программное обеспечение, которое они производили (далее называемое netfilter ), использует лицензию GNU General Public License (GPL), и 26 августа 1999 года оно было объединено в версию 2.3. .15 основной ветки ядра Linux и, таким образом, входил в стабильную версию 2.4.0. [3]
В августе 2003 года Харальд Вельте стал председателем основной команды. В апреле 2004 года, после подавления проектом тех, кто распространял программное обеспечение проекта, встроенное в маршрутизаторы, без соблюдения GPL, немецкий суд вынес Welte исторический судебный запрет против Sitecom Germany, которая отказалась следовать условиям GPL (см. GPL- сопутствующие споры ). В сентябре 2007 года Патрик Макхарди, который в последние годы руководил разработкой, был избран новым председателем основной команды.
До появления iptables преобладающими программными пакетами для создания межсетевых экранов Linux были ipchains в ядре Linux 2.2.x и ipfwadm в ядре Linux 2.0.x. [3] в свою очередь, был основан на BSD ipfw который , . И ipchains, и ipfwadm изменяют сетевой код, чтобы они могли манипулировать пакетами, поскольку в ядре Linux не было общей структуры управления пакетами до появления Netfilter.
В то время как ipchains и ipfwadm сочетают в себе фильтрацию пакетов и NAT (в частности, три конкретных типа NAT , называемые маскарадингом , переадресацией портов и перенаправлением ), Netfilter разделяет операции с пакетами на несколько частей, описанных ниже. Каждый из них подключается к перехватчикам Netfilter в разных точках для доступа к пакетам. Подсистемы отслеживания соединений и NAT являются более общими и мощными, чем элементарные версии в ipchains и ipfwadm.
В 2017 году была добавлена инфраструктура разгрузки потоков IPv4 и IPv6 , что позволило ускорить программную пересылку таблицы потоков и поддержку аппаратной разгрузки. [4] [5]
Утилиты пользовательского пространства [ править ]
iptables [ править ]
Модули ядра с именем ip_tables
, ip6_tables
, arp_tables
(подчеркивание является частью имени) и ebtables
включают устаревшую часть фильтрации пакетов системы перехватчиков Netfilter. Они предоставляют табличную систему для определения правил брандмауэра, которые могут фильтровать или преобразовывать пакеты. Таблицы можно администрировать с помощью инструментов пользовательского пространства. iptables
, ip6tables
, arptables
, и ebtables
. Обратите внимание: хотя и модули ядра, и утилиты пользовательского пространства имеют схожие имена, каждый из них представляет собой отдельный объект с разными функциями.
Каждая таблица на самом деле представляет собой отдельный крючок, и каждая таблица была создана для определенной цели. Что касается Netfilter, он запускает определенную таблицу в определенном порядке относительно других таблиц. Любая таблица может вызывать сама себя, а также выполнять свои собственные правила, что открывает возможности для дополнительной обработки и итерации.
Правила организованы в цепочки или, другими словами, «цепочки правил». Эти цепочки имеют заранее определенные названия, включая INPUT
, OUTPUT
и FORWARD
. Эти заголовки цепочек помогают описать происхождение стека Netfilter. Прием пакетов, например, попадает в PREROUTING
, в то время как INPUT
представляет данные, доставляемые локально, а пересылаемый трафик попадает в FORWARD
цепь. Локально генерируемый вывод проходит через OUTPUT
цепочка, и пакеты для отправки находятся в POSTROUTING
цепь.
Модули Netfilter, не организованные в таблицы (см. ниже), способны проверять источник для выбора режима работы.
iptable_raw
модуль- При загрузке регистрирует перехватчик, который будет вызываться перед любым другим перехватчиком Netfilter. Он предоставляет таблицу под названием raw , которую можно использовать для фильтрации пакетов до того, как они достигнут более требовательных к памяти операций, таких как отслеживание соединений.
iptable_mangle
модуль- Регистрирует таблицу перехватчиков и манипуляций для запуска после отслеживания соединений (см. ниже) (но перед любой другой таблицей), чтобы можно было вносить изменения в пакет. Это позволяет вносить дополнительные изменения с помощью следующих правил, таких как NAT или дополнительная фильтрация.
iptable_nat
модуль- Регистрирует два перехватчика: преобразования на основе трансляции сетевых адресов («DNAT») применяются до перехвата фильтра, преобразования на основе трансляции сетевых адресов источника («SNAT») применяются после. Таблица трансляции сетевых адресов (или «nat»), доступная для iptables, представляет собой просто «базу данных конфигурации» только для сопоставлений NAT и не предназначена для какой-либо фильтрации.
iptable_filter
модуль- Регистрирует таблицу фильтров , используемую для фильтрации общего назначения (брандмауэра).
security_filter
модуль- Используется для сетевых правил обязательного контроля доступа (MAC), например тех, которые включены
SECMARK
иCONNSECMARK
цели. (Эти так называемые «цели» относятся к маркерам Linux с улучшенной безопасностью.) Обязательный контроль доступа реализуется модулями безопасности Linux, такими как SELinux. Таблица безопасности вызывается после вызова таблицы фильтров, что позволяет любым правилам дискретного управления доступом (DAC) в таблице фильтров вступить в силу раньше любых правил MAC. В этой таблице представлены следующие встроенные цепочки:INPUT
(для пакетов, поступающих на сам компьютер),OUTPUT
(для изменения локально сгенерированных пакетов перед маршрутизацией) иFORWARD
(для изменения пакетов, маршрутизируемых через компьютер).
nftables [ править ]
nftables — это новая часть Netfilter для фильтрации пакетов. nft
это новая утилита пользовательского пространства, которая заменяет iptables
, ip6tables
, arptables
и ebtables
.
Механизм ядра nftables добавляет в ядро Linux простую виртуальную машину , которая может выполнять байт-код для проверки сетевого пакета и принимать решения о том, как этот пакет следует обрабатывать. Операции, реализуемые этой виртуальной машиной, намеренно сделаны простыми: она может получать данные из самого пакета, просматривать связанные метаданные (например, входящий интерфейс) и управлять данными отслеживания соединений. Для принятия решений на основе этих данных можно использовать арифметические, побитовые операторы и операторы сравнения. Виртуальная машина также способна манипулировать наборами данных (обычно IP-адресами), позволяя заменять несколько операций сравнения одним поиском набора. [6]
Это контрастирует с устаревшим кодом Xtables (iptables и т. д.), в код которого настолько глубоко встроена информация о протоколах, что его пришлось реплицировать четыре раза — «для IPv4, IPv6, ARP и мостов Ethernet» — в качестве брандмауэра. Механизмы слишком специфичны для протокола, чтобы их можно было использовать в общем виде. [6] Основные преимущества перед iptables
Это упрощение ABI ядра Linux , уменьшение дублирования кода , улучшенное сообщение об ошибках , а также более эффективное выполнение, хранение и поэтапные атомарные изменения правил фильтрации.
Дефрагментация пакетов [ править ]
The nf_defrag_ipv4
модуль будет дефрагментировать пакеты IPv4 до того, как они достигнут системы отслеживания соединений Netfilter ( nf_conntrack_ipv4
модуль). Это необходимо для отслеживания соединений внутри ядра и вспомогательных модулей NAT (которые представляют собой разновидность «мини- ALG »), которые надежно работают только с целыми пакетами, а не обязательно с фрагментами.
Дефрагментатор IPv6 не является самостоятельным модулем, а интегрирован в nf_conntrack_ipv6
модуль.
Отслеживание соединения [ править ]
Одной из важных функций, созданных на основе платформы Netfilter, является отслеживание соединений. [7] Отслеживание соединений позволяет ядру отслеживать все логические сетевые соединения или сеансы и тем самым связывать все пакеты, которые могут составлять это соединение. NAT использует эту информацию для одинаковой трансляции всех связанных пакетов. iptables
может использовать эту информацию в качестве брандмауэра с отслеживанием состояния.
Однако состояние соединения полностью независимо от любого состояния верхнего уровня, такого как состояние TCP или SCTP. Частично это связано с тем, что при простой пересылке пакетов, т. е. без локальной доставки, механизм TCP может вообще не вызываться. Даже передачи в режиме без установления соединения, такие как UDP , IPsec (AH/ESP), GRE и другие протоколы туннелирования, имеют, по крайней мере, состояние псевдосоединения. Эвристика для таких протоколов часто основана на заранее установленном значении тайм-аута для неактивности, по истечении которого соединение с Netfilter разрывается.
Каждое соединение Netfilter уникально идентифицируется кортежем (протокол уровня 3, адрес источника, адрес назначения, протокол уровня 4, ключ уровня 4). Ключ уровня 4 зависит от транспортного протокола; для TCP/UDP это номера портов, для туннелей это может быть их идентификатор туннеля, но в противном случае это просто ноль, как если бы он не был частью кортежа. Чтобы иметь возможность проверять TCP-порт во всех случаях, пакеты будут обязательно дефрагментированы.
Подключениями Netfilter можно управлять с помощью инструмента пользовательского пространства. conntrack
.
iptables
может использовать проверку информации о соединении, такой как состояния, статусы и т. д., чтобы сделать правила фильтрации пакетов более мощными и простыми в управлении. Наиболее распространенными состояниями являются:
NEW
- пытаюсь создать новое соединение
ESTABLISHED
- часть уже существующего соединения
RELATED
- назначается пакету, который инициирует новое соединение и который был «ожидаемым»; вышеупомянутые мини-ALG создают такие ожидания, например, когда
nf_conntrack_ftp
модуль видит FTP "PASV
"команда INVALID
- пакет оказался недействительным , например, он не соответствовал состояний TCP. диаграмме
UNTRACKED
- специальное состояние, которое может быть назначено администратором для обхода отслеживания соединений для определенного пакета (см. необработанную таблицу выше).
Обычным примером может быть то, что первый пакет, который увидит подсистема conntrack, будет классифицирован как «новый», ответ будет классифицирован как «установленный», а ошибка ICMP будет «связанной». Пакет ошибок ICMP, который не соответствует ни одному известному соединению, будет «недействительным».
Помощники по отслеживанию соединений [ править ]
Благодаря использованию подключаемых модулей отслеживание соединений может получить информацию о протоколах прикладного уровня и, таким образом, понять, что два или более отдельных соединения «связаны». Например, рассмотрим протокол FTP . Устанавливается управляющее соединение, но при каждой передаче данных для их передачи устанавливается отдельное соединение. Когда nf_conntrack_ftp
модуль загружен, первый пакет FTP-соединения для передачи данных будет классифицирован как «связанный», а не «новый», поскольку он логически является частью существующего соединения.
Помощники проверяют только один пакет за раз, поэтому, если важная информация для отслеживания соединений разделена на два пакета из-за фрагментации IP или сегментации TCP, помощник не обязательно распознает шаблоны и, следовательно, не выполнит свою работу. Фрагментация IP решается подсистемой отслеживания соединений, требующей дефрагментации, хотя сегментация TCP не обрабатывается. В случае FTP считается, что сегментация не происходит «рядом» с такой командой, как PASV
со стандартными размерами сегментов, поэтому в Netfilter они также не рассматриваются.
Трансляция сетевых адресов [ править ]
Каждое соединение имеет набор исходных адресов и адресов ответа , которые изначально начинаются одинаково. NAT в Netfilter реализуется путем простого изменения адреса ответа и, при необходимости, порта. Когда пакеты получены, их кортеж соединения также будет сравниваться с парой адресов ответа (и портами). Отсутствие фрагментов также является требованием для NAT. (При необходимости пакеты IPv4 могут быть рефрагментированы обычным стеком IPv4, отличным от Netfilter.)
Помощники NAT [ править ]
Подобно помощникам по отслеживанию соединений, помощники NAT выполняют проверку пакетов и заменяют исходные адреса адресами ответа в полезных данных.
проекты Netfilter Дальнейшие
Хотя проект Netfilter не является модулями ядра, которые напрямую используют код Netfilter, он содержит еще несколько примечательных программ.
conntrack-tools [ править ]
conntrack-tools
представляет собой набор инструментов пользовательского пространства для Linux, которые позволяют системным администраторам взаимодействовать с записями и таблицами отслеживания подключений. В комплект входит conntrackd
демон и интерфейс командной строки conntrack
. Демон пользовательского пространства conntrackd
может использоваться для включения высокодоступных межсетевых экранов с отслеживанием состояния на основе кластера и сбора статистики использования брандмауэра с отслеживанием состояния. Интерфейс командной строки conntrack
обеспечивает более гибкий интерфейс к системе отслеживания соединений, чем устаревший /proc/net/nf_conntrack
.
ipset [ править ]
В отличие от других расширений, таких как отслеживание соединений, ipset
[8] больше связано с iptables
чем для основного кода Netfilter. ipset
например, не использует перехватчики Netfilter, но фактически предоставляет iptables
модуль для сопоставления и выполнения минимальных модификаций (установка/очистка) наборов IP.
Инструмент пользовательского пространства под названием ipset
используется для настройки, обслуживания и проверки так называемых «наборов IP» в ядре Linux. Набор IP-адресов обычно содержит набор IP-адресов , но может также содержать наборы других сетевых номеров, в зависимости от его «типа». Эти наборы гораздо более эффективны при поиске, чем голые. iptables
правил, но, конечно, может потребовать большего объема памяти. Различные алгоритмы хранения (для структур данных в памяти) представлены в ipset
чтобы пользователь мог выбрать оптимальное решение.
Любая запись в одном наборе может быть связана с другим набором, что позволяет выполнять сложные операции сопоставления. Набор можно удалить (уничтожить) только в том случае, если в нем нет iptables
правила или другие наборы, ссылающиеся на него.
SYN-прокси [ править ]
SYNPROXY
target делает возможной обработку больших SYN-флудов без больших потерь производительности, налагаемых в таких случаях отслеживанием соединений. Перенаправляя начальный SYN
запросы к SYNPROXY
цель, соединения не регистрируются в рамках отслеживания соединений, пока они не достигнут подтвержденного финала ACK
состояние, освобождая отслеживание соединений от учета большого количества потенциально недействительных соединений. Таким образом, огромный SYN
с наводнениями можно эффективно бороться. [9]
3 ноября 2013 г. SYN
Функциональность прокси была объединена с Netfilter с выпуском версии 3.12 основной ветки ядра Linux. [10] [11]
улоги [ править ]
ulogd
— это демон пользовательского пространства для получения и регистрации пакетов и уведомлений о событиях от подсистем Netfilter. ip_tables
может доставлять к нему пакеты через механизм организации очередей пользовательского пространства, а отслеживание соединений может взаимодействовать с ulogd
для обмена дополнительной информацией о пакетах или событиях (например, разрыве соединения, настройке NAT).
Библиотеки пользовательского пространства [ править ]
Netfilter также предоставляет набор библиотек, имеющих libnetfilter
в качестве префикса их имен, который можно использовать для выполнения различных задач в пользовательском пространстве. Эти библиотеки выпускаются под лицензией GNU GPL версии 2. В частности, это следующие библиотеки:
libnetfilter_queue
- позволяет выполнять постановку в очередь пакетов пользовательского пространства совместно с iptables; на основе
libnfnetlink
libnetfilter_conntrack
- позволяет манипулировать записями отслеживания соединений из пользовательского пространства; на основе
libnfnetlink
libnetfilter_log
- позволяет собирать сообщения журнала, созданные iptables; на основе
libnfnetlink
libnl-3-netfilter
- позволяет выполнять операции с очередями, отслеживанием соединений и журналами; часть
libnl
проект [12] libiptc
- позволяет вносить изменения в наборы правил брандмауэра iptables; оно не основано ни на чем
netlink
библиотека, и ее API используется внутри компанииiptables
коммунальные услуги libipset
- позволяет выполнять операции с наборами IP; на основе
libmnl
.
Семинары Netfilter [ править ]
Проект Netfilter организует ежегодное собрание разработчиков, на котором обсуждаются текущие исследования и разработки. Семинар Netfilter 2018 состоялся в Берлине, Германия, в июне 2018 года. [13]
См. также [ править ]
- Фильтр пакетов Беркли
- Geniatech против Макхарди (2018 г.) Иск
- IP Virtual Server (IPVS, часть LVS)
- ipchains , предшественник iptables
- ipfw
- Виртуальный сервер Linux (LVS)
- Netlink — API, используемый расширениями Netfilter.
- Сетевой планировщик , еще один низкоуровневый компонент сетевого стека.
- НПФ (брандмауэр)
- ПФ (брандмауэр)
- Несложный брандмауэр
Ссылки [ править ]
- ^ Грег Кроа-Хартман (16 июня 2024 г.). «Линукс 6.9.5» . Проверено 16 июня 2024 г.
- ^ «Домашняя страница проекта netfilter/iptables — проект netfilter.org» . netfilter.org . Проверено 4 июля 2014 г.
- ^ Jump up to: Перейти обратно: а б Харальд Вельте , археология сетевых фильтров: 18 лет от 2.3 до 4.x , 5 декабря 2017 г.
- ^ «Инфраструктура разгрузки потоков» . LWN.net .
- ^ «Инфраструктура разгрузки потоков» . LWN.net .
- ^ Jump up to: Перейти обратно: а б Джонатан Корбет (20 августа 2013 г.). «Возвращение nftables» . LWN.net . Проверено 22 октября 2013 г.
- ^ Нейра Аюсо, Пабло (14 июня 2006 г.). «Система отслеживания подключений Netfilter» (PDF) .
- ^ «IP-наборы» . ipset.netfilter.org . Проверено 4 июля 2014 г.
- ^ Патрик МакХарди (07 августа 2013 г.). «netfilter: реализовать SYN-прокси netfilter» . LWN.net . Проверено 5 ноября 2013 г.
- ^ «netfilter: добавить ядро/цель SYNPROXY» . ядро.org. 27 августа 2013 г. Проверено 5 ноября 2013 г.
- ^ «netfilter: добавить цель IPv6 SYNPROXY» . ядро.org. 27 августа 2013 г. Проверено 5 ноября 2013 г.
- ^ «Библиотека Netfilter (libnl-nf)» . infradead.org. 2 апреля 2013 г. Проверено 28 декабря 2013 г.
- ^ «14-й семинар по Netfilter» . Workshop.netfilter.org. 26 сентября 2018 г. Проверено 26 сентября 2018 г.
Внешние ссылки [ править ]
- Официальный сайт
- Домашняя страница conntrack-tools
- домашняя страница ipset
- домашняя страница улогда
- Главная страница веб-сайтов Netfilter Workshop
- « Написание модулей Netfilter » (электронная книга; 2009 г.)
- « Netfilter и Iptables — межсетевой экран с отслеживанием состояния для Linux » (11 октября 2001 г.)
- Обзор сети Рами Розена