Выпуск пакетного фильтра nftables 0.9.3

Материал из Викиновостей, свободного источника новостей

5 декабря 2019 года

Опубликован выпуск пакетного фильтра nftables 0.9.3, развивающегося в качестве замены iptables, ip6table, 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") для исключения элементов 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

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Выпуск пакетного фильтра nftables 0.9.3», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.