URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 93653
[ Назад ]

Исходное сообщение
"Первый пригодный для пользователей релиз пакетного фильтра N..."

Отправлено opennews , 22-Янв-14 15:01 
Проект Netfilter представил (http://marc.info/?l=netfilter&m=139022350623824&w=2) первый ориентированный на конечных пользователей выпуск  пакетного фильтра Nftables 0.099 (http://netfilter.org/projects/nftables/index.html), а также релиз (http://netfilter.org/news.html#2014-01-20a) сопутствующей библиотеки  libnftnl 1.0.0 (http://netfilter.org/projects/libnftnl/), предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables. Напомним, что подсистема nf_tables включена в состав ядра Linux 3.13 (http://www.opennet.me/opennews/art.shtml?num=38845), а в рамках пакета Nftables поставляются компоненты, работающие в пространстве пользователя.  Одновременно опубликован (http://marc.info/?l=netfilter-devel&m=139026112504105&w=2) пакет nftables-plus 0.099, который включает в себя дополнительные патчи (http://xtables.de/) для улучшения удобства использования утилиты nftables.


В рамках проекта Nftables развивается новая реализация пакетного фильтра, унифицирующая интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов, и нацеленная на замену iptables, ip6table, arptables и ebtables. Для реализации поставленной задачи Nftables предоставляет на уровне ядра лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции обработки пакетов, построенные с использованием типовых компонентов инфраструктуры Netfilter, в том числе  применяются существующие хуки, система отслеживания состояния соединений, компоненты организации очередей и подсистема ведения лога.

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

Для формирования правил фильтрации предлагается использовать утилиту nft, которая проверяет корректность правил и транслирует их в байткод. Правила  могут добавляться не только инкрементально, но и загружаться целиком из файла на диске. Синтаксис правил не похож (https://home.regit.org/netfilter-en/nftables-quick-howto/) на iptables и отличается использованием иерархических блочных структур  вместо линейной схемы.  Язык классификации правил основан на реальной грамматике, при обработке которой используется сгенерированный в bison парсер.  Для обеспечения обратной совместимости с линейными правилами  предоставляется специальная прослойка, позволяющая использовать iptables/ip6tables поверх инфраструктуры Nftables.

Пример правил:

<font color="#461b7e">
table filter {
        chain input {
                 table filter hook input priority 0;
                 ct state established accept
                 ct state related accept
                 meta iif lo accept
                 tcp dport ssh counter packets 0 bytes 0 accept
                 counter packets 5 bytes 5 log drop
        }

        chain output {
                 table filter hook output priority 0;
                 ct state established accept
                 ct state related accept
                 meta oif lo accept
                 ct state new counter packets 0 bytes 0 accept
        }
}
</font>

URL: http://marc.info/?l=netfilter&m=139022350623824&w=2
Новость: http://www.opennet.me/opennews/art.shtml?num=38901


Содержание

Сообщения в этом обсуждении
"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 15:08 
> унифицирующая интерфейсы фильтрации пакетов для IPv4, IPv6

Ура!!!

---
Кто уже юзал, - там порядок следования правил в цепочке важен?
Или впаяли какой-нибудь искусственный интеллект  


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Потерпевший , 22-Янв-14 15:22 
"Ура!!!" будет, когда в ядре появится MPLS/VPLS, а nftables будет и по метке фильтровать, и по IP.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:46 
Ладно MPLS, пусть хотя бы multicast поддержку сделают для NAT, невозможно через маршрутизатор на Linux IPTV смотреть без костылей типа udpxy.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:49 
А зачем мультикастовое прокси в ядре?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 16:07 
> Ладно MPLS, пусть хотя бы multicast поддержку сделают для NAT, невозможно через
> маршрутизатор на Linux IPTV смотреть без костылей типа udpxy.

А что-то типа

iptables -t filter -A INPUT -d 224.0.0.0/4 -i eth0 -j   ACCEPT
iptables -t filter -A INPUT -s 224.0.0.0/4 -i eth0 -j ACCEPT
iptables -t filter -A FORWARD -d 224.0.0.0/4 -j ACCEPT
iptables -t filter -A FORWARD -s 224.0.0.0/4 -j ACCEPT


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:27 
>> Ладно MPLS, пусть хотя бы multicast поддержку сделают для NAT, невозможно через
>> маршрутизатор на Linux IPTV смотреть без костылей типа udpxy.
> А что-то типа
> iptables -t filter -A INPUT -d 224.0.0.0/4 -i eth0 -j  
> ACCEPT
> iptables -t filter -A INPUT -s 224.0.0.0/4 -i eth0 -j ACCEPT
> iptables -t filter -A FORWARD -d 224.0.0.0/4 -j ACCEPT
> iptables -t filter -A FORWARD -s 224.0.0.0/4 -j ACCEPT

А IGMP? Linux IGMP не NAT'ит.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Andrew Kolchoogin , 22-Янв-14 16:34 
> А IGMP? Linux IGMP не NAT'ит.

И это очень хорошо. :)

Если вы посмотрите в стандарт IGMP v3, то он surprisingly скажет вам, что получатель от роутера отличается тем, что в IGMP-пакете роутера должен быть IP-адрес интерфейса, с которого идёт IGMP-запрос, а в IGMP-пакете получателя (конечного хоста) в IGMP-пакете должны быть нули (IP-адрес 0.0.0.0) -- так, кстати, их друг от друга отличать и полагается.

Вы что имеете в виду под NAT'ом IGMP? NAT 0.0.0.0 в куда-нибудь?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 17:11 
igmpproxy

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 17:43 
а для выпресчата по вланам групповой мультикаст? сейчас только фряха с мроутедом может это делать

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Andrew Kolchoogin , 22-Янв-14 16:29 
( ... задумался ... )

А что вы, собственно, имеете в виду?

Как и зачем NAT'у взаимодействовать с мультикастным потоком?

Для того, чтобы "из некоторой точки пространства", под которым в данном случае подразумевается пространство IP-connected узлов к тебе на узел полился мультикаст, всё, что тебе нужно -- это попросить твой роутер подписать тебя на нужную тебе мультикастную группу.

Для этого существует соответствующий тип IGMP-запроса, который идёт от твоего компьютера (ТВ-приставки, etc) на твой Linux-роутер.

И НИКОМУ ДРУГОМУ этот запрос вообще не предназначен, зачем его куда-то во что-то там NAT'ить?

В обратную же сторону поток польётся с IP-адресом отправителя каким-то там (ну, с адресом источника) и с IP-адресом получателя из сети класса D -- собственно, IP-адресом мультикастной группы, на которую тебя подписал твой маршрутизатор. Здесь тоже, вроде как, NAT'ить особо нечего.

Всё, что тебе нужно -- это научить твой Linux-роутер реагировать соответствующим образом на IGMP -- либо как stub-роутер, транслируя IGMP-запрос дальше ОТ СВОЕГО ИМЕНИ (google://igmpproxy), либо как нормальный PIM-роутер (google://xorp). И, опять-таки, ни первый, ни второй вариант NAT'ов не предусматривают.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:36 
> Для этого существует соответствующий тип IGMP-запроса, который идёт от твоего компьютера
> (ТВ-приставки, etc) на твой Linux-роутер.

Вот он у меня там на Linux-роутере и помирает, запрос этот.

> Всё, что тебе нужно -- это научить твой Linux-роутер реагировать соответствующим образом
> на IGMP -- либо как stub-роутер, транслируя IGMP-запрос дальше ОТ СВОЕГО
> ИМЕНИ (google://igmpproxy), либо как нормальный PIM-роутер (google://xorp).

Ага, я читал это, и это: «напоследок могу лишь посоветовать посматривать на статистику $IF_IN при пользовании igmpproxy. известно, что [далеко] не всегда "отписка" проходит корректно и это вполне может забить канал рано или поздно (при активной смене каналов вы быстро заметите если что-то пойдёт не так...)» именно так у меня и забивалось, нехочу это ставить.

Почему нельзя было сделать некий проброс IGMP надёжно в ядре? :(


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Andrew Kolchoogin , 22-Янв-14 16:41 
>> Для этого существует соответствующий тип IGMP-запроса, который идёт от твоего компьютера
>> (ТВ-приставки, etc) на твой Linux-роутер.
> Вот он у меня там на Linux-роутере и помирает, запрос этот.

Ну да, all is working as designed.

> Ага, я читал это, и это: «напоследок могу лишь посоветовать посматривать на
> статистику $IF_IN при пользовании igmpproxy. известно, что [далеко] не всегда "отписка"
> проходит корректно и это вполне может забить канал рано или поздно
> (при активной смене каналов вы быстро заметите если что-то пойдёт не
> так...)» именно так у меня и забивалось, нехочу это ставить.

Я не очень понимаю, что тут имеется в виду.

Если мы говорим об IGMP v1, тогда это его неустранимая проблема, если потеряется пакет на отписку (ну, например, из-за flaky network, прогруженной суровым мультикастным трафиком), "тады ой" -- IGMP v1 не предусматривает механизмов какой-либо "пересинхронизации" между двумя смежными мультикаст-маршрутизаторами.

Но в 2014 году все давно используют IGMP v3, у которого таких проблем нет.

> Почему нельзя было сделать некий проброс IGMP надёжно в ядре? :(

Потому, что IGMP вообще не пробрасывается. Он, если угодно, "регенерируется".


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:46 
> Потому, что IGMP вообще не пробрасывается. Он, если угодно, "регенерируется".

Сейчас когда вспоминал, кстати, вычитал: "Luckily, starting from 2.6.34, the kernel has IGMP snooping feature for the software bridges" у меня 2.6.32-5-amd64 попробую как-нибудь после обновления ещё раз, возможно с IGMP snooping получится завести без user mode утилит.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Andrew Kolchoogin , 22-Янв-14 16:50 
>> Потому, что IGMP вообще не пробрасывается. Он, если угодно, "регенерируется".
> Сейчас когда вспоминал, кстати, вычитал: "Luckily, starting from 2.6.34, the kernel has
> IGMP snooping feature for the software bridges" у меня 2.6.32-5-amd64 попробую
> как-нибудь после обновления ещё раз, возможно с IGMP snooping получится завести
> без user mode утилит.

Это совершенно другая песня.

Если ваш провайдер готов выдать вам дополнительный IP-адрес для ТВ-приставки, тогда, конечно, надо её забриджить на внешний интерфейс и не полировать моск. :)

Но иногда провайдер лезет в головку полового члена и хочет, чтобы ему за каждый адрес бапке плотили -- ну, жадные есть провайдеры, что уж тут.

Впрочем, тогда можно вообще поставить свитч, включить в него ТВ-приставку, аплинк от провайдера и Linux-роутер, ибо IGMP Snooping в свитчи встроен с незапамятных времён.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:52 
> Если ваш провайдер готов выдать вам дополнительный IP-адрес для ТВ-приставки, тогда, конечно,
> надо её забриджить на внешний интерфейс и не полировать моск. :)

То есть через NAT не будет работать? Блин :(


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 17:23 
>> Если ваш провайдер готов выдать вам дополнительный IP-адрес для ТВ-приставки, тогда, конечно,
>> надо её забриджить на внешний интерфейс и не полировать моск. :)
> То есть через NAT не будет работать? Блин :(

Можно поставить бридж меж tap и выходным фейсом (если их два иль больше),
а ebtables_ом заворачивать весь мультикаст на tap %)


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено unscrubber3 , 23-Янв-14 12:06 
> То есть через NAT не будет работать? Блин :(

на фрибсд можно сделать так - http://www.opennet.me/tips/info/2649.shtml
и имеющемуся на той же машине нату это никак не мешает
работает гораздо надежней чем igmpproxy


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 24-Янв-14 08:23 
>> То есть через NAT не будет работать? Блин :(
> на фрибсд можно сделать так - http://www.opennet.me/tips/info/2649.shtml
> и имеющемуся на той же машине нату это никак не мешает
> работает гораздо надежней чем igmpproxy

1. слава богу не все настолько укуренные чтобы ставить домой рутер на фряхе чтобы интернеты с теливизерем смотреть.
2. на linux ebtables это делается много проще -- но быэсдэшнеги как всегда..


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:17 
>"Ура!!!" будет, когда в ядре появится MPLS/VPLS, а nftables будет и по метке фильтровать, и по IP.

Реквестуй в проект http://sourceforge.net/projects/mpls-linux/ включение, наконец-таки, его в ванильное ядро.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 17:47 
>>"Ура!!!" будет, когда в ядре появится MPLS/VPLS, а nftables будет и по метке фильтровать, и по IP.
> Реквестуй в проект http://sourceforge.net/projects/mpls-linux/ включение, наконец-таки,
> его в ванильное ядро.

MPLS™ Patenetd by IBM® Corporation ©.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 23-Янв-14 17:00 
Опенбздуны реализацию протокола, запатентованного, Cisco Systems (R) включили, назвав его по другому.
Да и к тому же.
"Организация Open Invention Network (OIN), ставящая перед собой цель защиты экосистемы Linux от патентных претензий. ... В число участников OIN входят такие компании, как IBM, Sony, Philips, Red Hat, Novell, NEC, Oracle, HP, Juniper, Facebook, Google, Cisco, Rackspace Hosting, Symantec, Fujitsu, LG, HTC."

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 19:04 
> когда в ядре появится MPLS/VPLS

А зачем он там? Вы собрались делать из пЫонернетовских писюков на BSD core router'ы? У пЫонерии или писюки слишком крутые стали или оптимизма сильно дофига oO.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 25-Янв-14 09:27 
Да нормально, если гигабит до семи-десяти в сторону аплинков.
netflow пишется, BGP стоит, клиенты довольны.
Правда, не на BSD, а на линуксе, и не MPLS, а IPv4/ethernet,и не core, а border © армянское радио.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 25-Янв-14 10:40 
> Да нормально, если гигабит до семи-десяти в сторону аплинков.
> netflow пишется, BGP стоит, клиенты довольны.
> Правда, не на BSD, а на линуксе, и не MPLS, а IPv4/ethernet,и
> не core, а border © армянское радио.

Кстате да, две 4-6-ядерные машинки на ксеонах за 120-150 тыров каждая (две только ради надежности) с линухами, BIRD'ом и VRRP в качестве бордера спокойно протянут до 10-15 гиг в чистом роутинге, да еще и с фулвьюхой, возможно, не одной, и с PBR, и даже с несложным шейпером при необходимости. Аналог по стоимости найти сложновато.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено metallica , 22-Янв-14 23:37 
Прикольно http://www.isoc.org/inet2000/cdproceedings/1h/1h_2.htm

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:33 
> там порядок следования правил в цепочке важен?

Естественно. Каждому правило ставится в соответствие номер-идентификатор (handle), которые можно вывести командой nft list -a


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 15:56 
Ну вот к примеру у правила table filter hook output priority 0;
по-моему вообще неважен порядок, тут главное само наличие.

Просто проскакивает частый косяк в iptables между -I и -A,
INSERT суёт в начало таблицы, ADD - в конец.

сделал iptables -t filter -I ля-ля-ля -j RETURN и через месяц только вдуплил,
что у тя все остальные правила тупа не работали, хоть в iptable -L все  красиво.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:03 
> Ну вот к примеру у правила table filter hook output priority 0;
> по-моему вообще неважен порядок, тут главное само наличие.

Это не правило, а метаданные цепочки. У них и handle нет.

> Просто проскакивает частый косяк в iptables между -I и -A,
> INSERT суёт в начало таблицы, ADD - в конец.

А еще -I умеет совать после правила с заданным номером.

> сделал iptables -t filter -I ля-ля-ля -j RETURN и через месяц только вдуплил,
> что у тя все остальные правила тупа не работали, хоть в iptable -L все  красиво.

Бывает.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 16:08 
> А еще -I умеет совать после правила с заданным номером.

Вот ещё, это же считать надо :)


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:13 
>> А еще -I умеет совать после правила с заданным номером.
> Вот ещё, это же считать надо :)

Зачем считать? --line-numbers же показывает номера.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено rico , 27-Янв-14 18:28 
судя по отсутствию активности вы открыли ему новый мир :)

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Адекват , 22-Янв-14 18:09 
> Ну вот к примеру у правила table filter hook output priority 0;
> по-моему вообще неважен порядок, тут главное само наличие.
> Просто проскакивает частый косяк в iptables между -I и -A,
> INSERT суёт в начало таблицы, ADD - в конец.

Это не баг, это фича, и ей нужно пользоваться.
-A удобен для запрещающих равил
-I для разрещающих, а если еще указать номер правила -I 13 - то вообще красота будет :)


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Anonymous528 , 22-Янв-14 15:52 
Да, но там есть функция insert, вставляет нужное в нужное.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:20 
Это замена iptables?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено asavah , 22-Янв-14 15:22 
когда допилят, да.
пока ещё сыроват для продакшна, но поиграться уже можно.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:38 
А чем старый аналог плох был?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:42 
Кривой архитектурой. Четыре велосипеда, полученные путем копипасты одного и того же кода, и потом десять лет развивавшиеся независимо друг от друга (ну, кроме ip+ip6, их более-менее синхронизировали).

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 19:06 
> А чем старый аналог плох был?

Там ты программил правила на почти асме, а тут синтаксис до си заапгрейдили :).


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:22 
> Там ты программил правила на почти асме, а тут синтаксис до си заапгрейдили :).

