The OpenNET Project / Index page

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

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

10.08.2022 13:58

Опубликован выпуск пакетного фильтра nftables 1.0.5, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). Одновременно опубликован выпуск сопутствующей библиотеки libnftnl 1.2.3, предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables.

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

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

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

  • В оптимизаторе правил, вызываемом при указании опции "-o/--optimize", решены проблемы с объединения правил, map- и set-списков.
    
         # cat ruleset.nft
         table ip x {
                chain y {
                        type nat hook postrouting priority srcnat; policy drop;
                        ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80
                        ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90
                }
         }
    
         # nft -o -c -f ruleset.nft
         Merging:
         ruleset.nft:4:3-52:                ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80
         ruleset.nft:5:3-52:                ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90
         into:
                snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }
    
  • При объединении ethernet и vlan элементов обеспечено определение динамического set-списка, заполняемого на основе параметров пути пакета.
    
         add table netdev x
         add chain netdev x y { type filter hook ingress device enp0s25 priority 0; 
    }
         add set netdev x macset { typeof ether daddr . vlan id; flags 
    dynamic,timeout; }
         add rule netdev x y update @macset { ether daddr . vlan id timeout 60s }
    
     
         add rule netdev x y ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 
    0a:0b:0c:0d:0e:0f . 4095 } counter accept
    
  • Налажен показ правил с map-списками, содержащими маски в именах интерфейсов.
    
         table inet filter {
            chain INPUT {
                iifname vmap {
                    "eth0" : jump input_lan,
                    "wg*" : jump input_vpn
                }
            }
            chain input_lan {}
            chain input_vpn {}
         }
    
  • Устранены регрессивные изменения, приводящие к неверному лексическому разбору корректных правил.
  • Решены проблемы с медленной обработкой и автоматическим слиянием больших списков с элементами, определяющими интервалы значений.
  • Устранено аварийное завершение при добавлении элементов в некорректный set-список.


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


Обсуждение (13) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.8, Братишка (??), 15:07, 10/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Как я nftablesом из шелла фильтровать буду?
     
     
  • 2.11, Аноним (11), 15:16, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    С помощью команды nft ......
     

  • 1.18, Аноним (18), 15:53, 10/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Оптимизируем до того что правило совсем становится не читаемо.
     
     
  • 2.19, Аноним (19), 16:29, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И да - никакой документации!
    Никогда
     
     
  • 3.31, Тот_Самый_Анонимус (?), 17:44, 15/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    К чему нытьё? Это же и есть линаксвей.
     

  • 1.20, Аноним (20), 17:10, 10/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    А что это у них синтаксис чувствителен к стилю расстановки скобочек. Вот так, например, не воспринимает правила:
    table ip x
    {
                chain y
                {
                        type nat hook postrouting priority srcnat; policy drop;
                        ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80
                        ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90
                }
    }

    Получается, что ситуация хуже, чем оформление блоков пробельчиками.

     
     
  • 2.24, Google (?), 18:29, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Начнем с того что так и в обычных языках нормальные люди не делают. Зачем тратить строку для открывающейся скобки? Это просто отвратительно.
     
     
  • 3.26, Аноним (26), 20:17, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты слишком толстый
     
  • 3.27, Аноним (27), 00:00, 11/08/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Тебе смволов перевода строки жалко? Мне - нет. Зато взамен получаю чёткое видение соответствия открывающей и закрывающей скобки.
     
  • 3.29, Аноним (-), 03:41, 11/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Начнем с того что так и в обычных языках нормальные люди не делают.

    Вообще-то удобно когда логический блок симметричен и на одном уровне, особенно с подсветкой скобок, сразу знаешь где парную скобку искать. Ускоряет навигацию.

     
  • 2.28, Аноним (-), 03:39, 11/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > А что это у них синтаксис чувствителен к стилю расстановки скобочек. Вот
    > так, например, не воспринимает правила:

    Вообще на баг похоже. А пробелами правила фаера структурировать упаси боже, потом там вообще черт ногу сломит.

     
     
  • 3.30, Аноним (-), 14:43, 11/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вот, кстати, такие же грабли я обнаружил в конфиге GRUB2. Там тоже от стиля расстановки скобочек можно потерять целый пункт меню загрузки.
     

  • 1.22, john_erohin (?), 17:25, 10/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    я недавно все-таки начал изучать этот собачий язык.
    атомарное применение правил, все дела.
    вопрос - а у кого-нибудь работает такое:

    chain o_uid_bind {
        type filter hook output priority 0; policy drop;
        meta skuid bind accept
      }
      chain o_uid_ntp {
        type filter hook output priority 0; policy drop;
        meta skuid ntp accept
      }
    ...
      chain out_inet {
        icmp type echo-request limit rate 5/second accept
        ip protocol . th dport vmap {
          tcp . 22 : accept,
          udp . 53 : jump o_uid_bind,
          tcp . 53 : jump o_uid_bind,
          udp . 123 : jump o_uid_ntp
        }
      }
    ...
      chain out_lan {
        icmp type echo-request limit rate 5/second accept
        ip protocol . th dport vmap {
          tcp . 22 : accept,
          udp . 53 : jump o_uid_bind,
          tcp . 53 : jump o_uid_bind,
          udp . 67 : accept,
          udp . 123 : jump o_uid_ntp,
        }
    ...

     

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



    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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