В рамках проекта NetBSD разработан новый пакетный фильтр NPF, вобравший в себя лучшие черты ранее присутствующих в NetBSD систем PF и IP Filter. Главными критериями при разработке NPF выступали: обеспечение высокой производительности на многопроцессорных системах и легкость разработки дополнений, расширяющих базовую функциональность. Отличительной и уникальной чертой нового пакетного фильтра является использование интерпретатора байткода в движке инспектирования пакетов.

Основные возможности NPF:

  • Изначальная поддержка обработки пакетов в многопоточном режиме и минимизация блокировок в коде. NPF отлично масштабируется на многопроцессорных системах, в отличие от PF, в котором используется однопоточный режим работы.
  • Использование эффективных хэш-таблиц и красно-черных деревьев для ускорения выборки элементов;
  • Поддержка фильтрации с учетом состояния TCP-соединений;
  • Поддержка нескольких режимов трансляции адресов, включая NAPT (несколько внутренних адресов могут быть привязаны к одному реальному IP с разделением по номеру порта) и ALG (Application-Level Gateway, учет особенностей прикладных протоколов при организации трансляции адресов, например, позволяет работать через NAT ftp, p2p, h.323, sip и т.п.);
  • Привычный, для пользователей PF и IP Filter, синтаксис файла конфигурации и типовой набор утилит;
  • Модульность и расширяемость: функции NPF могут расширяться через загрузку дополнительных модулей. Для создания модулей и расширений подготовлен специальный API. В заданных пользователем правилах фильтрации могут быть встроены обращения к внешним модулям;
  • Движок инспектирования пакетов "N-Code processor", основанный на идеях, реализованных в интерфейсе BPF (Berkeley Packet Filter): попадание пакетов под правила обеспечивается через формирование набора RISC-подобных инструкций и CISC-подобных команд для выполнения типовых операций (например, проверка IPv4-адреса).

Разработку планируется довести до полнофункционального состояния к концу января 2011 года. Ожидается, что в это время NPF сможет обеспечить работу всех функций, свойственных другим пакетным фильтрам:

  • поддержка пересборки IPv4-пакетов;
  • двунаправленный NAT и форвардинг портов;
  • режим FTP-прокси;
  • возможность очистки флаговых полей в заголовках IP-пакетов;
  • выборочное блокирования ICMP и TCP RST пакетов;
  • сохранение и восстановление состояния;
  • ведение лога пакетов, настраиваемого через систему фильтров.

В настоящее время NPF испытывает трудности с реализацией поддержки IPv6, разработчики NetBSD приглашают присоединиться к проекту энтузиастов, заинтересованных в интеграции поддержки IPv6.

Источник: http://www.opennet.ru/opennews/art.shtml?num=27955