Введение

Фреймворк для изменения пакетов в Linux и зонтичный проект для соответствующего программного обеспечения.

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

История

Расти Расселл начал проект netfilter/iptables в 1998 году; он также был автором предшественника проекта, ipchains. По мере роста проекта он основал в 1999 году основную команду Netfilter (или просто coreteam). Программное обеспечение, которое они создали (далее именуемое netfilter), использует лицензию GNU General Public License (GPL), и 26 августа 1999 года оно было включено в версию 2.3.15 основной ветки разработки ядра Linux и, таким образом, вошло в стабильную версию 2.4.0. В августе 2003 года Харальд Велте стал председателем coreteam. В апреле 2004 года, после пресечения проектом распространения его программного обеспечения, встроенного в маршрутизаторы, без соблюдения условий GPL, немецкий суд вынес историческое судебное предписание против Sitecom Germany, отказавшейся выполнять требования GPL (см. споры, связанные с GPL). В сентябре 2007 года Патрик МакХарди, руководивший разработкой в течение предыдущих лет, был избран новым председателем coreteam. До iptables, основными программными пакетами для создания межсетевых экранов Linux были ipchains в ядре Linux 2.2.x и ipfwadm в ядре Linux 2.0.x.

Помощники для отслеживания соединения

С помощью модулей плагинов отслеживание соединений может получать информацию о протоколах прикладного уровня и, таким образом, понимать, что два или более отдельных соединения "связаны" между собой. Например, рассмотрим протокол 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 – это набор инструментов пользовательского пространства для Linux, позволяющий системным администраторам взаимодействовать с записями и таблицами отслеживания соединений. Пакет включает в себя демон conntrackd и интерфейс командной строки conntrack. Пользовательский демон conntrackd может использоваться для обеспечения высокой доступности кластерных состоятельных межсетевых экранов и сбора статистики об использовании состоятельных межсетевых экранов. Интерфейс командной строки conntrack предоставляет более гибкий доступ к системе отслеживания соединений, чем устаревший /proc/net/nf conntrack.

Ипсет

В отличие от других расширений, таких как Connection Tracking, ipset теснее связан с iptables, чем с основным кодом Netfilter. ipset, например, не использует хуки Netfilter, а предоставляет модуль для iptables, позволяющий выполнять сопоставление и минимальные изменения (установку/очистку) в IP-наборах. Утилита ipset, работающая в пользовательском пространстве, используется для создания, поддержки и проверки так называемых "IP-наборов" в ядре Linux. IP-набор обычно содержит набор IP-адресов, но также может содержать наборы других сетевых чисел, в зависимости от его "типа". Эти наборы обеспечивают гораздо более эффективный поиск, чем отдельные правила iptables, но, разумеется, могут занимать больше памяти. В ipset предусмотрены различные алгоритмы хранения (для структур данных в памяти), позволяющие пользователю выбрать оптимальное решение. Любой элемент одного набора может быть связан с другим набором, что позволяет выполнять сложные операции сопоставления. Набор можно удалить (уничтожить) только если на него не ссылаются никакие правила iptables или другие наборы.

Прокси SYN

SYNPROXY target позволяет обрабатывать большие SYN-флуды без значительных потерь производительности, возникающих при отслеживании соединений в подобных ситуациях. Перенаправляя первоначальные SYN-запросы на target SYNPROXY, соединения не регистрируются в системе отслеживания соединений до тех пор, пока не будет достигнуто подтвержденное конечное состояние ACK, что освобождает систему отслеживания соединений от учета большого количества потенциально недействительных соединений. Таким образом, масштабные SYN-флуды могут быть эффективно обработаны. 3 ноября 2013 года функциональность SYN proxy была включена в состав Netfilter с выпуском версии 3.12 основной ветки ядра Linux.

Ульогод

ulogd — это демон пользовательского пространства, предназначенный для приема и регистрации пакетов и уведомлений о событиях из подсистем Netfilter. ip-таблицы могут передавать пакеты через механизм постановки в очередь в пользовательском пространстве, а модуль отслеживания соединений может взаимодействовать с ulogd для обмена дополнительной информацией о пакетах или событиях (например, о завершении соединения или настройке NAT).

Сетевые фильтры

Проект Netfilter ежегодно проводит встречу для разработчиков, на которой обсуждаются текущие исследования и разработки. Воркшоп Netfilter 2018 года прошел в Берлине, Германия, в июне 2018 года.