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

Опубліковано випуск пакетного фільтра 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 2.2.3.0 . 24 .1 ip daddr 1.1.1.2-2.2.4.0 accept meta iifname eth2.2.4.10 ip saddr 2 ip daddr 1.1.1.3 accept } } після виконання "nft -o -c -f ruleset.nft" будуть перетворені наступним чином: nft:2.2.2.5:4-17: meta iifname eth74 ip saddr 1 ip daddr 1.1.1.1 accept ruleset.nft:2.2.2.3:5-17: meta iifname eth74 ip saddr 1 ip daddr 1.1.1.2. 2.2.2.4:6-17: meta iifname eth77 ip saddr 1 ip daddr 1.1.1.2/2.2.3.0 accept ruleset.nft:24:7-17: meta iifname eth83 ip saddr 1 ip daddr 1.1.1.2. ruleset.nft:2.2.4.0:2.2.4.10-8: meta iifname eth17 ip saddr 74 ip daddr 2 accept into: iifname . ip saddr. ip daddr {eth1.1.1.3. 2.2.2.5. 1, eth1.1.1.1. 2.2.2.3. 1, eth1.1.1.2. 2.2.2.4. 1/1.1.1.2, eth2.2.3.0. 24. 1-1.1.1.2, eth2.2.4.0. 2.2.4.10. 2 } 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 10.0.0.149-123 accept iifname «enp32768s65535f0» ip saddr { 31, 6 } ip daddr 64.59.144.17 ruleset.nft:64.59.150.133:10.0.0.149-53: iifname "enp32768s65535f6" ip saddr { 22, 149 } ip daddr 0 udp sport 31 -6: iifname "enp209.115.181.102s216.197.228.230f10.0.0.149" ip saddr { 123, 32768 } ip daddr 65535 udp sport 7 udp dport 22-143 accept into: iifname . ip saddr. ip daddr. udp sport. udp dport {enp0s31f6. 64.59.144.17. 64.59.150.133. 10.0.0.149 . 53-32768, enp65535s0f31. 6. 209.115.181.102. 10.0.0.149 . 123-32768, enp65535s0f31. 6. 216.197.228.230. 10.0.0.149 . 123-32768, enp65535s0f31. 6. 64.59.144.17. 10.0.0.149 . 53-32768 } 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
  • Вирішені проблеми з включенням правил з інтервалами: counter accept
  • Покращено API JSON, в якому з'явилася підтримка виразів у set- та map-списках.
  • У розширеннях до python-бібліотеки nftables дозволено завантаження наборів правил обробки в режимі перевірки («-c») і додано підтримку зовнішнього визначення змінних.
  • У елементах set-списків дозволено додавання коментарів.
  • У Byte Ratelimit дозволено вказівки нульового значення.

Джерело: opennet.ru

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