phát hành bộ lọc gói nftables 1.0.6

Bản phát hành bộ lọc gói nftables 1.0.6 đã được xuất bản, thống nhất các giao diện lọc gói cho IPv4, IPv6, ARP và các cầu nối mạng (nhằm thay thế iptables, ip6table, arptables và ebtables). Gói nftables bao gồm các thành phần bộ lọc gói chạy trong không gian người dùng, trong khi công việc ở cấp độ kernel được cung cấp bởi hệ thống con nf_tables, vốn là một phần của nhân Linux kể từ bản phát hành 3.13. Cấp độ kernel chỉ cung cấp một giao diện chung độc lập với giao thức, cung cấp các chức năng cơ bản để trích xuất dữ liệu từ các gói, thực hiện các hoạt động dữ liệu và kiểm soát luồng.

Bản thân các quy tắc lọc và trình xử lý dành riêng cho giao thức được biên dịch thành mã byte không gian người dùng, sau đó mã byte này được tải vào nhân bằng giao diện Netlink và được thực thi trong nhân trong một máy ảo đặc biệt giống như BPF (Bộ lọc gói Berkeley). Cách tiếp cận này giúp giảm đáng kể kích thước của mã lọc chạy ở cấp hạt nhân và di chuyển tất cả các chức năng của quy tắc phân tích cú pháp và logic làm việc với các giao thức vào không gian người dùng.

Sự thay đổi chính:

  • В оптимизаторе правил, вызываемом при указании опции «-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 разрешено указания нулевого значения.

Nguồn: opennet.ru

Thêm một lời nhận xét