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

Опубліковано випуск пакетного фільтра nftables 1.0.2, що уніфікує інтерфейси фільтрації пакетів для IPv4, IPv6, ARP та мережевих мостів (націлений на заміну iptables, ip6table, arptables та ebtables). Необхідні для роботи випуску nftables 1.0.2 зміни, включені до складу ядра Linux 5.17-rc.

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

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

Основні нововведення:

  • Доданий режим оптимізації правил, що включається за допомогою нової опції «-o» («optimize»), яку можна комбінувати з опцією «check» для перевірки та оптимізації змін у файлі з набором правил без його фактичного завантаження. Оптимізація дозволяє об'єднувати схожі правила, наприклад, правила: 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.5 accept ip saddr1.1.1.1 2.2.2.2. saddr 2.2.2.2 ip daddr 3.3.3.3 drop

    будуть об'єднані в meta iifname. ip saddr. ip daddr {eth1. 1.1.1.1. 2.2.2.3, eth1. 1.1.1.2. 2.2.2.5 } accept ip saddr . ip daddr vmap {1.1.1.1. 2.2.2.2: accept, 2.2.2.2. 3.3.3.3 : drop }

    Приклад використання: # nft -c -o -f ruleset.test 16 counter accept ruleset.nft:3:37-192.168.0.1: ip daddr 17 counter accept into: ip daddr { 3, 37, 192.168.0.2 } counter packets 18 bytes 3 accept

  • У set-списках реалізована можливість вказівки ip- та tcp-опцій, а також chunk-ів sctp: set s5 {typeof ip option ra value elements = {1, 1024}} set s7 {typeof sctp chunk init num-inbound-streams elements = { 1, 4 } } chain c5 { ip option ra value @s5 accept } chain c7 { sctp chunk init num-inbound-streams @s7 accept }
  • Додана підтримка TCP-опцій fastopen, md5sig та mptcp.
  • Додано підтримку використання в зіставленнях підтипу mp-tcp: tcp option mptcp subtype 1
  • Поліпшено код фільтрації, що працює на стороні ядра.
  • Для flowtable реалізовано повну підтримку формату JSON.
  • Надано можливість використання впливу «reject» в операціях зіставлення Ethernet-кадрів. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 reject

Джерело: opennet.ru

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