The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

23.12.2022 11:37

Опубликован выпуск пакетного фильтра nftables 1.0.6, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком.

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

Основные изменения:

  • В оптимизаторе правил, вызываемом при указании опции "-o/--optimize", налажена автоматическая упаковка правил через их объединение и преобразование в map- и set-списки. Например, правила
    
         # cat ruleset.nft
         table ip x {
                chain y {
                       type filter hook input priority filter; policy drop;
                       meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept
                       meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept
                       meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept
                       meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 
    accept
                       meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept
                }
         }
    
    после выполнения "nft -o -c -f ruleset.nft" будут преобразованы в следующим образом:
    
         ruleset.nft:4:17-74:                 meta iifname eth1 ip saddr 1.1.1.1 ip 
    daddr 2.2.2.3 accept
         ruleset.nft:5:17-74:                 meta iifname eth1 ip saddr 1.1.1.2 ip 
    daddr 2.2.2.4 accept
         ruleset.nft:6:17-77:                 meta iifname eth1 ip saddr 1.1.1.2 ip 
    daddr 2.2.3.0/24 accept
         ruleset.nft:7:17-83:                 meta iifname eth1 ip saddr 1.1.1.2 ip 
    daddr 2.2.4.0-2.2.4.10 accept
         ruleset.nft:8:17-74:                 meta iifname eth2 ip saddr 1.1.1.3 ip 
    daddr 2.2.2.5 accept
         into:
                 iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 
    1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 
    2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
    
  • Оптимизатор также может преобразовывать в более компактную форму правила, в которых уже используются простые set-списки, например правила:
    
         # cat ruleset.nft
         table ip filter {
                chain input {
                       type filter hook input priority filter; policy drop;
                       iifname "lo" accept
                       ct state established,related accept comment "In traffic we 
    originate, we trust"
                       iifname "enp0s31f6" ip saddr { 209.115.181.102, 
    216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept
                       iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } 
    ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept
               }
         }
    
    после выполнения "nft -o -c -f ruleset.nft" будут упакованы следующим образом:
    
         ruleset.nft:6:22-149:                      iifname "enp0s31f6" ip saddr { 
    209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 
    32768-65535 accept
         ruleset.nft:7:22-143:                      iifname "enp0s31f6" ip saddr { 
    64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 
    32768-65535 accept
         into:
                    iifname . ip saddr . ip daddr . udp sport . udp dport { 
    enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 
    216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 
    10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 
    32768-65535 } accept
    
  • Решена проблема с генерацией байткода для слияния интервалов, в которых применяются типы с разным порядком следования байтов, например IPv4 (сетевой порядок следования байтов) и meta mark (системный порядок следования байтов).
    
        table ip x {
               map w {
                     typeof ip saddr . meta mark : verdict
                     flags interval
                     counter
                     elements = {
                             127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept,
                             192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : 
    accept,
                     }
              }
              chain k {
                     type filter hook input priority filter; policy drop;
                     ip saddr . meta mark vmap @w
              }
        }
    
  • Налажено сопоставления редких протоколов при использовании raw-выражений, например:
    
         meta l4proto 91 @th,400,16 0x0 accept
    
  • Решены проблемы с включением правил с интервалами:
    
         insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
    
  • Улучшен API JSON, в котором появилась поддержка выражений в set- и map-списках.
  • В расширениях к python-библиотеке nftables разрешена загрузка наборов правил для обработки в режиме проверки ("-c") и добавлена поддержка внешнего определения переменных.
  • В элементах set-списков разрешено добавление комментариев.
  • В byte ratelimit разрешено указания нулевого значения.


  1. Главная ссылка к новости (https://www.mail-archive.com/n...)
  2. OpenNews: Выпуск пакетного фильтра nftables 1.0.5
  3. OpenNews: Локальная уязвимость в nftables, позволяющая повысить свои привилегии
  4. OpenNews: Ещё одна уязвимость в подсистеме ядра Linux Netfilter
  5. OpenNews: Выпуск межсетевого экрана firewalld 1.2
  6. OpenNews: Уязвимость в подсистеме ядра Linux Netfilter
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/58378-nftables
Ключевые слова: nftables, netfilter
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:49, 23/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    долгих лет
     
     
  • 2.25, Владимир (??), 21:09, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарствую ...
     

  • 1.5, mumu (ok), 12:08, 23/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > В оптимизаторе правил, вызываемом при указании опции "-o/--optimize"

    Судя по примеру это опция -o/--obfuscate, превращающая правила в нечитаемое для человека месиво.

     
     
  • 2.18, Аноним (-), 16:45, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Оптимизация всегда превращает код в нечитаемое для человека месиво. И чем больше оптимизаций, тем сложнее разобраться. Исключением может быть -Os у gcc, и то не всегда. Но хуже всего, когда оптимизация проводится вручную -- тогда не только результат компиляции, но и сорец становится нечитаемым месивом, и вот тогда разобраться в этом вообще никаких шансов.
     
     
  • 3.26, fuggy (ok), 21:54, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А разве это нельзя делать при запуске, а хранить сами правила в обфусцированном виде.
     
     
  • 4.29, trickybestia (ok), 23:20, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Что делать? При запуске чего? Правила nftables компилируются при загрузке в ядро. Если хотите получить результат оптимизаций обратно в виде текста, вызовите 'nft list ruleset'.
     

  • 1.7, аНОНИМ (?), 12:20, 23/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Какой профит от этого нфтаблес? Насколько он быстрее чем фильтр от iptables?
     
     
  • 2.10, Попандопала (?), 14:14, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Использую,но так как правила просто переводил из iptables в то,что понимает nftables,то ни хрена ни чем не лучше. Для меня все едино. Лишний геморрой только с настройкой ядра,а старенькому iptables надо правила скормить и все.
     
     
  • 3.12, Аноним (12), 14:21, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Какой там гемор с настройкой ядра?
     
     
  • 4.13, Попандопала (?), 14:51, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Надо включать дополнительные примочки в core netfilter configuration, ip netfilter configuration иначе правила вообще не загрузятся как и сам nftables по сути.
     
     
  • 5.33, Аноним (33), 12:40, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Для вас не будет открытием, что для iptables надо тоже включать дополнительные примочки, без которых iptables'у из userspace просто некуда будет загружать правила?
     
     
  • 6.35, Попандопала (?), 13:49, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ХЗ. Iptables я только устанавливаю и в автозагрузку добавляю по сути, а Nftables  надо в паре мест ткнуть при настройке ядра. Иначе при тех же в принципе правилах что и в Iptables только приведенные к пониманию Nftables, он не распознает что-то там. Имею ввиду ванильное ядро и его настройки по умолчанию. Вот этого мне недостаточно.
     
     
  • 7.36, Попандопала (?), 13:52, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Правила Nfables  у меня в /var/lib/nftables, а где они лежат у Iptables я не знаю. Просто эти 20 строчек копирую в xterm.
     
  • 7.37, Аноним (33), 14:58, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    iptables в автозагрузке у вас срабатывает только потому, что добрый дядя, собравший вам ядро, уже эти настройки ткнул. Сегодня он их ткнул для iptables, завтра будет тыкать для nftables, а вам для оживления iptables тыкать эти настройки самостоятельно. Кстати, что за такой NIH-дистрибутив, у которого nftables в ядре выключен?
     
     
  • 8.39, Попандопала (?), 15:11, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Nftables не выключен,ему там просто надо донастроить Gentoo-sources и дополните... текст свёрнут, показать
     
  • 2.23, Ophely (?), 20:56, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А я вот жду что щас еще вылазит какая-то бабушка и давай спрашивать чем это поделие лучше ipchains.
     
     
  • 3.28, Аноним (33), 22:05, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем спрашивать про такое новье? Надо про ipfw
     
     
  • 4.30, pofigist (?), 23:35, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Чем он лучше zbfw? Это - firewall здорового человека. А все ваши *tables - firewall курильщика... И при этом курильщика чего-то крайне нездорового и незаконного...
     
  • 2.24, Владимир (??), 21:09, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Фильтр из пакета скоростью хоть и не блещет, зато дешев. Да и пакеты всегда под рукой, можно много фильтров понаделать ...
     
  • 2.31, Аноним (31), 05:43, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Профит в декларативном конфиге и атомарных апдейтах. Быстрее намного, но до ~10k правил ты это вряд ли заметишь.
     
     
  • 3.38, Аноним (33), 15:09, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    не, разница на линейных портянках проявится уже на первой сотне правил. Танцы с ipset'тами как-то ситуацию выправляют, но тоже как раз в районе ~1k элементов в сете тоже начнет проигрывать nftables'ам.
     

  • 1.15, Осколок счастья (?), 15:39, 23/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А документации к нему так и не завезли? (нет, дюжина вики-страниц с  кучей дохлых ссылок - это не она).
     
     
  • 2.16, Alexey V. Pautov (?), 16:02, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то вот: https://netfilter.org/documentation/index.html
     
     
  • 3.34, Riff (?), 12:52, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, это не совсем оно.
    Это документация по нетфильтру. К ней претензий нет.
    А в том месте где упоминается nftables мы имеет те же самые 5 вики-страниц, состоящих из примеров без пояснений.

    PS: не даром шляпники для него фронтенд (firewalld) накалякали. Понимают, что в проде, когда нужно быстренько включить доступ сетевому сервису на куче узлов, этот обфусцированный набор правил полезен, как лысому расческа.

     
     
  • 4.40, Аноним (33), 18:56, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Все же firewalld появился чуть ли не за десять лет до начала работ над nftables. И придумали его чтобы на уровне объектных абстракций рулить плоскими правилами iptables. Как итог на выходе получалась укурочная дичь, которая более-менее работала как примерно ожидалось. Про производительность получившихся макарон никто особо не задумывался, для производительности правила вручную обтачивались надфилем с тотальным упрощением всего и вся.
     
  • 2.17, Аноним (-), 16:08, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Знания по крохам собираются. А кто то в коде даже может разобрсться. В общем, будем эксперементировать!
     

  • 1.19, Советский инженер на пенсии (?), 16:56, 23/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    В openwrt сие чудо есть?
     
     
  • 2.20, Аноним (20), 17:52, 23/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    С 22.03.0 версии на него перешли.
     

  • 1.22, lucentcode (ok), 20:33, 23/12/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Фильтрацию по строкам нормальную так и не завезли(аналог модуля string от xtables). Грустно это, столько лет развивается, а паритета по функционалу с xtables до сих пор нет.
     
     
  • 2.32, Аноним (31), 05:50, 24/12/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вас не поймёшь: то unix-философию выдумываете себе, то строки фаерволлом фильтруете. Фаерволл — это l3, строки четырьмя этажами выше.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру