Автор (ы) исходного текста | Миндаугас Расюкявичюс |
---|---|
Первоначальный выпуск | 17 октября 2012 г.; 7 лет назад (17.10.2012) |
Репозиторий | |
Написано в | C |
Операционной системе | NetBSD |
Введите | фильтр пакетов, Межсетевой экран |
Лицензия | Лицензия BSD |
Веб-сайт | www.netbsd.org / ~ rmind / npf / |
NPF - это лицензированный BSD пакетный фильтр с отслеживанием состояния , центральная часть программного обеспечения для межсетевого экрана. Это сопоставимо с iptables, ipfw, ipfilter и PF. NPF разработан на NetBSD.
НПФ изначально был написан Миндаугасом Расюкявичюсом. NPF впервые появился в версии NetBSD 6.0 в 2012 году.
NPF разработан для обеспечения высокой производительности в системах SMP и для легкой расширяемости. Он поддерживает различные формы трансляции сетевых адресов (NAT), проверки пакетов с отслеживанием состояния, дерева и хэш-таблиц для наборов IP, байт-кода (BPF или n-кода) для настраиваемых правил фильтрации и других функций. NPF имеет структуру расширений для поддержки пользовательских модулей. Такие функции, как регистрация пакетов, нормализация трафика, случайная блокировка, предоставляются как расширения NPF.
# Назначение IPv4-адресов только для указанных интерфейсов. $ ext_if = inet4 (wm0) $ int_if = inet4 (wm1) # Эффективные таблицы для хранения наборов IP. таблица <1>тип хеш-файла "/ etc / npf_blacklist" таблица <2>тип дерево динамический # Переменные с именами служб. $ services_tcp = {http, https, smtp, domain, 9022} $ services_udp = {domain, ntp} $ localnet = {10.1.1.0/24} # Поддерживаются различные формы NAT. map $ ext_if dynamic 10.1.1.0/24 ->$ ext_if map $ ext_if dynamic 10.1.1.2 port 22 <- $ ext_if port 9022 # NPF имеет различные расширения, которые поддерживаются через пользовательские процедуры. procedure "log" {log: npflog0} # # Группировка обязательна в NPF. # Должна быть группа по умолчанию. # группа "external" на $ ext_if {# передача всего исходящего трафика с сохранением состояния. передать с сохранением состояния в финал весь блок в финале от <1>передать с сохранением в окончательном семействе inet proto tcp в $ ext_if порт ssh применить "журнал" передать с сохранением в окончательном протоколе tcp в $ ext_if порт port $ services_udp # Пассивный FTP и traceroute передают состояние в финальном протоколе TCP на $ ext_if порт 49151-65535 передают состояние в окончательном протоколе UDP в $ ext_if порт 33434-33600} группа "internal" на $ int_if {# Фильтрация входящего трафика согласно RFC 2827. block in all перейти в final from $ localnet перейти в final from <2>передать окончательный все} группа по умолчанию {пройти финал на lo0 все блокировать все}