В почтовой рассылке NetBSD был представлен новый межсетевой экран для этой операционной системы — NPF. Заявляется, что он ориентирован на высокую производительность на многопроцессорных системах и простую расширяемость.
NPF создан литовцем Миндаугасом Расиукевичиусом (Mindaugas Rasiukevicius), а его разработку спонсирует организация NetBSD Foundation. Он стал третьим межсетевым экраном (packet filter) для NetBSD после IP Filter и PF. Одна из его уникальных характеристик — использование интерпретатора байт-кода в движке разбора пакетов.
Среди основных черт NPF выделяют:
производительность на многопроцессорных системах;
быстрый поиск по хэш-таблице и красно-черному дерева;
поддержка NAPT (Network Address Port Translation) и ALG (Application-Level Gateways), например, для traceroute;
обработчик N-Code — движок обработки пакетов, созданный под вдохновением от BPF (Berkeley Packet Filter): его можно программировать на отбор пакетов с использованием общих инструкций в стиле RISC и некоторых инструкций, подобных CISC, для таких распространенных шаблонов, как IPv4-адрес;
привычный синтаксис конфигурации и инструментов;
модульность и расширяемость: расширять NPF можно путем загрузки модуля к ядру, разработчикам предоставлен специальный API для расширений, в правилах
NPF предусмотрены хуки для вызова расширений.
Ожидается, что к концу января 2011 года NPF оснастят всеми возможностями, предоставляемыми другими межсетевыми экранами для NetBSD, а также документацией и примерами конфигурации. Единственное, чего будет не хватать, — поддержки IPv6. Разработчик ищет помощников и готов предоставить им техническую поддержку по реализации IPv6 в NPF.
В рамках проекта 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.