Как создать файловый экран с отслеживанием состояния с помощью nftables?

Как создать файловый экран с отслеживанием состояния с помощью nftables?

Вики nftables естьпример, но мне кажется это не помогает.

На странице сказано, что это должно работать с ядра 5.3, но когда я пробую выполнить точные команды со страницы, появляется сообщение «ошибка протокола»:

# nft add table bridge filter
# nft add chain bridge filter forward '{type filter hook forward priority 0; }'
# nft add rule bridge filter forward ct state established,related accept
Error: Could not process rule: Protocol error
add rule bridge filter forward ct state established,related accept
                               ^^^^^^^^
  • Аппаратное обеспечение: Raspberry Pi 4
  • Ядро: 5.10.92-v8+
  • nft --version:v0.9.8 (E.D.S.)

Я также попробовал после сборки последней версии nftables и ее библиотек:

  • nftables 1.0.1
  • libnftnl 1.2.1
  • libmnl-1.0.4

Я подтвердил ldd nft, что действительно использовались новые версии библиотек, но сообщение об ошибке все равно то же самое.

решение1

Эта функция доступна начиная с ядра 5.3, но Raspberry решила не компилировать ее в поставляемые ядра.

Поскольку мне не удалось найти файл конфигурации ядра (обычно присутствует как /boot/config-xxxили из ядра), я извлек установочный образ, чтобы проверить это напрямую. Вот сравнение доступных модулей в ядре Raspbian (изzip-изображениескачано с официального сайта):

$ ls -1 lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.92-v8+/kernel/net/bridge/netfilter/nft_reject_bridge.ko

противпохожее ядро ​​Debianдля той же архитектуры:

$ ls -1 lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf*
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_conntrack_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nf_log_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_meta_bridge.ko
lib/modules/5.10.0-10-arm64/kernel/net/bridge/netfilter/nft_reject_bridge.ko

Как можно увидеть, необходимая поддержка Netfilter, предоставляемая nf_conntrack_bridgeдляconntrackчасть и nft_meta_bridgeдляnftablesчасть недоступна (и нет, она также не встроена: grep bridge lib/modules/5.10.92-v8+/modules.builtinне имеет результата) в ядре по умолчанию ОС RaspberryPi. Ядро с этими функциями также должно быть собрано:

Вполне возможно, что отсутствуют и другие редкие функции. Например, модулиnft_synproxyиnft_xfrm(для фильтрации IPSec) также отсутствуют.

Между тем, можно по-прежнему использовать устаревший метод (который предполагается удалить после достижения паритета характеристик), что также влияетnftablesк лучшему или к худшему:br_netfilterмодуль ядра. Но роднойnftablesне хватает конкретной поддержки для этого метода, так как он разработан для использования нового метода ядра 5.3. В частности, у него нет эквивалента дляiptables'-m physdev --physdev-is-bridged.

Связанный контент