Разница в синтаксисе далеко не такая существенная.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Нанобот , 22-Янв-14 17:10 
Это замена iptables, ip6tables, arptables и ebtables

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Адекват , 22-Янв-14 17:40 
> ....arptables...

то есть,  типа, iptables не умел отлавливать пакеты по мак-адресам, да ?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Нанобот , 22-Янв-14 17:45 
о чём ты, мальчик?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Адекват , 22-Янв-14 18:18 
> о чём ты, мальчик?

Перепутал, с кем не бывает :))


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Анонимус_б6 , 22-Янв-14 15:34 
>Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя

вот чем это лучше? скажите нубу плиз.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:45 
> вот чем это лучше? скажите нубу плиз.

Для пользователя - мало чем. А вот для разработчиков - очень даже лучше. Не надо поддерживать четыре разных фаервола - это раз, кроме того, для добавления модуля фаервола (которые iptables -m и iptables -j) нужно было патчить и ядро, и управляющую программу. Теперь патчить ядро не надо.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:50 
А как будет работать «система отслеживания состояния соединений»? Логику её модулей тоже придётся на BPF писать?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:51 
> А как будет работать «система отслеживания состояния соединений»? Логику её модулей тоже придётся на BPF писать?

А ее не трогали. Как работала, так и работает.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Aceler , 22-Янв-14 17:21 
> Для пользователя - мало чем.

