nftables пакеттік сүзгі 1.0.3 шығарылымы

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

nftables бумасы пайдаланушы кеңістігінде жұмыс істейтін пакеттік сүзгі құрамдастарын қамтиды, ал ядро ​​деңгейіндегі жұмыс 3.13 шығарылымынан бері Linux ядросының бөлігі болып табылатын nf_tables ішкі жүйесі арқылы қамтамасыз етіледі. Ядро деңгейі пакеттерден деректерді алу, деректер операцияларын орындау және ағынды басқару үшін негізгі функцияларды қамтамасыз ететін жалпы протоколға тәуелсіз интерфейсті ғана қамтамасыз етеді.

Сүзгілеу ережелерінің өздері және хаттамаға тән өңдеушілер пайдаланушы кеңістігінің байт-кодына құрастырылады, содан кейін бұл байт код Netlink интерфейсінің көмегімен ядроға жүктеледі және ядрода BPF (Berkeley Packet Filters) ұқсайтын арнайы виртуалды машинада орындалады. Бұл тәсіл ядро ​​деңгейінде жұмыс істейтін сүзгілеу кодының өлшемін айтарлықтай азайтуға және талдау ережелерінің барлық функцияларын және протоколдармен жұмыс істеу логикасын пайдаланушы кеңістігіне жылжытуға мүмкіндік береді.

Негізгі инновациялар:

  • В 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»).

Ақпарат көзі: opennet.ru

пікір қалдыру