Jump to content

Сетевой фильтр

Сетевой фильтр
Первоначальный выпуск 26 августа 1999 г .; 24 года назад ( 26 августа 1999 ) (Linux 2.3.15)
Стабильная версия
6.9.5 [1]  Отредактируйте это в Викиданных / 16 июня 2024 г .; 0 дней назад ( 16 июня 2024 г. )
Написано в С
Операционная система Линукс
Тип
Лицензия GNU GPL
Веб-сайт сетевой фильтр .org

Netfilter — это платформа , предоставляемая ядром Linux различные сетевые , которая позволяет реализовывать операции в форме настраиваемых обработчиков. Netfilter предлагает различные функции и операции для фильтрации пакетов , трансляции сетевых адресов и трансляции портов , которые обеспечивают функциональность, необходимую для направления пакетов через сеть и запрета пакетам достигать конфиденциальных мест в сети.

Netfilter представляет собой набор перехватчиков внутри ядра Linux, позволяющих определенным модулям ядра регистрировать функции обратного вызова в сетевом стеке ядра. Эти функции, обычно применяемые к трафику в форме правил фильтрации и модификации, вызываются для каждого пакета, который проходит соответствующий перехватчик в сетевом стеке. [2]

История [ править ]

Связь (некоторых) различных компонентов Netfilter

Расти Рассел начал проект 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]

Утилиты пользовательского пространства [ править ]

Поток сетевых пакетов через Netfilter с устаревшей фильтрацией пакетов iptables

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]

См. также [ править ]

Ссылки [ править ]

  1. ^ Грег Кроа-Хартман (16 июня 2024 г.). «Линукс 6.9.5» . Проверено 16 июня 2024 г.
  2. ^ «Домашняя страница проекта netfilter/iptables — проект netfilter.org» . netfilter.org . Проверено 4 июля 2014 г.
  3. ^ Jump up to: Перейти обратно: а б Харальд Вельте , археология сетевых фильтров: 18 лет от 2.3 до 4.x , 5 декабря 2017 г.
  4. ^ «Инфраструктура разгрузки потоков» . LWN.net .
  5. ^ «Инфраструктура разгрузки потоков» . LWN.net .
  6. ^ Jump up to: Перейти обратно: а б Джонатан Корбет (20 августа 2013 г.). «Возвращение nftables» . LWN.net . Проверено 22 октября 2013 г.
  7. ^ Нейра Аюсо, Пабло (14 июня 2006 г.). «Система отслеживания подключений Netfilter» (PDF) .
  8. ^ «IP-наборы» . ipset.netfilter.org . Проверено 4 июля 2014 г.
  9. ^ Патрик МакХарди (07 августа 2013 г.). «netfilter: реализовать SYN-прокси netfilter» . LWN.net . Проверено 5 ноября 2013 г.
  10. ^ «netfilter: добавить ядро/цель SYNPROXY» . ядро.org. 27 августа 2013 г. Проверено 5 ноября 2013 г.
  11. ^ «netfilter: добавить цель IPv6 SYNPROXY» . ядро.org. 27 августа 2013 г. Проверено 5 ноября 2013 г.
  12. ^ «Библиотека Netfilter (libnl-nf)» . infradead.org. 2 апреля 2013 г. Проверено 28 декабря 2013 г.
  13. ^ «14-й семинар по Netfilter» . Workshop.netfilter.org. 26 сентября 2018 г. Проверено 26 сентября 2018 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 715d8be7fb02f2e7a5f90910e79bc6f4__1710657240
URL1:https://arc.ask3.ru/arc/aa/71/f4/715d8be7fb02f2e7a5f90910e79bc6f4.html
Заголовок, (Title) документа по адресу, URL1:
Netfilter - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)