Для пользователя будет заметно, когда его роутер перестанет перегреваться на торрентах :-)


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Адекват , 22-Янв-14 17:41 
>> Для пользователя - мало чем.
> Для пользователя будет заметно, когда его роутер перестанет перегреваться на торрентах
> :-)

Мда, такого бреда...


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:24 
> Для пользователя будет заметно, когда его роутер перестанет перегреваться на торрентах :-)

Радиатор+термопаста. В особо запущенных случаях - кулер. Ну и руки из правильного места.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:37 
Похоже, что оно не поддерживает ipset, вместо этого вводя свой аналогичный велосипед.
Конечно, ipset за несколько лет гораздо лучше вылизан по скорости и потреблению памяти, да еще имеет критически важную фичу, которой нет в ntf - таймауты.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:42 
table filter {
        chain input {
                 table filter hook input ...

пока синтаксис выглядит не очень, зачем одно и тоже два раза повторять, неясно.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:43 
> table filter {
>         chain input {
>            
>      table filter hook input ...
> пока синтаксис выглядит не очень, зачем одно и тоже два раза повторять,
> неясно.

А можно и не повторять
table filter {
        chain inbound {
                 table filter hook input ...
например.

Имя цепочки - на выбор пользователя, имена хуков netfilter - стандартные.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:58 
table filter же всё равно два раза.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:01 
> table filter же всё равно два раза.

На самом деле, во второй раз - type filter. А в первый раз - опять-таки можно переименовывать.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 16:03 
>> table filter же всё равно два раза.
> На самом деле, во второй раз - type filter. А в первый
> раз - опять-таки можно переименовывать.

ну назвали бы type тогда :) понятно, спасибо!


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 17:12 
> ну назвали бы type тогда :)

Так и назвали. См. примеры http://people.netfilter.org/wiki-nftables/index.php/Simple_r...

В новости просто приводится слегка устаревший синтаксис из более раннего источника.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 17:55 
>> ну назвали бы type тогда :)
> Так и назвали. См. примеры http://people.netfilter.org/wiki-nftables/index.php/Simple_r...
> В новости просто приводится слегка устаревший синтаксис из более раннего источника.

логичней было бы сократить

table ip filter {
        chain input {
                 type filter hook input priority 0;
        }
до

table ip filter {
        chain input {
                 hook priority 0;
        }


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено evilman , 22-Янв-14 19:06 
>[оверквотинг удален]
>         chain input {
>            
>      type filter hook input priority 0;
>         }
> до
> table ip filter {
>         chain input {
>            
>      hook priority 0;
>         }

type разный бывает, например, mangle или nat, так что ни разу не логично сокращать, как ты предлагаешь.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 23-Янв-14 14:10 
NATить и манглить в таблице фильтр низя.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 21:04 
> NATить и манглить в таблице фильтр низя.

На самом деле, если очень хочется - то можно :)

Я вот в таблице nat DROP'аю, например, чего делать, в общем-то, тоже "нельзя". Но можно и даже нужно, если хочется жестко залимитировать число сессий на кастомера, а в filter/mangle этого не сделать, потому что там идет куча пакетов с NOTRACK, и обрабатывать connlimit на каждый такой пакет - убийство. Матч по ctstate там - тоже нихреновый lookup. Поэтому был выбран вариант похерить все "нельзя", и сделать дроп там, где его сделать наиболее оптимально. NOTRACK в NAT не попадает, уже обработанные коннекты - тоже.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:59 
В нынешнем iptables со товарищи, при создании соответствующей таблицы автоматически создаются захардкоженный набор цепочек с жестко заданными именами (INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING - набор зависит от конкретной таблицы), подсоединенные к одноименным хукам netfilter. В nftables ненужные цепочки можно просто не создавать, а созданные - называть так, как удобнее.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено metallica , 22-Янв-14 18:49 
> В нынешнем iptables со товарищи, при создании соответствующей таблицы автоматически создаются
> захардкоженный набор цепочек с жестко заданными именами (INPUT, OUTPUT, FORWARD, PREROUTING,
> POSTROUTING - набор зависит от конкретной таблицы), подсоединенные к одноименным хукам
> netfilter. В nftables ненужные цепочки можно просто не создавать, а созданные
> - называть так, как удобнее.

Не понял, и в iptables создаём какие угодно цепочки с любыми именами.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:45 
> Не понял, и в iptables создаём какие угодно цепочки с любыми именами.

Как насчет цепочек, создаваемых автоматически?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:49 
Теперь наверное фильтры настраивать легко станет?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 15:51 
> Теперь наверное фильтры настраивать легко станет?

Да примерно так же. Исторически сложилось, что легкость настройки фильтров зависит преимущественно от IQ настройщика. И это практически не зависит от ОС.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено llolik , 22-Янв-14 16:15 
Я бы сказал более наглядно (если считать для конечного пользователя)

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Доктор Звездулькин , 22-Янв-14 16:52 
Вообще если первый критерий — простота и наглядность, то можно взять ufw.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 17:14 
> Вообще если первый критерий — простота и наглядность, то можно взять ufw.

nftables примерно настолько же просто и наглядно, но при этом несравненно мощнее и гибче.
Все-таки, ufw - это всего лишь надстройка над iptables, и там гибкость принесена в жертву простоте.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 22-Янв-14 17:58 
> Вообще если первый критерий — простота и наглядность, то можно взять ...

Cisco ASA за 300$ и не ипать моск.



"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено asavah , 22-Янв-14 18:05 
>> Вообще если первый критерий — простота и наглядность, то можно взять ...
> Cisco ASA за 300$ и не ипать моск.

Не! професиАналы негодуют.
только DIR-100, только хардкор.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 19:08 
> Cisco ASA за 300$ и не ипать моск.

Ща придет sfdtudio и покажет тебеи как офис на 100 компов роутит 20-баксовая мыльница. И даже не дохнет при этом :).


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено anonymous , 22-Янв-14 22:31 
>> Cisco ASA за 300$ и не ипать моск.
> Ща придет sfdtudio и покажет тебеи как офис на 100 компов роутит
> 20-баксовая мыльница. И даже не дохнет при этом :).

Если внешка на 10 мбит, это неудивительно.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavlinux , 23-Янв-14 14:12 
>> Cisco ASA за 300$ и не ипать моск.
> Ща придет sfdtudio и покажет тебеи как офис на 100 компов роутит
> 20-баксовая мыльница. И даже не дохнет при этом :).

Я тоже люблю хардкор.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено gaga , 22-Янв-14 16:59 
Можно будет с помощью этой штуки фильтровать трафик пользователя, цгруппы и приложения?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 17:10 
По UID и GID - можно. По cgroups и приложению - нет. AFAIK, Поттеринг пытался это пропихнуть, но его патч завернули по причине "поттеринг".

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 17:23 
Потому что он опять пытался решать задачу, которая никому нафиг не сдалась. Фильтрация по приложениям, командным строкам, контрольным группам - бред собачий.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 22-Янв-14 22:28 
Было бы не плохо

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 23-Янв-14 04:10 
Очень даже сдалась. Просто вы себе использование cgroups мыслите не вполне современно.
А сейчас это всё более и более легковесный контейнер, скорее даже чрезвычайно легковесная VM, хотя и формально некорректно так назвать, но с точки зрения юз-кейса - вполне.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 23-Янв-14 04:07 
Вот же ж. Единственный полезный телодвижений от Лёни, и на тебе.
А все остальные, которые вредные - радостно прогрессируют.
Что-то с этой планетой не так..

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Нанобот , 22-Янв-14 17:07 
ipfwadm, ipchains, iptables, nftables... прям как в басне крылова "квартет"

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Адекват , 22-Янв-14 17:46 
>[оверквотинг удален]
>      ct state established accept
>            
>      ct state related accept
>            
>      meta oif lo accept
>            
>      ct state new counter packets 0
> bytes 0 accept
>         }
> }

