nftables packet filter 1.0.6 release

Δημοσιεύτηκε η έκδοση φίλτρου πακέτων nftables 1.0.6, ενοποιώντας τις διεπαφές φιλτραρίσματος πακέτων για IPv4, IPv6, ARP και γέφυρες δικτύου (με στόχο την αντικατάσταση των iptables, ip6table, arptables και ebtables). Το πακέτο nftables περιλαμβάνει στοιχεία φίλτρου πακέτων που εκτελούνται στο χώρο του χρήστη, ενώ το επίπεδο του πυρήνα παρέχεται από το υποσύστημα nf_tables, το οποίο αποτελεί μέρος του πυρήνα του Linux από την έκδοση 3.13. Σε επίπεδο πυρήνα, παρέχεται μόνο μια γενική διεπαφή ανεξάρτητη από πρωτόκολλο που παρέχει βασικές λειτουργίες για την εξαγωγή δεδομένων από πακέτα, την εκτέλεση λειτουργιών σε δεδομένα και τον έλεγχο της ροής.

Οι ίδιοι οι κανόνες φιλτραρίσματος και οι ειδικοί χειριστές πρωτοκόλλου μεταγλωττίζονται σε bytecode χώρου χρήστη, μετά τον οποίο αυτός ο bytecode φορτώνεται στον πυρήνα χρησιμοποιώντας τη διεπαφή 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 разрешено указания нулевого значения.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο