nftables pakét filter release 1.0.3

Опубликован выпуск пакетного фильтра nftables 1.0.3, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). Необходимые для работы выпуска nftables 1.0.3 изменения включены в состав ядра Linux 5.18.

Paket nftables kalebet komponén saringan pakét anu dijalankeun dina rohangan pangguna, sedengkeun padamelan tingkat kernel disayogikeun ku subsistem nf_tables, anu parantos janten bagian tina kernel Linux ti saprak ngaleupaskeun 3.13. Tingkat kernel ngan nyadiakeun antarbeungeut protokol-bebas generik nu nyadiakeun pungsi dasar pikeun extracting data tina pakét, ngajalankeun operasi data, jeung kontrol aliran.

Aturan nyaring jeung panangan husus protokol anu disusun kana bytecode dina spasi pamaké, nu satutasna bytecode ieu dimuat kana kernel ngagunakeun panganteur Netlink sarta dieksekusi dina kernel dina mesin virtual husus reminiscent of BPF (Berkeley Packet Filters). Pendekatan ieu ngamungkinkeun anjeun sacara signifikan ngirangan ukuran kode nyaring anu dijalankeun dina tingkat kernel sareng mindahkeun sadaya fungsi aturan parsing sareng logika pikeun damel sareng protokol kana rohangan pangguna.

Inovasi utama:

  • В set-списках появилась поддержка сопоставления имён сетевых интерфейсов по маске, например, заданной с использованием символа «*»: table inet testifsets { set simple_wild { type ifname flags interval elements = { «abcdef*», «othername», «ppp0» } } chain v4icmp { type filter hook input priority 0; policy accept; iifname @simple_wild counter packets 0 bytes 0 iifname { «abcdef*», «eth0» } counter packets 0 bytes 0 } }
  • Реализовано автоматическое объединение пересекающихся элементов set-списка во время работы. Ранее при выставлении опции «auto-merge» объединение производилось на стадии объявления правил, а теперь срабатывает и при инкрементальном добавлении новых элементов в процессе работы. Например, на этапе объявления список set y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8, 3.3.3.4, 3.3.3.5 } } будет превращён в elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } а затем если добавить новые элементы # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } примет вид elements = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    При удалении из списка отдельных элементов, попадающих в существующие элементы с диапазонами, диапазон сокращается или разделяется.

  • В оптимизатор правил, вызываемый при указании опции «-o/—optimize», добавлена поддержка объединения нескольких правил трансляции адресов (NAT) в map-список. Например, для набора # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } }

    выполнение «nft -o -c -f ruleset.nft» приведёт к преобразованию раздельных правил «ip saddr» в map-список: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }

    Аналогично в map-списки могут преобразовываться и raw-выражения: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th,160,128 0x0e31393032383939353831343037320e goto nat_dns_this_5301 udp length 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp length 62-78 @th,160,128 0x0e32393535373539353636383732310e goto nat_dns_saturn_5302 udp length 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_dns_saturn_5303 drop } }

    после оптимизации получим map-cписок: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }

  • Разрешено использование raw-выражений в операциях конкатенации. Например: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } или table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
  • Добавлена поддержка указания целочисленных полей заголовков в операциях конкатенации: table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : accept, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; policy drop; udp length . @ih,32,32 vmap @m1 } }
  • Добавлена поддержка сброса TCP-опций (работает только при наличии ядра Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • Ускорено выполнение команд вывода цепочек («nft list chain x y»).

sumber: opennet.ru

Tambahkeun komentar