Что-то как-то слишком просто, нет, я понимаю что они сделали обязательым условием соблюдать количество отступов от края, и вообще весь такой синтаксис - это спасибо, теперь "не средние умы" не будут скучать, но обязательно нужно сделать так, чтобы перед применением правил весь этот код компилировался в бинарный файл, и в последующем использовался ядром, без возможности обратного восстановления конечно - ведь есть ручка и бумага, а если будет как раньше, когда можно было посмотреть правила по iptables -L -n - ну это ж совсем по детски, для ламеров так сказать.
И еще нужно сделать недокуметированную возможность использования символа ";" - реверс-инженеринг очень увлекательная задача.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:30 
> без возможности обратного восстановления конечно

Дурачок? nft list никто не отменял, вообще-то.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено asavah , 22-Янв-14 18:40 
кстати вдруг кто споткнётся при сборке nftables вылетает ошибка и не генерятся доки/маны:

openjade:/usr/share/sgml/docbook/stylesheet/dsssl/modular/print/dbbibl.dsl:704:4:E: flow object not accepted by port; only display flow objects accepted
Done.

ставим openjade 1.3 и всё пучком (вылет идёт на openjade 1.4).


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 22-Янв-14 19:14 
Юзерспейс там пока конечно ужасный... просто адовый. Эта зараза не хочет автоматически очищать таблицы, и даже flush всех цепочек не сбрасывает, приходится удалять по одному. Еще пока так и не понял - как вывести весь конфиг, а не конкретную таблицу.

