Выпуск пакетного фильтра nftables 1.0.1

Kate

Administrator
Команда форума
Опубликован выпуск пакетного фильтра nftables 1.0.1, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). Необходимые для работы выпуска nftables 1.0.1 изменения включены в состав ядра Linux 5.16-rc1.

В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком.

Непосредственно правила фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в ядре в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.

Основные новшества:

  • Сокращено потребление памяти при загрузке больших set- и map-списков.
  • Ускорена перезагрузка set- и map-списков.
  • Ускорен вывод избранных таблиц и цепочек в больших наборах правил. Например, время выполнения команды "nft list ruleset" для вывода набора правил, насчитывающего 100 тысяч строк, составляет 3.049 секунды, а при выводе только таблиц nat и filter ("nft list table nat", "nft list table filter") сокращается до 1.969 и 0.697 секунд.
  • Ускорено выполнение запросов с опцией "--terse" при обработке правил с большими set- и map-списками.
  • Предоставлена возможность фильтрации трафика из цепочки "egress", обрабатываемой на том же уровне, что egress-обработчик в цепочке netdev (hook egress), т.е. на стадии когда драйвер получает пакет от сетевого стека ядра.
    table netdev filter {
    chain egress {
    type filter hook egress devices = { eth0, eth1 } priority 0;
    meta priority set ip saddr map { 192.168.10.2 : abcd:2,
    192.168.10.3 : abcd:3 }
    }
    }

  • Разрешено сопоставление и изменение байтов в заголовке и содержимом пакета по заданному смещению.
    # nft add rule x y @ih,32,32 0x14000000 counter
    # nft add rule x y @ih,32,32 set 0x14000000 counter
 
Сверху