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

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

7 июня 2020 года

Опубликован выпуск пакетного фильтра nftables 0.9.5, развивающегося в качестве замены iptables, ip6table, arptables и ebtables за счёт унификации интерфейсов фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов. В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. Необходимые для работы выпуска nftables 0.9.5 изменения включены в состав ядра Linux 5.7.

На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком. Непосредственно правила фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в ядре в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.

Основные новшества:

  • В наборы добавлена поддержка счётчиков пакетов и трафика, привязанных к элементам набора. Счётчики включаются при помощи ключевого слова "counter": table ip x { set y { typeof ip saddr counter elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 } } chain z { type filter hook output priority filter; policy accept; ip daddr @y } }
  • Для установки начальных значений счётчиков, например, для восстановления прошлых счётчиков после перезапуска, набора можно использовать команду "nft -f": # cat ruleset.nft table ip x { set y { typeof ip saddr counter elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \counter p 192.168.10.135 counter packets 0 bytes 0 } } chain z { type filter hook output priority filter; policy accept; ip daddr @y } } # nft -f ruleset.nft # nft list ruleset table ip x { set y { typeof ip saddr counter elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \counter p 192.168.10.135 counter packets 0 bytes 0 } } chain z { type filter hook output priority filter; policy accept; ip daddr @y } }
  • Поддержка счётчиков также добавлена во flowtable: table ip foo { flowtable bar { hook ingress priority -100 devices = { eth0, eth1 } counter } chain forward { type filter hook forward priority filter; flow add @bar counter } }

Посмотреть список счётчиков можно командной "conntrack -L": tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \ src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=0 \ secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \ packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \ packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • В наборах для присоединений (concatenation, определённые связки адресов и портов, упрощающие сопоставление) обеспечена возможность использования директивы "typeof", определяющей тип данных элементов для составных частей элементов набора: table ip foo { set whitelist { typeof ip saddr . tcp dport elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 } } chain bar { type filter hook prerouting priority filter; policy drop; ip daddr . tcp dport @whitelist accept } }
  • Директива typeof теперь также применима для присоединений в map-списках: table ip foo { map addr2mark { typeof ip saddr . tcp dport : meta mark elements = { 192.168.10.35 . 80 : 0x00000001, 192.168.10.135 . 80 : 0x00000002 } } chain bar { type filter hook prerouting priority filter; policy drop; meta mark set ip daddr . tcp dport map @addr2mark accept } }
  • Добавлена поддержка присоединений с диапазонами в анонимных (неименованных) наборах: # nft add rule inet filter input ip daddr . tcp dport \ { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept
  • Предоставлена возможность отбрасывания пакетов с флагами 802.1q (VLAN) при обработке сетевых мостов: # nft add rule bridge foo bar ether type vlan reject with tcp reset
  • Добавлена поддержка сопоставления по идентификатору TCP-сеанса (conntrack ID). Для определения conntrack ID можно использовать опцию "--output id": # conntrack -L --output id udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \ bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \ [ASSURED] mark=0 use=1 id=2779986232 # nft add rule foo bar ct id 2779986232 counter

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

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

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

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