Бэкпортировал nftables в ядро CentOS 6.5, юзерспейс тоже адаптировал, сейчас немножко погоняю (filter уже проверил, NAT проверил), и выложу ссылку для желающих потестировать на "классике".


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 22-Янв-14 20:51 
del

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 22-Янв-14 20:51 
Для желающих nftables в CentOS'е - экспериментальный бэкпорт nftables в ядро CentOS 6.5.

http://alex-at.ru/linux/centos-6-5-nftables


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено crypt , 22-Янв-14 21:58 
круто-круто, только вот на сайте по любым другим ссылкам ошибка:

This is b2evolution version 5.0.6-stable.

You cannot use the application before you finish configuration and installation.

Database schema is not up to date!

You have schema version «10200», but we would need «11110».

Please use the installer to finish your configuration/installation now.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 22-Янв-14 22:48 
> круто-круто, только вот на сайте по любым другим ссылкам ошибка:

Уже нет.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 22-Янв-14 22:43 
> Похоже, что оно не поддерживает ipset, вместо этого вводя свой аналогичный велосипед.
> Конечно, ipset за несколько лет гораздо лучше вылизан по скорости и потреблению
> памяти, да еще имеет критически важную фичу, которой нет в ntf
> - таймауты.

Мне вот вообще интересно, iptables умеет разные модули, в которых можно [было] написать что угодно, какие угодно проверки, причем единственное ограничение - это возможности языка С.

Теперь же получается будет ограничение - возможности виртуальной машины. И никаких модулей.
Мне как-то кажется, что оптимизировать проверки под С проще, чем под возможности виртуальной машины.


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

Какие цели проекта? Пока я считаю, что проект в целом - "хотим свой велосипед, круглое - не модно, хотим овальное и розовое".


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 22-Янв-14 22:46 
> Какие цели проекта? Пока я считаю, что проект в целом - "хотим
> свой велосипед, круглое - не модно, хотим овальное и розовое".

Чтобы далеко не ходить за примером, спрошу у уважаемой публики:

Как будет реализован модуль с функционалом, аналогичным модулю recent ?



"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 22-Янв-14 23:07 
> Как будет реализован модуль с функционалом, аналогичным модулю recent ?

