nftables प्याकेट फिल्टर 1.0.3 रिलीज

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

nftables प्याकेजले प्रयोगकर्ता स्पेसमा चल्ने प्याकेट फिल्टर कम्पोनेन्टहरू समावेश गर्दछ, जबकि कर्नेल-स्तरको काम nf_tables उपप्रणालीद्वारा प्रदान गरिएको छ, जुन 3.13 रिलीजदेखि लिनक्स कर्नेलको अंश भएको छ। कर्नेल स्तरले केवल एक सामान्य प्रोटोकल-स्वतन्त्र इन्टरफेस प्रदान गर्दछ जसले प्याकेटहरूबाट डाटा निकाल्न, डाटा सञ्चालनहरू, र प्रवाह नियन्त्रण गर्न आधारभूत कार्यहरू प्रदान गर्दछ।

फिल्टरिङ नियमहरू आफैं र प्रोटोकल-विशिष्ट ह्यान्डलरहरू प्रयोगकर्ता-स्पेस बाइटकोडमा कम्पाइल हुन्छन्, त्यसपछि यो बाइटकोड नेटलिङ्क इन्टरफेस प्रयोग गरेर कर्नेलमा लोड गरिन्छ र BPF (बर्कले प्याकेट फिल्टरहरू) जस्तै विशेष भर्चुअल मेसिनमा कर्नेलमा कार्यान्वयन गरिन्छ। यो दृष्टिकोणले कर्नेल स्तरमा चलिरहेको फिल्टरिङ कोडको साइजलाई उल्लेखनीय रूपमा घटाउन र पार्सिङ नियमका सबै प्रकार्यहरू र प्रोटोकलहरूसँग प्रयोगकर्ता स्पेसमा काम गर्ने तर्कलाई सार्न सम्भव बनाउँछ।

मुख्य आविष्कारहरू:

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

एक टिप्पणी थप्न