NPF IN BSD

advertisement
NPF IN BSD
Докладчик: Анастасия Антонова.
► NPF
– новый пакетный фильтр в NetBSD
Разработан в рамках проекта NetBSD Миндаугасом Расюкевичиусом.
В репозиторий NetBSD код NPF вошел 22 августа 2010 года.
Первым релизом NetBSD со входящим в поставку NPF является
версия 6.0
Основные функции Сетевого
фильтра:
►
►
►
►
►
Отслеживать состояния активных соединений
Не пропускать (фильтровать) пакеты, не подходящие под
критерии, определённые в конфигурации.
Не пропускать пакеты, не удовлетворяющие логике и алгоритмам
работы соответствующих протоколов и приложений
Бороться с различными видами DOS-атак
NAT(Network Address Translation) – динамическая замена серых
адресов или портов на внешние.
В рамках проекта NetBSD существуют следующие
пакетные фильтры:
Firewall
Версии NetBSD
Разработчик
Лицензия
IPF
(IP Filter)
NetBSD
v 1.0-v2.1
Darren Reed
Ipfilter
License
PF (Packet
Filter)
NetBSD
v 3.0-v5.1
OpenBSD
BSD
License
NetBSD
BSD
License
NPF(New
NetBSD
Packet Filter) v 6.0
Этапы разработки:
(netbsd.org)
Revision 1.1
Mon Aug 22 20:56:23 2010 (6 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)
Написан NPF – новый пакетный фильтр. Некоторые особенности:

поддержка обработки пакетов в многопоточном режиме и
минимизация блокировок в коде(MP-safe). NPF отлично
масштабируется на многопроцессорных системах, в отличие от PF,
в котором используется однопоточный режим работы. (new!)
Revision 1.1
Mon Aug 22 20:56:23 2010 (6 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)
Написан NPF – новый пакетный фильтр. Некоторые особенности:

Использование эффективных хэш-таблиц и красно-черных
деревьев для ускорения выборки элементов. (new!)
Revision 1.1
Mon Aug 22 20:56:23 2010 (6 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)
Написан NPF – новый пакетный фильтр. Некоторые особенности:

Поддержка нескольких режимов трансляции адресов, включая
NAPT (Network Address Port Translation, несколько внутренних
адресов могут быть привязаны к одному реальному IP с
разделением по номеру порта) и ALG (Application-Level Gateway,
учет особенностей прикладных протоколов при организации
трансляции адресов, например, позволяет работать через NAT ftp,
p2p, h.323, sip и т.п.)
Revision 1.1
Mon Aug 22 20:56:23 2010 (6 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)
Написан NPF – новый пакетный фильтр. Некоторые особенности:

Поддержка фильтрации с учетом состояния TCP-соединений;
Revision 1.1
Mon Aug 22 20:56:23 2010 (6 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)
Написан NPF – новый пакетный фильтр. Некоторые особенности:

Модульность и расширяемость: функции NPF могут расширяться
через загрузку дополнительных модулей. Для создания модулей и
расширений подготовлен специальный API. В заданных
пользователем правилах фильтрации могут быть встроены
обращения к внешним модулям (new!)
Revision 1.1
Mon Aug 22 20:56:23 2010 (6 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)
Написан NPF – новый пакетный фильтр. Некоторые особенности:

Механизм контроля пакетов "N-Code processor" основан на идеях, реализованных в интерфейсе BPF :
попадание пакетов под правила обеспечивается через
формирование набора RISC-подобных инструкций и
CISC-подобных команд для выполнения типовых
операций (например, проверка IPv4-адреса). (new!)
Revision 1.1
Mon Aug 22 20:56:23 2010 (6 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)
Написан NPF – новый пакетный фильтр. Некоторые особенности:

Привычный, для пользователей PF и IP Filter, синтаксис файла
конфигурации и типовой набор утилит;
Revision 1.3
Thu Sep 16 06:53:27 2010 (5 months ago 1 week ago) by rmind