Есть подозрение, что это правильнее всего будет делать на базе set'ов.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 08:42 
>> Как будет реализован модуль с функционалом, аналогичным модулю recent ?
> Есть подозрение, что это правильнее всего будет делать на базе set'ов.

как же, "на базе set-ов" сделать функционал, когда прилетевший пакет добавит IP в некий список, обновит timestamp записи, либо удалит этот IP оттуда?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 23-Янв-14 08:50 
>>> Как будет реализован модуль с функционалом, аналогичным модулю recent ?
>> Есть подозрение, что это правильнее всего будет делать на базе set'ов.
> как же, "на базе set-ов" сделать функционал, когда прилетевший пакет добавит IP
> в некий список, обновит timestamp записи, либо удалит этот IP оттуда?

если написать разлаписто а не одним правилом то вроде-как взлетает -- т.е. xt_recent set'ами заменить в пhинципе реально.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 11:01 
> как же, "на базе set-ов" сделать функционал, когда прилетевший пакет добавит IP
> в некий список, обновит timestamp записи, либо удалит этот IP оттуда?

Позволю себе пофантазировать (синтаксис пока не соблюдаю, но концепт должен быть понятен).

rule ip saddr 1.2.3.4 set add myrecent saddr timeout 60
rule ip daddr 2.3.4.5 set del myrecent saddr timeout 60
rule set myrecent saddr drop


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:32 
> rule ip saddr 1.2.3.4 set add myrecent saddr timeout 60
> rule ip daddr 2.3.4.5 set del myrecent saddr timeout 60
> rule set myrecent saddr drop

Насколько я понял, таймауты там не поддерживаются как класс. Можно оперировать только данными в реальном времени.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 24-Янв-14 08:28 
>> rule ip saddr 1.2.3.4 set add myrecent saddr timeout 60
>> rule ip daddr 2.3.4.5 set del myrecent saddr timeout 60
>> rule set myrecent saddr drop
> Насколько я понял, таймауты там не поддерживаются как класс.

понял не правильно


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Inome , 23-Янв-14 00:08 
+1 тоже интересует вопрос о работе старых модулей на новом iptables. Надеюсь, что модули вообще можно будет использовать !?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 07:14 
> +1 тоже интересует вопрос о работе старых модулей на новом iptables. Надеюсь,
> что модули вообще можно будет использовать !?

Хитрость в том, что не менее половины "старых модулей" там просто не нужно, ибо реализуется штатно, без необходимости лезть в ядро. Максимум - добавление новых типов match в userspace.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 23-Янв-14 07:38 
с match модулями как-раз всё понятно, и эта виртуальная машина тут очень при чём. НО, что делать с target модулями, как сохранять состояния, работа с памятью?

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 07:43 
> с match модулями как-раз всё понятно, и эта виртуальная машина тут очень
> при чём. НО, что делать с target модулями, как сохранять состояния,
> работа с памятью?

С target-модулями ничего особо хорошего. С другой стороны - скорее всего поддержка xtables в итоге так и будет запилена в основные функции. Сейчас поддержка модулей xtables есть, но в userspace поддерживается только из xtables-iptables. Причем в ядре есть поддержка как match, так и target.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 08:37 
> с match модулями как-раз всё понятно, и эта виртуальная машина тут очень
> при чём. НО, что делать с target модулями, как сохранять состояния,
> работа с памятью?

да вот не всё понятно. кроме данных непосредственно пакета есть куча разнообразных данных, доступных в ядерных структурах пакета / соединения.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:49 
> да вот не всё понятно. кроме данных непосредственно пакета есть куча разнообразных
> данных, доступных в ядерных структурах пакета / соединения.

Эти данные так же доступны для BPF, как и сам пакет.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 24-Янв-14 08:27 
>> да вот не всё понятно. кроме данных непосредственно пакета есть куча разнообразных
>> данных, доступных в ядерных структурах пакета / соединения.
> Эти данные так же доступны для BPF, как и сам пакет.

proof?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 08:36 
>> +1 тоже интересует вопрос о работе старых модулей на новом iptables. Надеюсь,
>> что модули вообще можно будет использовать !?
> Хитрость в том, что не менее половины "старых модулей" там просто не
> нужно, ибо реализуется штатно, без необходимости лезть в ядро. Максимум -
> добавление новых типов match в userspace.

Хорошо, "не менее половины старых модулей". А что со второй половиной?

Допустим, надо сделать проверку значения realm (есть такой же модуль в iptables).  
Как это "без необходимости лезть в ядро" реализовать?
Модули же иделогически не поддерживаются.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 20:42 
> Как это "без необходимости лезть в ядро" реализовать?
> Модули же иделогически не поддерживаются.

И все-таки именно за этим не придётся лезть в ядро - уже реализовано. А при добавлении новой метаинформации в сетевой стек, логично, что и список будет пополняться.

@NFT_META_RTCLASSID: realm value of packet's route (skb->dst->tclassid)


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:37 
> Хорошо, "не менее половины старых модулей". А что со второй половиной?
> Допустим, надо сделать проверку значения realm (есть такой же модуль в iptables).
> Как это "без необходимости лезть в ядро" реализовать?

Метаданные пакета (входящий интерфейс, исходящий интерфейс, realm, mark, connmark и т.д.) тоже доступны для BPF.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 24-Янв-14 08:30 
>> Хорошо, "не менее половины старых модулей". А что со второй половиной?
>> Допустим, надо сделать проверку значения realm (есть такой же модуль в iptables).
>> Как это "без необходимости лезть в ядро" реализовать?
> Метаданные пакета (входящий интерфейс, исходящий интерфейс, realm, mark, connmark и т.д.)
> тоже доступны для BPF.

vlan тэг? QinQ ? тожа нет?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Кот_Говноглот , 24-Янв-14 12:03 
Ну почитай же ты документацию. Они там библиотеку для этого сделали.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 24-Янв-14 12:47 
> Ну почитай же ты документацию. Они там библиотеку для этого сделали.

где документация, я вот не нашел. мой гугол меня подводит?

