издаване на пакетен филтър , който се развива като заместител на iptables, ip6tables, arptables и ebtables чрез унификация на интерфейсите за филтриране на пакети за IPv4, IPv6, ARP и мрежови мостове. В пакет nftables влизат компоненти на пакетния филтър, работещи в пространството на потребителя, докато на ниво ядро работата се осигурява от подсистемата nf_tables, която е част от ядрото на Linux от версия 3.13. Необходимите промени за работа с nftables 0.9.3 са включени в бъдещата версия на ядрото на Linux 5.5.
На ниво ядро се предоставя само общ интерфейс, независим от конкретен протокол и осигуряващ основни функции за извличане на данни от пакети, извършване на операции с данни и управление на потока. Логиката за филтриране и специфичните за протоколите обработчици се компилират в байткод в потребителското пространство, след което този байткод се зарежда в ядрото чрез интерфейса 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») за изключване на елементи от наборите при показване на правилата. При изпълнение на «nft -t list ruleset» ще бъдат показани:
таблица ip x {
набор y {
тип ipv4_addr
}
}А при «nft list ruleset»
таблица ip x {
набор y {
тип ipv4_addr
елементи = { 192.168.10.2, 192.168.20.1,
192.168.4.4, 192.168.2.34 }
}
} - Възможност за указване на повече от едно устройство в веригите netdev (работи само с ядро 5.5) за обединяване на типовите правила за филтриране.
добави таблица netdev x
добави верига netdev x y { \
тип филтър за входни устройства = { eth0, eth1 } приоритет 0;
} - Възможност за добавяне на описания на типовете данни.
# nft describe ipv4_addr
datatype ipv4_addr (IPv4 адрес) (основен тип integer), 32 бита - Възможност за изграждане на CLI интерфейс с библиотеката linenoise вместо libreadline.
.\/configure —with-cli=linenoise
Източник: opennet.ru