Добавлена поддержка двунаправленного NAT и форвардинг
портов.
Фильтрация по ICMP type/code и фильтрация по флагам TCP
Выборочное блокирования ICMP и TCP RST пакетов;
Исправлена куча ошибок, код приведен в красивый вид
Revision 1.4
Thu Nov 11 07:30:29 2010 (3 months, 2 week ago) by rmind (Mindaugas
Rasiukevicius)



Добавлен правильный механизм TCP-отслеживания, описанный в
статье Guido van Rooij, плюс handle TCP Window Scaling option.
Полностью исправлен npf_cache_t, уменьшена зернистость,
упрощен код
Добавлена абстракция npf_addr_t as, изменен код обработки
сессий, так же как код NAT. Теперь все готово для поддержки
IPv6!!!! :)
Revision 1.4
Thu Nov 11 07:30:29 2010 (3 months, 2 week ago) by rmind (Mindaugas
Rasiukevicius)




Поддержка пересборки IPv4 пакетов.
Поддержка IPv4 ID randomization and minimum TTL enforcement.
Поддержка TCP MSS(Maximal Segment Size) "clamping".
Random bits for IPv6. Различные изправления и приведение в
порядок кода.
Revision 1.5
Sat Dec 18 02:07:26 2010 (2 months, 1 week ago) by rmind (Mindaugas
Rasiukevicius)







Добавлено сохранение/восстановление сессий
Ведение лога пакетов, настраиваемого через систему фильтров.
(tcpdump и pseudo-interface)
Перезагрузка без потери сессий;
Пересмотрен механизм контроля сессий
Добавлены некоторые счетчики для статистики, использующие
percpu(9)
Добавлена возможность очистки флаговых полей в заголовках IPпакетов
Пофиксены различные баги
Revision 1.6
Tue Jan 18 21:33:45 2010 (5 weeks, 5 days ago) by rmind (Mindaugas
Rasiukevicius)

Добавлена концепция концепция процедуры правил: отдельная
нормализация, логирование и возможность использования других
функций из rule structure. Процедура правил может быть
распространена среди всех правил. Разделение происходит как на
уровне ядра(npf_rproc_t), так и на уровне конфигураций
("procedure" + "apply").
Revision 1.6
Tue Jan 18 21:33:45 2010 (5 weeks, 5 days ago) by rmind (Mindaugas
Rasiukevicius)




Fix portmap sharing for NAT policy.
Обновлена логика отслеживания(tracking) состояния TCP
Добавлено if_byindex(). Используется в логировании для поиска.
Исправлено traceroute ALG, и многие другие ошибки
Revision 1.7
Wed Feb 2 03:20:25 2010 (3 weeks, 5 days ago) by rmind (Mindaugas
Rasiukevicius)






Добавлена libnpf(3) - библиотека для контроля NPF(Конфигурация,
набор правил и др.)
Добавлена поддержка NPF для ftp-proxy
Добавлен скрипт rc.d для NPF
Конвертирована npfctl(8) для использования libnpf(3), и это
сделало ее менее гнетущей.
Добавлено больше документаций
Различные исправления
Главные отличия от предыдущих NetBSDфайрволов:



Умеет использовать все доступные ядра/процессоры
Не просто проходит по наборам правил, но
компилирует их в специальный псевдокод
Расширяем и масштабируем на
мультироцессорных системах
Основные черты NPF:
•
•
•
•
•
•
•
Поддержка FTP proxy
Механизм блокировки пакетов ICMP и TCP RST
Сохранение/восстановление текущего соединения
Логирование пакетов, конфигурируемые правила фильтрации
пакетов.
высокая производительность на многопроцессорных системах;
быстрый поиск по хэш-таблице и красно-черному дереву;
поддержка NAPT (Network Address Port Translation) и ALG
(Application-Level Gateways), например, для traceroute;
•
обработчик N-Code
•
привычный синтаксис конфигурации и инструментов;
модульность и расширяемость
IP header flags cleansing
•
•
Обработчик N-Code