где написано как расширять ?
где расаписан flow пакета
где описание взаимодействия с route'ингом


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Inome , 23-Янв-14 00:07 
Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий и длинный синтаксис, променяв годами проверенный стандартный. Хорошо, что пока поддерживается оба варианта. Надеюсь, кто-нибудь напишет конвертер старого синтаксиса под новый, если они решат его выпилить в более новых версиях.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 08:46 
>Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий и
>длинный синтаксис, променяв годами проверенный стандартный.

А всё потому, что там сидят кодеры, а не разработчики, и их цель - писать код, код, код, больше кода, давайте всё перепишем. Сделать _проект_ они неспособны.

Они это поделие уже почти 5 (пять) лет пишут. Какой результат - мы видим.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:40 
> А всё потому, что там сидят кодеры, а не разработчики, и их
> цель - писать код, код, код, больше кода, давайте всё перепишем.
> Сделать _проект_ они неспособны.

Окей, идите на винду, там исключительно разработчики :)

> Они это пoделие уже почти 5 (пять) лет пишут. Какой результат -
> мы видим.

С 2009 по 2013 разработкой nftables никто не занимался, были более срочные задачи.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:39 
> Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий
> и длинный синтаксис, променяв годами проверенный стандартный.

Годами проверены только громоздкость, неудобство и запутанность "стандартного" синтаксиса.
Так что новый - вполне в тему.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 24-Янв-14 08:31 
>> Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий
>> и длинный синтаксис, променяв годами проверенный стандартный.
> Годами проверены только громоздкость, неудобство и запутанность "стандартного" синтаксиса.
> Так что новый - вполне в тему.

