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 സബ്സിസ്റ്റമാണ്. പാക്കറ്റുകളിൽ നിന്ന് ഡാറ്റ എക്‌സ്‌ട്രാക്റ്റുചെയ്യുന്നതിനും ഡാറ്റ പ്രവർത്തനങ്ങൾ നടത്തുന്നതിനും ഫ്ലോ കൺട്രോൾ ചെയ്യുന്നതിനുമുള്ള അടിസ്ഥാന പ്രവർത്തനങ്ങൾ നൽകുന്ന ഒരു ജനറിക് പ്രോട്ടോക്കോൾ-സ്വതന്ത്ര ഇന്റർഫേസ് മാത്രമാണ് കേർണൽ ലെവൽ നൽകുന്നത്.

ഫിൽട്ടറിംഗ് നിയമങ്ങളും പ്രോട്ടോക്കോൾ-നിർദ്ദിഷ്‌ട ഹാൻഡ്‌ലറുകളും യൂസർ-സ്‌പേസ് ബൈറ്റ്‌കോഡിലേക്ക് കംപൈൽ ചെയ്യുന്നു, അതിനുശേഷം ഈ ബൈറ്റ്‌കോഡ് നെറ്റ്‌ലിങ്ക് ഇന്റർഫേസ് ഉപയോഗിച്ച് കേർണലിലേക്ക് ലോഡ് ചെയ്യുകയും ബിപിഎഫ് (ബെർക്ക്‌ലി പാക്കറ്റ് ഫിൽട്ടറുകൾ) പോലെയുള്ള ഒരു പ്രത്യേക വെർച്വൽ മെഷീനിൽ കേർണലിൽ എക്‌സിക്യൂട്ട് ചെയ്യുകയും ചെയ്യുന്നു. ഈ സമീപനം കേർണൽ തലത്തിൽ പ്രവർത്തിക്കുന്ന ഫിൽട്ടറിംഗ് കോഡിന്റെ വലുപ്പം ഗണ്യമായി കുറയ്ക്കുകയും പാഴ്സിംഗ് നിയമങ്ങളുടെ എല്ലാ പ്രവർത്തനങ്ങളും പ്രോട്ടോക്കോളുകൾക്കൊപ്പം പ്രവർത്തിക്കുന്ന ലോജിക്കും യൂസർ സ്പേസിലേക്ക് നീക്കുകയും ചെയ്യുന്നു.

പ്രധാന കണ്ടുപിടുത്തങ്ങൾ:

  • В 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

ഒരു അഭിപ്രായം ചേർക്കുക