Движок обработки пакетов, созданный под вдохновением от BPF (Berkeley
Packet Filter):
Его можно программировать на отбор пакетов с использованием общих
инструкций в стиле RISC и некоторых инструкций, подобных CISC, для
таких распространенных шаблонов, как IP-адрес;
Модульность и расширяемость
•
расширять NPF можно путем загрузки модуля к ядру,
разработчикам предоставлен специальный API для расширений, в
правилах NPF предусмотрены хуки для вызова расширений.
NPF
Пакетный фильтр
Конфигурационная
утилита npfctl
Пакетный фильтр
►
►
Располагается в ядре ОС и осуществляет обработку пакетов.
Фильтр полностью работает в контексте ядра ОС, взаимодействие
с ним осуществляется через системный ioctl. Поэтому pfctl, строго
говоря, не является необходимой частью PF.
Возможности фильтрации
►
►
►
►
►
►
►
►
►
►
Сетевой адрес(для TCP и UDP также и порт) источника и
получателя пакета
Сетевой интерфейс(или их группа), на котором обрабатывается
пакет, а так же на котором он появился в системе
Корректность маршрута, с которого пришел пакет(Да или Нет)
Флаги(для TCP)
Биты типа обслуживания(ToS)
Тип и код ICMP
Теги пакетов
Локальный пользователь(владелец сокета)
Различные счетчики соединений
Вероятность
Правила обработки пакетов бывают:
1. match
Если пакет удовлетворяет условиям правила, то указания из
данного правила выполняются моментально. match-правила
обычно используются для NAT, журналирования трафика, QoS и
так далее.
2. block
Если пакет удовлетворяет условиям правила, то он помечается как
подлежащий блокировке.
3. pass
Если пакет удовлетворяет условиям правила, то он помечается как
подлежащий пропуску далее.
Утилита pfctl
•
•
•
Предоставляет интерфейс для управления межсетевым
экраном
Имеет привычный синтаксис конфигурации, схожий с PF.
Использует файлы по умолчанию:
/dev/npf - устройство управления
/etc/npf.conf - конфигурационный файл по умолчанию
Команды утилиты npfctl:









start Включает обработку пакетов, используя текущую загруженную
конфигурацию, или другую.
stop Отключает обработку пакетов. Эта команда не изменяет текущую
конфигурацию утилиты и существующие сессии.
reload [path]
Загружает или обновляет конфигурацию из файла. В случае, если
конфигурационный файл не определен в path , будет использоваться по умолчанию
файл /etc/npf.conf. Все текущие сессии будут сохранены во время загрузки, за
исключением тех, которые могут потерять NAT во время обновления. Политика NAT
определяется типом трансляции и адресом. Следует обратить внимание, что
изменение критерия фильтрации не влияет на соответствующие подключения.
Операция reload (т.е. изменение набора правил, политики NAT и таблиц) является
атомарной.
flush Очистить конфигурацию. Удаляет все правила, таблицы, и завершает все
сессии. Эта команда не отключает обработку пакетов.
table tid
Выводит все записи в текущей загруженной таблице, определенной
tid. Выводит ошибку, если tid не существует.
table tid <addr/mask>
Запрашивает таблицу tid для конкретного IPv4 CIDR,
определенного в addr/mask
table tid [add | rem] <addr/mask>
Добавляет или удаляет IPv4 CIDR, определенный в<addr/mask>
sess-save
Сохраняет все активные сессии. Информация будет записана в файл
/var/db/npf_sessions.db. Администратор может захотеть остановить обработку
пакетов до закрытия сессии.
sess-load
Загружает из файла сохраненные сессии. Стоит отметить, что
конфигурация по умолчанию должна быть загружена до того как новая сессия. В
случае изменения политики NAT, сессия, потерявшая соответствующую политику,
загружена не будет. Любые существующие сессии будут закрыты в результате
денной команды. Администратор может возобновить обработку пакетов после
Пример конфигурационного файла:
Недостатки NPF:
►
В NPF еще не реализована поддержка IPv6.
Разработчик ищет помощников и готов предоставить им
техническую поддержку по реализации IPv6 в NPF.
Спасибо за внимание! 
Download