ставь подпись неасилятор


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено sabitov , 23-Янв-14 06:02 
Это поделие нахер не надо, пока не будет нормальной документации... :(

add rule ip filter input meta dnat set tcp dport map { 80 => 192.168.1.100, 8888 => 192.168.1.101 }

This is typical port redirection that depends on the destination port.
Thus, if the destination port is 22, then the packet is dnatted to 192.168.1.100.


Ладно, тут хотя бы понятно, что очепятка, но вот такой шедевр тех. документации повергает в уныние:

Prepending new rules

To prepend new rules through the insert command:

$ sudo nft insert rule filter output ip daddr 192.168.1.1 counter

:( :( :(


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 07:45 
Это поделие надо по другой причине - оно практически унифицирует интерфейс, лазить в ядро за добавлением новых типов match будет практически не нужно. Плюс производительность - она должна быть серьезно выше, чем у iptables/xtables. userspace - десятое - разных userspace'ов под это можно налепить по вкусу и цвету.

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 08:25 
>Плюс производительность - она должна быть серьезно выше, чем у iptables/xtables

Почему производительность у псевдокода виртуальной машины должна быть выше чем производительность скомпилированного С-кода, исполняющегося непосредственно CPU ?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 23-Янв-14 08:36 
>>Плюс производительность - она должна быть серьезно выше, чем у iptables/xtables
> Почему производительность у псевдокода виртуальной машины должна быть выше чем производительность
> скомпилированного С-кода, исполняющегося непосредственно CPU ?

если говорить про match модули -- то можно предположить что

виртуальная машина проста как два пальца и накладных расходов минимум (ещё не смотрел)
текущий вариант представляет таблицу вызовов и это накладывает какие-то ограничения (с ограничениями не встречался)

к тому-же самое смешное что не так давно почти на все архитектуры был запилен bpf-jit и кроме того google-пограмисты подарили нам всем xt_bpf, который практически решил проблемы написания match модулей.
modinfo xt_bpf
filename:       /lib/modules/3.12-0.bpo.1-amd64/kernel/net/netfilter/xt_bpf.ko
alias:          ip6t_bpf
alias:          ipt_bpf
license:        GPL
description:    Xtables: BPF filter match
author:         Willem de Bruijn <willemb@google.com>
depends:        x_tables
intree:         Y
vermagic:       3.12-0.bpo.1-amd64 SMP mod_unload modversions

другое дело что подобный подход не применим на target, и возможно какое-то подобие виртуальной машины было-бы востребовано, но опять=же возникает вопрос почему было не расширить тот-самый bpf-jit функциями позволяющими работать с памятью и sk_buff и менять содержимое.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 09:18 
> другое дело что подобный подход не применим на target, и возможно какое-то
> подобие виртуальной машины было-бы востребовано, но опять=же возникает вопрос почему было
> не расширить тот-самый bpf-jit функциями позволяющими работать с памятью и sk_buff
> и менять содержимое.

- Зачем всю функциональность запихивать в виртуальную машину?
- Зачем убирать возможность работы native-C модулей? Нужно унифицировать *-tables? Ну так унифицируйте. Не хватает возможности внятно конфигурировать это дело? Да, понятно, меняйте синтаксис правил.

Рассмотрим примерчик:

table filter {
        chain input {
                 type filter hook input priority 0;
}

что такое "type filter hook input priority 0;" ? Это указание использовать "chain input" в стандартном хуке input - т.е. для пакетов входящих соединений.

Зачем тогда делать "table filter  {}" c вложенным "chain input {}" ? Это чистый синтаксический сахар, который сделан "по образу и подобию iptables".
Т.е. читать этот пример надо так:

table MY_FILTER_CHAINS {
        chain MY_INPUT_CHAIN_NAME {
                 type filter hook input priority 0;
}

и уже становится понятно, почему возникает "дублирование" слов filter и input в "type filter hook input".

Идем дальше.


"type filter hook input priority 0;"

Про "type" всё чуть более ясно - они видимо предполагают делать на его основе проверку, чего можно пихать в chain, а чего нельзя, например запретить пихать nat-правила в filter.
Но его (type) можно было бы сделать опциональным, ведь фильтровать, например, ведь можно где угодно :-)

А что мешало "hook" вынести за пределы chain {} ?  

Например, что будет в случае:


table filter {
        chain input {
                 type filter hook input priority 0;
}

table otherfilter {
        chain otherinput {
                 type filter hook input priority 0;
}

да, умный юзерспейс должен будет обнаружить два приоритета 0...

а почему бы не сделать

hook filter.input {
      priority 0 table MY_FILTER_CHAINS chain MY_INPUT_CHAIN_NAME;
}

Тогда можно было бы

hook filter.input {
      priority 0 table MY_FILTER_CHAINS chain MY_INPUT_CHAIN_NAME;
      priority 5 table MY_FILTER_CHAINS chain MY_OTHER_CHAIN_NAME;
}

hook filter.forward {
      priority 0 table MY_FILTER_CHAINS chain MY_INPUT_CHAIN_NAME;
}

А в некоем идеале слоя совместимости и так:

hook filter.forward {
      priority 0 iptables;
}

где iptables - имя "некоего native-C модуля".  

=)


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 23-Янв-14 09:39 
>[оверквотинг удален]
> }
> hook filter.forward {
>       priority 0 table MY_FILTER_CHAINS chain MY_INPUT_CHAIN_NAME;
> }
> А в некоем идеале слоя совместимости и так:
> hook filter.forward {
>       priority 0 iptables;
> }
> где iptables - имя "некоего native-C модуля".
> =)

кратко ИМХО о userspace -- мне (я думаю многим другим кто уже привых) новый систаксис сильно не нравится. но во 1 -- это именно дело привычки, а во 2-ых -- предоставленный "слой совместимости" вполне может быдет более популярен, чем то что оне там напридумывали. В общем случае на userspace можно положить -- бсдшнеги моляться на ipfw шный синтаксис а фломастеры по прежнему разного вкуса.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 10:19 
>[оверквотинг удален]
>> hook filter.forward {
>>       priority 0 table MY_FILTER_CHAINS chain MY_INPUT_CHAIN_NAME;
>> }
>> А в некоем идеале слоя совместимости и так:
>> hook filter.forward {
>>       priority 0 iptables;
>> }
>> где iptables - имя "некоего native-C модуля".
>> =)
> но во 1 -- это именно дело привычки

да это понятно.

> а во 2-ых -- предоставленный "слой совместимости" вполне
> может быдет более популярен, чем то что оне там напридумывали.

ну если они _всю_ функциональность запихнут, то почти пофиг, в каком формате конфигурить, напрямую в новом или через "слой совместимости" ака "трансляторы".
Только вот с "запихнуть всю функциональность" будут нехилые проблемы.

Да в общем, они _это_ пилили 5 (пять) лет, на "всю функциональность" уйдет еще лет 10 (десять). Жаль только, что это в апстрим приняли _в таком виде_.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 20:51 
Ну, "виртуальная машина" там - одно название. Суть та же таблица команд и вызовов, псевдокод. Разница только в том, что если раньше цепочку вызовов собирало само ядро, причем каждый match вызывался отдельно, выполняя, возможно, и ненужные совершенно операции, то теперь цепочка вызовов собирается userspace'ом, возможно, оптимизированно. Грубо говоря - все match'и разбили до элементарных примитивов.

Пример: xt_iprange
if (info->flags & IPRANGE_SRC) { ... }
if (info->flags & IPRANGE_DST) { ... }

Если я хочу матчить только по SRC - нафига мне каждый раз проверять флаг для SRC/DST? Это прекрасно может сделать юзерспейс, и оставить из этого только один матч. Мелочь, а приятно. А внутри еще и:

m ^= !!(info->flags & IPRANGE_SRC_INV);

Опять же, нафига? Проверка инвертированного диапазона. Юзерспейс прекрасно знал, что матч инвертирован, и мог сменить match на не-match еще до передачи в ядро. Зачем эти лишние операции на каждый пакет.

Еще один плюс - возможность хукать несколько хуков на разные участки прохождения пакета (разным софтом, к примеру, с разными приоритетами). Или исключать хуки совсем. Если нам не нужно фильтровать output, к примеру - зачем этот хук? В iptables он есть, и занимает время. Если нам не нужен nat на PREROUTING и OUTPUT - этих хуков тоже не будет.

В принципе, определенная оптимизация имеет место быть. Операции "на каждый пакет" заменяются разовыми при генерации псевдокода.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 24-Янв-14 08:34 
> В принципе, определенная оптимизация имеет место быть. Операции "на каждый пакет" заменяются
> разовыми при генерации псевдокода.

вот именно что по сути это state machine "компилируемая" для ядра в юзерспейсе. и конечно сдесь есть здравое звено. чего только стоит отсутствие парсинга аргументов в ядре...

НО минус то тоже огромный -- КАК это расширять?


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено pavel_simple , 23-Янв-14 09:19 
>[оверквотинг удален]
> description:    Xtables: BPF filter match
> author:         Willem de Bruijn
> <willemb@google.com>
> depends:        x_tables
> intree:         Y
> vermagic:       3.12-0.bpo.1-amd64 SMP mod_unload modversions
> другое дело что подобный подход не применим на target, и возможно какое-то
> подобие виртуальной машины было-бы востребовано, но опять=же возникает вопрос почему было
> не расширить тот-самый bpf-jit функциями позволяющими работать с памятью и sk_buff
> и менять содержимое.

ИМХО McHardy на этот раз сильно перемудрил, как таковой виртуальной машины я там не разглядел - код конечно вполне приличный, но как только оно начнёт обростать фичами начнёться беда, как его нормальным способом расширять я пока не понял.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено PavelR , 23-Янв-14 10:16 
>как его нормальным способом расширять я пока не понял.

Вот-вот. Золотые слова.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено rshadow , 23-Янв-14 11:10 
А с таким подходом теперь запилят нормальный юзерспейсный фаервол? С показом кто куда идет, счетчиком трафика по приложениям и т.д....

"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено AlexAT , 23-Янв-14 20:58 
> А с таким подходом теперь запилят нормальный юзерспейсный фаервол? С показом кто
> куда идет, счетчиком трафика по приложениям и т.д....

Оно совершенно для другого. Хотите считать трафик по приложениям - настраивайте selinux, и матчите по secmark.


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено Аноним , 24-Янв-14 02:47 
> А с таким подходом теперь запилят нормальный юзерспейсный фаервол?

Нет. Это никому не нужно. (Никому из разработчиков, разумеется)


"Первый пригодный для пользователей релиз пакетного фильтра N..."
Отправлено gapsf2 , 23-Янв-14 17:21 
Ответы на некоторые вопросы:
https://home.regit.org/wp-content/uploads/2013/09/2013_kerne...