|
Опубликован выпуск пакетного фильтра nftables 1.1.6, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). Одновременно опубликован выпуск сопутствующей библиотеки libnftnl 1.3.1, предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables.
В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком.
Непосредственно правила фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в ядре в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.
Основные изменения:
- Обеспечена полная поддержка шаблонов легковесных туннелей, таких как vxlan, geneve и erspan:
table netdev global {
tunnel t1 {
id 10
ip saddr 192.168.2.10
ip daddr 192.168.2.11
sport 1025
dport 20020
ttl 1
erspan {
version 1
index 2
}
}
tunnel t2 {
id 10
ip saddr 192.168.3.10
ip daddr 192.168.3.11
sport 1025
dport 21021
ttl 1
erspan {
version 1
index 2
}
}
chain in {
type filter hook ingress device veth0 priority 0;
tunnel name ip saddr map { 10.141.10.12 : "t1",
10.141.10.13 : "t2" } fwd to erspan1
}
}
Перед загрузкой правил следует создать сетевой интерфейс erspan1:
ip link add dev erspan1 type erspan external
- Добавлена поддержка масок в именах сетевых интерфейсов в обработчиках netdev, например, для добавления базовой цепочки в фильтр входящего трафика для всех устройств vlan можно указать:
table netdev t {
chain c {
type filter hook ingress devices = { "vlan*", "veth0" }
priority filter; policy accept;
}
}
- На системах с ядром Linux 6.18+ реализована поддержка передачи L2-кадров в интерфейс сетевых мостов для локальной обработки, например, для направления в IP-стек всех Ethernet-кадров для MAC-адреса de:ad:00:00:be:ef можно указать:
table bridge global {
chain pre {
type filter hook prerouting priority 0; policy accept;
ether daddr de:ad:00:00:be:ef meta pkttype set host ether
daddr set meta ibrhwaddr accept
}
}
- Добавлена новая инфраструктура для fuzzing-тестирования с использованием инструментария afl++ (american fuzzy lop++), включаемая на этапе сборки через "./configure --with-fuzzer".
|