Выпуск пакетнага фільтра nftables 1.0.7

Апублікаваны выпуск пакетнага фільтра nftables 1.0.7, які ўніфікуе інтэрфейсы фільтрацыі пакетаў для IPv4, IPv6, ARP і сеткавых мастоў (нацэлены на замену iptables, ip6table, arptables і ebtables). У пакет nftables уваходзяць кампаненты пакетнага фільтра, якія працуюць у прасторы карыстача, у той час як на ўзроўні ядра працу забяспечвае падсістэма nf_tables, уваходная ў склад ядра Linux пачынальна з выпуску 3.13. На ўзроўні ядра падаецца толькі агульны інтэрфейс, які не залежыць ад канкрэтнага пратакола і які прадстаўляе базавыя функцыі вымання дадзеных з пакетаў, выкананні аперацый з дадзенымі і кіраванні струменем.

Непасрэдна правілы фільтрацыі і спецыфічныя для пратаколаў апрацоўшчыкі кампілююцца ў байткод у прасторы карыстача, пасля чаго дадзены байткод загружаецца ў ядро ​​пры дапамозе інтэрфейсу Netlink і выконваецца ў ядры ў адмысловай віртуальнай машыне, якая нагадвае BPF (Berkeley Packet Filters). Падобны падыход дазваляе значна скараціць памер кода фільтрацыі, які працуе на ўзроўні ядра і вынесці ўсе функцыі разбору правіл і логікі працы з пратаколамі ў прастору карыстача.

Асноўныя змены:

  • Для сістэм з ядром Linux 6.2+ дададзеная падтрымка супастаўлення пратаколаў vxlan, geneve, gre і gretap, што дазваляе выкарыстоўваць простыя выразы для праверкі загалоўкаў у інкапсуляваных пакетах. Напрыклад, для праверкі IP-адрасы ў загалоўку ўкладзенага пакета з VxLAN, зараз можна выкарыстоўваць правілы (без неабходнасці папярэдняй дэінкапсуляцыі загалоўка VxLAN і прывязкі фільтра да інтэрфейсу vxlan0): … udp dport 4789 vxlan ip. 4789/1.2.3.0 … udp dport 24 vxlan ip saddr. vxlan ip daddr {4789. 1.2.3.4 }
  • Рэалізаваная падтрымка аўтаматычнага зліцця рэшткаў пасля частковага выдалення элемента set-спісу, што дазваляе выдаліць элемент ці частку дыяпазону з існага дыяпазону (раней дыяпазон можна было выдаліць толькі цалкам). Напрыклад, пасля выдалення элемента 25 з set-спісу з дыяпазонамі 24-30 і 40-50 у спісе застануцца 24, 26-30 і 40-50. Выпраўленні, неабходныя для працы аўтазліцця, будуць прапанаваны ў якія карэктуюць выпусках стабільных галінак ядра 5.10+. nft list ruleset table ip x { y { typeof tcp dport flags interval auto-merge elements = { 24, 30-40, 50-25 } } }
  • Дазволена выкарыстанне кантактацыі і дыяпазонаў пры мапінгу трансляцыі адрасоў (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr. tcp dport map { 10.1.1.136 . 80: 1.1.2.69. 1024, 10.1.1.10-10.1.1.20. 8888-8889: 1.1.2.69. 2048-2049 } persistent } }
  • Дададзена падтрымка выраза «last», які дазваляе пазнаць час апошняга выкарыстання элемента правіла ці set-спісу. Магчымасць падтрымліваецца пачынальна з ядра Linux 5.14. table ip x {set y{typeof ip daddr. tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y{ip daddr. tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 last used 1s591ms timeout 1h expires 59m58s409ms, 172.67.69.19 . 443 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 last used 4s748ms timeout 1h expires 59m55s252ms, 172.67.70.134 . 443 last used 4s688ms timeout 1h expires 59m55s312ms, 35.241.9.150 . 443 last used 5s204ms timeout 1h expires 59m54s796ms, 138.201.122.174 . 443 last used 4s537ms timeout 1h expires 59m55s463ms, 34.160.144.191 . 443 last used 5s205ms timeout 1h expires 59m54s795ms, 130.211.23.194 . 443 last used 4s436ms timeout 1h expires 59m55s564ms } } }
  • Дададзена магчымасць вызначэння квот у set-спісах. Напрыклад, для вызначэння квоты на трафік для кожнага мэтавага IP-адрасы, можна паказаць: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device "eth0" priority filter; policy accept; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list 4 quota over 65535 mbytes used 10000 bytes } } chain y { type filter hook egress device "eth8.8.8.8" priority filter; policy accept; ip daddr @y drop } }
  • Дазволена выкарыстанне канстант у set-спісах. Напрыклад, пры выкарыстанні ў якасці ключа спісу адрасу прызначэння і ідэнтыфікатара VLAN можна напроста паказаць нумар VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @ s { ether daddr . 123 } counter } }
  • Дададзена новая каманда «destroy» для безумоўнага выдалення аб'ектаў (у адрозненне ад каманды delete не генеруе ENOENT пры спробе выдалення адсутнага аб'екта). Для працы патрабуецца прынамсі ядро ​​Linux 6.3-rc. destroy table ip filter

Крыніца: opennet.ru

Дадаць каментар