Вышла версия ipset 5.0 с поддержкой IPv6. Релиз библиотеки libmnl 1.0.0
Jozsef Kadlecsik, ведущий разработчик проекта ipset, объявил о выходе нового релиза — ipset 5.0.Ipset — компонент универсального фреймворка фильтрации и преобразования пакетов netfilter (последний является частью ядра linux). В его задачу входит хранение больших списков IP-адресов и подсетей, MAC-адресов, TCP/UDP-портов с возможностью быстрого поиска по ним. Этими списками можно управлять вручную (при помощи команды ipset), в пакетном режиме (чтение из файла) или автоматически согласно правилам netfilter (iptables -j SET), срабатывающим при прохождении определенных пакетов. Проверку адресов/портов на наличие в списках тоже можно проводить непосредственно из netfilter (iptables -m set). Таким образом, ipset позволяет, например, создавать и сопровождать блэк-листы адресов, уличенных в атаках или попытках сканирования служб.
Ключевые новшества пятой версии:
- Полная поддержка семейства адресов IPv6 (предыдущие версии ipset поддерживали только IPv4).
- Устранено ограничение для списков типа ipporthash, ipportiphash и ipportnethash, предписывавшее, что адреса в пределах одного списка должны принадлежать одному блоку /16.
- Устранено ограничение для списков типа ipporthash и ipportnethash, запрещавшее сохранять в них адреса хоста, на котором работает ipset.
- Для всех типов списков, сохраняющих номера портов, теперь поддерживается сохранение протокола (TCP/UDP/ICMP, в последнем случае вместо номера порта сохраняется пара значений тип/код ICMP).
- Для всех типов списков реализована поддержка таймаутов. По истечении указанного количества секунд с момента добавления, запись автоматически удаляется из списка. (В предыдущей версии ipset 4.x таймауты поддерживались только в типе iptree.)
- Поддерживается добавление/удаление нескольких записей в рамках одной транзакции.
- Для связи ядро-userspace теперь используется протокол Netlink.
- Алгоритм хэширования hash-типов значительно оптимизирован по потреблению памяти.
- Улучшен синтаксис (например, вместо ipset -N foo macipmap --network 192.168.0.0/16 теперь можно написать ipset create foo bitmap:ip,mac range 192.168.0.0/16), при этом синтаксис предыдущих версий также поддерживается.
Надо заметить, что в составе netfilter уже существует похожий инструмент — модуль recent. Однако, стоит отметить ряд важных различий между ipset и recent. Прежде всего, recent не поддерживает работу с портами и MAC-адресами — он может сохранять только IP-адреса. С другой стороны, для каждого адреса recent хранит историю попыток доступа, что позволяет формировать правила вида «если с этого адреса в течение последних 5 секунд поступило не менее 3 пакетов...», в то время как в ipset подобной функциональности нет и пока не планируется (хотя есть поддержка таймаутов для записей, значительно расширенная в новом релизе).
Кроме того, recent обычно используется для работы со сравнительно небольшими списками адресов (до нескольких тысяч), в то время как ipset отлично оптимизирован как для малых, так и для больших списков (до 65535 записей). Таким образом, recent лучше подходит для таких задач, как организация защиты через port knocking, ограничение количества попыток доступа к заданной службе (хотя с этой работой обычно справляется модуль hashlimit), определение сканирования портов (подробнее о применениях recent можно почитать в OpenWiki или на Википедии), а ipset более эффективен для работы с обширными блэк-листами и другими разновидностями сетевых списков контроля доступа.
Предыдущие версии ipset, включая ветку 4.x, так и не были приняты в ядро, однако в той же 4.x поддерживалась возможность собрать соответствующие модули отдельно, без пересборки ядра, что значительно упрощало процесс установки ipset. Пятая версия, из-за использования Netlink, более жестко связана с ядром, и для ее работы требуется обязательная модификация заголовков ядра с последующей пересборкой. С другой стороны, в пятой версии учтены все замечания и пожелания разработчиков ядра, и поэтому можно рассчитывать на ее скорое включение в основную ветку разработки.
И в завершение, стоит упомянуть менее масштабную новость — выход первой версии библиотеки libmnl (minimalistic netlink library), предоставляющий компактный, простой и эффективный низкоуровневый инструментарий для работы с протоколом Netlink. Разработку libmnl возглавляет член Netfilter Core Team Pablo Neira Ayuso. Библиотека распространяется под лицензией LGPLv2+. Кстати говоря, упомянутый выше ipset 5.0 стал первым проектом, использующим libmnl.
© OpenNet