Tingkat kernel ngan nyadiakeun antarbeungeut protokol-bebas generik nu nyadiakeun pungsi dasar pikeun extracting data tina pakét, ngajalankeun operasi data, jeung kontrol aliran. Logika nyaring sorangan jeung pawang husus protokol anu disusun kana bytecode dina spasi pamaké, nu satutasna bytecode ieu dimuat kana kernel ngagunakeun panganteur Netlink sarta dieksekusi dina mesin virtual husus reminiscent tina BPF (Berkeley Packet Filters). Pendekatan ieu ngamungkinkeun anjeun sacara signifikan ngirangan ukuran kode nyaring anu dijalankeun dina tingkat kernel sareng mindahkeun sadaya fungsi aturan parsing sareng logika pikeun damel sareng protokol kana rohangan pangguna.
Inovasi utama:
- Поддержка сопоставления пакетов по времени. Можно определить как диапазоны времени и дат, в которых будет срабатывать правило, так и настроить срабатывание в отдельные дни недели. Также добавлена новая опция «-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, позволяющих определять более одного правила на бэкенд.
tabél ip foo {
synproxy https-synproxy {
ms 1460
wscale 7
timestamp sack-perm
}synproxy other-synproxy {
ms 1460
wscale 5
}chain pre {
tipe filter hook prerouting prioritas atah; kawijakan narima;
tcp dport 8888 tcp umbul syn notrack
}ranté bar {
tipe filter hook maju filter prioritas; kawijakan narima;
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» будет выведено:
tabél ip x {
set y {
type ipv4_addr
}
}А при «nft list ruleset»
tabél 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
sumber: opennet.ru