Lëshimi i filtrit të paketave nftables 1.0.3

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

Paketa nftables përfshin komponentët e filtrit të paketave që funksionojnë në hapësirën e përdoruesit, ndërsa puna në nivel kernel ofrohet nga nënsistemi nf_tables, i cili ka qenë pjesë e kernelit Linux që nga lëshimi 3.13. Niveli i kernelit siguron vetëm një ndërfaqe gjenerike të pavarur nga protokolli që ofron funksione bazë për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve të të dhënave dhe kontrollin e rrjedhës.

Rregullat e filtrimit dhe mbajtësit specifikë të protokollit përpilohen në bytecode në hapësirën e përdoruesit, pas së cilës ky bajtkod ngarkohet në kernel duke përdorur ndërfaqen Netlink dhe ekzekutohet në kernel në një makinë virtuale speciale që të kujton BPF (Berkeley Packet Filters). Kjo qasje ju lejon të zvogëloni ndjeshëm madhësinë e kodit të filtrimit që funksionon në nivelin e kernelit dhe të zhvendosni të gjitha funksionet e rregullave të analizimit dhe logjikës për të punuar me protokollet në hapësirën e përdoruesit.

Risitë kryesore:

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

Burimi: opennet.ru

Shto një koment