На ўзроўні ядра падаецца толькі агульны інтэрфейс, які не залежыць ад канкрэтнага пратакола і які прадстаўляе базавыя функцыі вымання дадзеных з пакетаў, выкананні аперацый з дадзенымі і кіраванні струменем. Непасрэдна логіка фільтрацыі і спецыфічныя для пратаколаў апрацоўшчыкі кампілююцца ў байткод у прасторы карыстача, пасля чаго дадзены байткод загружаецца ў ядро пры дапамозе інтэрфейсу Netlink і выконваецца ў адмысловай віртуальнай машыне, якая нагадвае BPF (Berkeley Packet Filters). Падобны падыход дазваляе значна скараціць памер кода фільтрацыі, які працуе на ўзроўні ядра і вынесці ўсе функцыі разбору правіл і логікі працы з пратаколамі ў прастору карыстача.
Асноўныя навіны:
- Падтрымка супастаўлення пакетаў па часе. Можна вызначыць як дыяпазоны часу і дат, у якіх будзе спрацоўваць правіла, так і настроіць спрацоўванне ў асобныя дні тыдня. Таксама дададзена новая опцыя "-T" для вываду эпахальнага часу ў секундах.
meta time "2019-12-24 16:00" - "2020-01-02 7:00"
meta hour "17:00" - "19:00"
meta day \"Fri\" - Падтрымка аднаўлення і захаванні пазнак SELinux (secmark).
ct secmark set meta secmark
meta secmark set ct secmark - Падтрымка map-спісаў synproxy, якія дазваляюць вызначаць больш аднаго правіла на бэкенд.
table ip foo {
synproxy https-synproxy {
MSS 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
MSS 1460
wscale 5
}chain pre {
type filter hook prerouting priority raw; policy accept;
tcp dport 8888 tcp flags syn notrack
}chain bar {
type filter hook forward priority filter; policy accept;
ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "other-synproxy" }
}
} - Магчымасць дынамічнага выдалення элементаў set-набораў з правіл апрацоўкі пакетаў.
nft add rule … delete @set5 { ip6 saddr . ip6 daddr }
- Падтрымка супастаўлення VLAN па ідэнтыфікатары і пратаколу, вызначаных у метададзеных інтэрфейсу сеткавага маста;
meta ibrpvid 100
meta ibrvproto vlan - Опцыя "-t" ("-terse") для выключэння элементаў set-набораў пры адлюстраванні правіл. Пры выкананні "nft -t list ruleset" будзе выведзена:
table ip x {
set y {
type ipv4_addr
}
}А пры "nft list ruleset"
table ip x {
set y {
type ipv4_addr
elements = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - Магчымасць указання больш адной прылады ў ланцужках netdev (працуе толькі з ядром 5.5) для аб'яднання тыпавых правіл фільтрацыі.
add table netdev x
add chain netdev x y { \
type filter hook ingress devices = { eth0, eth1 } priority 0;
} - Магчымасць дадання апісанняў тыпаў дадзеных.
# nft describe ipv4_addr
datatype ipv4_addr (IPv4 address) (basetype integer), 32 bits - Магчымасць зборкі CLI-інтэрфейсу з бібліятэкай linenoise замест libreadline.
./configure -with-cli=linenoise
Крыніца: opennet.ru