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

Опубліковано випуск пакетного фільтра 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 xy @ ih, 32,32 0x14000000 counter # nft add rule xy @ ih, 32,32 set 0x14000000 counter

Джерело: opennet.ru

Додати коментар або відгук