Выпуск пакетного фильтра nftables 0.9.3
Опубликован выпуск пакетного фильтра 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
Источник: http://www.opennet.ru/opennews/art.shtml? num=51980
© OpenNet