The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Первый пригодный для пользователей релиз пакетного фильтра Nftables

22.01.2014 14:36

Проект Netfilter представил первый ориентированный на конечных пользователей выпуск пакетного фильтра Nftables 0.099, а также релиз сопутствующей библиотеки libnftnl 1.0.0, предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables. Напомним, что подсистема nf_tables включена в состав ядра Linux 3.13, а в рамках пакета Nftables поставляются компоненты, работающие в пространстве пользователя.

Выпуск Nftables 0.099 уже не позиционируется как альфа-версия и отмечен как пригодный для персонального использования, но пока не рекомендуется для промышленного применения. Сообщается, что до выпуска Nftables 1.0 (в анонсе указано 0.1, но выпуск 0.100 уже опубликован) не исключено незначительное изменение грамматики правил и внесение нарушающих совместимость изменений. Менее чем через час после 0.099 опубликовано обновление Nftables 0.100, в котором оперативно исправили ссылки на библиотеку libnftnl (в коде использовалось старое название libnftables). Одновременно анонсирован пакет nftables-plus 0.099, который включает в себя дополнительные патчи для улучшения удобства использования.

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

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

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

Для формирования правил фильтрации предлагается использовать утилиту nft, которая проверяет корректность правил и транслирует их в байткод. Правила могут как добавляться инкрементально, так и загружаться целиком из файла на диске. Синтаксис правил не похож на iptables и отличается использованием иерархических блочных структур вместо линейной схемы. Язык классификации правил основан на реальной грамматике, при обработке которой используется сгенерированный в bison парсер. Поддерживается словарный маппинг (хеши), поиск по наборам правил (sets), диапазоны значений (можно определять подсети), средства для отслеживания соединений, NAT, ведение лога. Для обеспечения совместимости с правилами iptables/ip6tables предоставляется специальная прослойка.

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


table filter {
        chain input {
                 type 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 {
                 type 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
        }
}


  1. Главная ссылка к новости (http://marc.info/?l=netfilter&...)
  2. OpenNews: Разработчики Netfilter представили замену iptables
  3. OpenNews: В ядре Linux 3.13 ожидается появление нового пакетного фильтра Nftables
  4. OpenNews: Релиз ядра Linux 3.13. Обзор новшеств
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/38901-nftables
Ключевые слова: nftables, firewall
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (130) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, pavlinux (ok), 15:08, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > унифицирующая интерфейсы фильтрации пакетов для IPv4, IPv6

    Ура!!!

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

     
     
  • 2.7, Потерпевший (?), 15:22, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    "Ура!!!" будет, когда в ядре появится MPLS/VPLS, а nftables будет и по метке фильтровать, и по IP.
     
     
  • 3.16, Аноним (-), 15:46, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ладно MPLS, пусть хотя бы multicast поддержку сделают для NAT, невозможно через маршрутизатор на Linux IPTV смотреть без костылей типа udpxy.
     
     
  • 4.18, Аноним (-), 15:49, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А зачем мультикастовое прокси в ядре?
     
  • 4.29, pavlinux (ok), 16:07, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Ладно 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

     
     
  • 5.34, Аноним (-), 16:27, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Ладно 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'ит.

     
     
  • 6.36, Andrew Kolchoogin (ok), 16:34, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А IGMP? Linux IGMP не NAT'ит.

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

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

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

     
  • 6.47, pavlinux (ok), 17:11, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    igmpproxy
     
  • 5.56, Аноним (-), 17:43, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    а для выпресчата по вланам групповой мультикаст? сейчас только фряха с мроутедом может это делать
     
  • 4.35, Andrew Kolchoogin (ok), 16:29, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    задумался А что вы, собственно, имеете в виду Как и зачем NAT у вза... большой текст свёрнут, показать
     
     
  • 5.37, Аноним (-), 16:36, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот он у меня там на Linux-роутере и помирает, запрос этот Ага, я читал это, и ... большой текст свёрнут, показать
     
     
  • 6.38, Andrew Kolchoogin (ok), 16:41, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, all is working as designed Я не очень понимаю, что тут имеется в виду Е... большой текст свёрнут, показать
     
     
  • 7.39, Аноним (-), 16:46, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Потому, что 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 утилит.

     
     
  • 8.40, Andrew Kolchoogin (ok), 16:50, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Это совершенно другая песня Если ваш провайдер готов выдать вам дополнительный ... большой текст свёрнут, показать
     
     
  • 9.41, Аноним (-), 16:52, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    То есть через NAT не будет работать Блин ... текст свёрнут, показать
     
     
  • 10.52, pavlinux (ok), 17:23, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Можно поставить бридж меж tap и выходным фейсом если их два иль больше , а ebt... текст свёрнут, показать
     
  • 10.108, unscrubber3 (?), 12:06, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    на фрибсд можно сделать так - http www opennet ru tips info 2649 shtml и имеющ... текст свёрнут, показать
     
     
  • 11.128, pavel_simple (ok), 08:23, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    1 слава богу не все настолько укуренные чтобы ставить домой рутер на фряхе чтоб... текст свёрнут, показать
     
  • 3.33, Аноним (-), 16:17, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >"Ура!!!" будет, когда в ядре появится MPLS/VPLS, а nftables будет и по метке фильтровать, и по IP.

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

     
     
  • 4.59, pavlinux (ok), 17:47, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>"Ура!!!" будет, когда в ядре появится MPLS/VPLS, а nftables будет и по метке фильтровать, и по IP.
    > Реквестуй в проект http://sourceforge.net/projects/mpls-linux/ включение, наконец-таки,
    > его в ванильное ядро.

    MPLS™ Patenetd by IBM® Corporation ©.

     
     
  • 5.111, Аноним (-), 17:00, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Опенбздуны реализацию протокола, запатентованного, 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."
     
  • 3.69, Аноним (-), 19:04, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > когда в ядре появится MPLS/VPLS

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

     
     
  • 4.136, Аноним (-), 09:27, 25/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да нормально, если гигабит до семи-десяти в сторону аплинков.
    netflow пишется, BGP стоит, клиенты довольны.
    Правда, не на BSD, а на линуксе, и не MPLS, а IPv4/ethernet,и не core, а border © армянское радио.
     
     
  • 5.137, AlexAT (ok), 10:40, 25/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Да нормально, если гигабит до семи-десяти в сторону аплинков.
    > netflow пишется, BGP стоит, клиенты довольны.
    > Правда, не на BSD, а на линуксе, и не MPLS, а IPv4/ethernet,и
    > не core, а border © армянское радио.

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

     
  • 3.84, metallica (ok), 23:37, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Прикольно http://www.isoc.org/inet2000/cdproceedings/1h/1h_2.htm
     
  • 2.8, Аноним (-), 15:33, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > там порядок следования правил в цепочке важен?

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

     
     
  • 3.23, pavlinux (ok), 15:56, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот к примеру у правила table filter hook output priority 0;
    по-моему вообще неважен порядок, тут главное само наличие.

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

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

     
     
  • 4.27, Аноним (-), 16:03, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну вот к примеру у правила table filter hook output priority 0;
    > по-моему вообще неважен порядок, тут главное само наличие.

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

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

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

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

    Бывает.

     
     
  • 5.30, pavlinux (ok), 16:08, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А еще -I умеет совать после правила с заданным номером.

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

     
     
  • 6.31, Аноним (-), 16:13, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> А еще -I умеет совать после правила с заданным номером.
    > Вот ещё, это же считать надо :)

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

     
     
  • 7.138, rico (ok), 18:28, 27/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    судя по отсутствию активности вы открыли ему новый мир :)
     
  • 4.65, Адекват (ok), 18:09, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну вот к примеру у правила table filter hook output priority 0;
    > по-моему вообще неважен порядок, тут главное само наличие.
    > Просто проскакивает частый косяк в iptables между -I и -A,
    > INSERT суёт в начало таблицы, ADD - в конец.

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

     
  • 2.22, Anonymous528 (?), 15:52, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Да, но там есть функция insert, вставляет нужное в нужное.
     

  • 1.5, Аноним (-), 15:20, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Это замена iptables?
     
     
  • 2.6, asavah (ok), 15:22, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    когда допилят, да.
    пока ещё сыроват для продакшна, но поиграться уже можно.
     
     
  • 3.11, Аноним (-), 15:38, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А чем старый аналог плох был?
     
     
  • 4.13, Аноним (-), 15:42, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Кривой архитектурой. Четыре велосипеда, полученные путем копипасты одного и того же кода, и потом десять лет развивавшиеся независимо друг от друга (ну, кроме ip+ip6, их более-менее синхронизировали).
     
  • 4.70, Аноним (-), 19:06, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А чем старый аналог плох был?

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

     
     
  • 5.117, Аноним (-), 02:22, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Там ты программил правила на почти асме, а тут синтаксис до си заапгрейдили :).

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

     
  • 2.45, Нанобот (ok), 17:10, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это замена iptables, ip6tables, arptables и ebtables
     
     
  • 3.54, Адекват (ok), 17:40, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > ....arptables...

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

     
     
  • 4.57, Нанобот (ok), 17:45, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    о чём ты, мальчик?
     
     
  • 5.66, Адекват (ok), 18:18, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > о чём ты, мальчик?

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

     

  • 1.9, Анонимус_б6 (?), 15:34, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя

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

     
     
  • 2.15, Аноним (-), 15:45, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > вот чем это лучше? скажите нубу плиз.

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

     
     
  • 3.19, Аноним (-), 15:50, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А как будет работать «система отслеживания состояния соединений»? Логику её модулей тоже придётся на BPF писать?
     
     
  • 4.21, Аноним (-), 15:51, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А как будет работать «система отслеживания состояния соединений»? Логику её модулей тоже придётся на BPF писать?

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

     
  • 3.50, Aceler (ok), 17:21, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Для пользователя - мало чем.

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

     
     
  • 4.55, Адекват (ok), 17:41, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Для пользователя - мало чем.
    > Для пользователя будет заметно, когда его роутер перестанет перегреваться на торрентах
    > :-)

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

     
  • 4.118, Аноним (-), 02:24, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Для пользователя будет заметно, когда его роутер перестанет перегреваться на торрентах :-)

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

     

  • 1.10, Аноним (-), 15:37, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Похоже, что оно не поддерживает ipset, вместо этого вводя свой аналогичный велосипед.
    Конечно, ipset за несколько лет гораздо лучше вылизан по скорости и потреблению памяти, да еще имеет критически важную фичу, которой нет в ntf - таймауты.
     
  • 1.12, Аноним (-), 15:42, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    table filter {
            chain input {
                     table filter hook input ...

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

     
     
  • 2.14, Аноним (-), 15:43, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > table filter {
    >         chain input {
    >            
    >      table filter hook input ...
    > пока синтаксис выглядит не очень, зачем одно и тоже два раза повторять,
    > неясно.

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

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

     
     
  • 3.24, Аноним (-), 15:58, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    table filter же всё равно два раза.
     
     
  • 4.26, Аноним (-), 16:01, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > table filter же всё равно два раза.

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

     
     
  • 5.28, Аноним (-), 16:03, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> table filter же всё равно два раза.
    > На самом деле, во второй раз - type filter. А в первый
    > раз - опять-таки можно переименовывать.

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

     
     
  • 6.48, Аноним (-), 17:12, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > ну назвали бы type тогда :)

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

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

     
     
  • 7.60, pavlinux (ok), 17:55, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> ну назвали бы type тогда :)
    > Так и назвали. См. примеры http://people.netfilter.org/wiki-nftables/index.php/Simple_rule_management
    > В новости просто приводится слегка устаревший синтаксис из более раннего источника.

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

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

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

     
     
  • 8.71, evilman (?), 19:06, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален type разный бывает, например, mangle или nat, так что ни... текст свёрнут, показать
     
     
  • 9.109, pavlinux (ok), 14:10, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    NATить и манглить в таблице фильтр низя ... текст свёрнут, показать
     
     
  • 10.116, AlexAT (ok), 21:04, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На самом деле, если очень хочется - то можно Я вот в таблице nat DROP аю, на... текст свёрнут, показать
     
  • 3.25, Аноним (-), 15:59, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В нынешнем iptables со товарищи, при создании соответствующей таблицы автоматически создаются захардкоженный набор цепочек с жестко заданными именами (INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING - набор зависит от конкретной таблицы), подсоединенные к одноименным хукам netfilter. В nftables ненужные цепочки можно просто не создавать, а созданные - называть так, как удобнее.
     
     
  • 4.68, metallica (ok), 18:49, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > В нынешнем iptables со товарищи, при создании соответствующей таблицы автоматически создаются
    > захардкоженный набор цепочек с жестко заданными именами (INPUT, OUTPUT, FORWARD, PREROUTING,
    > POSTROUTING - набор зависит от конкретной таблицы), подсоединенные к одноименным хукам
    > netfilter. В nftables ненужные цепочки можно просто не создавать, а созданные
    > - называть так, как удобнее.

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

     
     
  • 5.125, Аноним (-), 02:45, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Не понял, и в iptables создаём какие угодно цепочки с любыми именами.

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

     

  • 1.17, Аноним (-), 15:49, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Теперь наверное фильтры настраивать легко станет?
     
     
  • 2.20, Аноним (-), 15:51, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Теперь наверное фильтры настраивать легко станет?

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

     
  • 2.32, llolik (ok), 16:15, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Я бы сказал более наглядно (если считать для конечного пользователя)
     
     
  • 3.42, Доктор Звездулькин (?), 16:52, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще если первый критерий — простота и наглядность, то можно взять ufw.
     
     
  • 4.49, Аноним (-), 17:14, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Вообще если первый критерий — простота и наглядность, то можно взять ufw.

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

     
  • 4.61, pavlinux (ok), 17:58, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Вообще если первый критерий — простота и наглядность, то можно взять ...

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


     
     
  • 5.64, asavah (ok), 18:05, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Вообще если первый критерий — простота и наглядность, то можно взять ...
    > Cisco ASA за 300$ и не ипать моск.

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

     
  • 5.72, Аноним (-), 19:08, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Cisco ASA за 300$ и не ипать моск.

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

     
     
  • 6.79, anonymous (??), 22:31, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Cisco ASA за 300$ и не ипать моск.
    > Ща придет sfdtudio и покажет тебеи как офис на 100 компов роутит
    > 20-баксовая мыльница. И даже не дохнет при этом :).

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

     
  • 6.110, pavlinux (ok), 14:12, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Cisco ASA за 300$ и не ипать моск.
    > Ща придет sfdtudio и покажет тебеи как офис на 100 компов роутит
    > 20-баксовая мыльница. И даже не дохнет при этом :).

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

     

  • 1.43, gaga (ok), 16:59, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно будет с помощью этой штуки фильтровать трафик пользователя, цгруппы и приложения?
     
     
  • 2.46, Аноним (-), 17:10, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    По UID и GID - можно. По cgroups и приложению - нет. AFAIK, Поттеринг пытался это пропихнуть, но его патч завернули по причине "поттеринг".
     
     
  • 3.51, Аноним (-), 17:23, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что он опять пытался решать задачу, которая никому нафиг не сдалась. Фильтрация по приложениям, командным строкам, контрольным группам - бред собачий.
     
     
  • 4.78, Аноним (-), 22:28, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Было бы не плохо
     
  • 4.88, Аноним (-), 04:10, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Очень даже сдалась. Просто вы себе использование cgroups мыслите не вполне современно.
    А сейчас это всё более и более легковесный контейнер, скорее даже чрезвычайно легковесная VM, хотя и формально некорректно так назвать, но с точки зрения юз-кейса - вполне.

     
  • 3.87, Аноним (-), 04:07, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот же ж. Единственный полезный телодвижений от Лёни, и на тебе.
    А все остальные, которые вредные - радостно прогрессируют.
    Что-то с этой планетой не так..
     

  • 1.44, Нанобот (ok), 17:07, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    ipfwadm, ipchains, iptables, nftables... прям как в басне крылова "квартет"
     
  • 1.58, Адекват (ok), 17:46, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    >[оверквотинг удален]
    >      ct state established accept
    >            
    >      ct state related accept
    >            
    >      meta oif lo accept
    >            
    >      ct state new counter packets 0
    > bytes 0 accept
    >         }
    > }

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

     
     
  • 2.120, Аноним (-), 02:30, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > без возможности обратного восстановления конечно

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

     

  • 1.67, asavah (ok), 18:40, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    кстати вдруг кто споткнётся при сборке 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).

     
  • 1.73, AlexAT (ok), 19:14, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Юзерспейс там пока конечно ужасный... просто адовый. Эта зараза не хочет автоматически очищать таблицы, и даже flush всех цепочек не сбрасывает, приходится удалять по одному. Еще пока так и не понял - как вывести весь конфиг, а не конкретную таблицу.

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

     
     
  • 2.76, AlexAT (ok), 20:51, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    del
     

  • 1.75, AlexAT (ok), 20:51, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Для желающих nftables в CentOS'е - экспериментальный бэкпорт nftables в ядро CentOS 6.5.

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

     
     
  • 2.77, crypt (ok), 21:58, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    круто-круто, только вот на сайте по любым другим ссылкам ошибка:

    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.

     
     
  • 3.82, AlexAT (ok), 22:48, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > круто-круто, только вот на сайте по любым другим ссылкам ошибка:

    Уже нет.

     

  • 1.80, PavelR (??), 22:43, 22/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Похоже, что оно не поддерживает ipset, вместо этого вводя свой аналогичный велосипед.
    > Конечно, ipset за несколько лет гораздо лучше вылизан по скорости и потреблению
    > памяти, да еще имеет критически важную фичу, которой нет в ntf
    > - таймауты.

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

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


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

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

     
     
  • 2.81, PavelR (??), 22:46, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Какие цели проекта? Пока я считаю, что проект в целом - "хотим
    > свой велосипед, круглое - не модно, хотим овальное и розовое".

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

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


     
     
  • 3.83, AlexAT (ok), 23:07, 22/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Как будет реализован модуль с функционалом, аналогичным модулю recent ?

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

     
     
  • 4.98, PavelR (??), 08:42, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Как будет реализован модуль с функционалом, аналогичным модулю recent ?
    > Есть подозрение, что это правильнее всего будет делать на базе set'ов.

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

     
     
  • 5.100, pavel_simple (ok), 08:50, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>> Как будет реализован модуль с функционалом, аналогичным модулю recent ?
    >> Есть подозрение, что это правильнее всего будет делать на базе set'ов.
    > как же, "на базе set-ов" сделать функционал, когда прилетевший пакет добавит IP
    > в некий список, обновит timestamp записи, либо удалит этот IP оттуда?

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

     
  • 5.106, AlexAT (ok), 11:01, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > как же, "на базе 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

     
     
  • 6.121, Аноним (-), 02:32, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > 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

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

     
     
  • 7.130, pavel_simple (ok), 08:28, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> 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
    > Насколько я понял, таймауты там не поддерживаются как класс.

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

     
  • 3.86, Inome (ok), 00:08, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    +1 тоже интересует вопрос о работе старых модулей на новом iptables. Надеюсь, что модули вообще можно будет использовать !?
     
     
  • 4.90, AlexAT (ok), 07:14, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > +1 тоже интересует вопрос о работе старых модулей на новом iptables. Надеюсь,
    > что модули вообще можно будет использовать !?

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

     
     
  • 5.91, pavel_simple (ok), 07:38, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    с match модулями как-раз всё понятно, и эта виртуальная машина тут очень при чём. НО, что делать с target модулями, как сохранять состояния, работа с памятью?
     
     
  • 6.92, AlexAT (ok), 07:43, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > с match модулями как-раз всё понятно, и эта виртуальная машина тут очень
    > при чём. НО, что делать с target модулями, как сохранять состояния,
    > работа с памятью?

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

     
  • 6.97, PavelR (??), 08:37, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > с match модулями как-раз всё понятно, и эта виртуальная машина тут очень
    > при чём. НО, что делать с target модулями, как сохранять состояния,
    > работа с памятью?

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

     
     
  • 7.127, Аноним (-), 02:49, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > да вот не всё понятно. кроме данных непосредственно пакета есть куча разнообразных
    > данных, доступных в ядерных структурах пакета / соединения.

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

     
     
  • 8.129, pavel_simple (ok), 08:27, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    proof ... текст свёрнут, показать
     
  • 5.95, PavelR (??), 08:36, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> +1 тоже интересует вопрос о работе старых модулей на новом iptables. Надеюсь,
    >> что модули вообще можно будет использовать !?
    > Хитрость в том, что не менее половины "старых модулей" там просто не
    > нужно, ибо реализуется штатно, без необходимости лезть в ядро. Максимум -
    > добавление новых типов match в userspace.

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

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

     
     
  • 6.113, AlexAT (ok), 20:42, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Как это "без необходимости лезть в ядро" реализовать?
    > Модули же иделогически не поддерживаются.

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

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

     
  • 6.122, Аноним (-), 02:37, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Хорошо, "не менее половины старых модулей". А что со второй половиной?
    > Допустим, надо сделать проверку значения realm (есть такой же модуль в iptables).
    > Как это "без необходимости лезть в ядро" реализовать?

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

     
     
  • 7.131, pavel_simple (ok), 08:30, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Хорошо, "не менее половины старых модулей". А что со второй половиной?
    >> Допустим, надо сделать проверку значения realm (есть такой же модуль в iptables).
    >> Как это "без необходимости лезть в ядро" реализовать?
    > Метаданные пакета (входящий интерфейс, исходящий интерфейс, realm, mark, connmark и т.д.)
    > тоже доступны для BPF.

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

     
  • 2.134, Кот_Говноглот (?), 12:03, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну почитай же ты документацию. Они там библиотеку для этого сделали.
     
     
  • 3.135, pavel_simple (ok), 12:47, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну почитай же ты документацию. Они там библиотеку для этого сделали.

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

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

     

  • 1.85, Inome (ok), 00:07, 23/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий и длинный синтаксис, променяв годами проверенный стандартный. Хорошо, что пока поддерживается оба варианта. Надеюсь, кто-нибудь напишет конвертер старого синтаксиса под новый, если они решат его выпилить в более новых версиях.
     
     
  • 2.99, PavelR (ok), 08:46, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий и
    >длинный синтаксис, променяв годами проверенный стандартный.

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

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

     
     
  • 3.124, Аноним (-), 02:40, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А всё потому, что там сидят кодеры, а не разработчики, и их
    > цель - писать код, код, код, больше кода, давайте всё перепишем.
    > Сделать _проект_ они неспособны.

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

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

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

     
  • 2.123, Аноним (-), 02:39, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий
    > и длинный синтаксис, променяв годами проверенный стандартный.

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

     
     
  • 3.132, pavel_simple (ok), 08:31, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Честно говоря, прибываю в ужасе от нового синтаксиса правил.. Сделали более громоздкий
    >> и длинный синтаксис, променяв годами проверенный стандартный.
    > Годами проверены только громоздкость, неудобство и запутанность "стандартного" синтаксиса.
    > Так что новый - вполне в тему.

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

     

  • 1.89, sabitov (ok), 06:02, 23/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это поделие нахер не надо, пока не будет нормальной документации... :(

    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

    :( :( :(

     
     
  • 2.93, AlexAT (ok), 07:45, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Это поделие надо по другой причине - оно практически унифицирует интерфейс, лазить в ядро за добавлением новых типов match будет практически не нужно. Плюс производительность - она должна быть серьезно выше, чем у iptables/xtables. userspace - десятое - разных userspace'ов под это можно налепить по вкусу и цвету.
     

  • 1.94, PavelR (??), 08:25, 23/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Плюс производительность - она должна быть серьезно выше, чем у iptables/xtables

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

     
     
  • 2.96, pavel_simple (ok), 08:36, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>Плюс производительность - она должна быть серьезно выше, чем у 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 и менять содержимое.

     
     
  • 3.101, PavelR (ok), 09:18, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    - Зачем всю функциональность запихивать в виртуальную машину - Зачем убирать в... большой текст свёрнут, показать
     
     
  • 4.103, pavel_simple (ok), 09:39, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > }
    > 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 шный синтаксис а фломастеры по прежнему разного вкуса.

     
     
  • 5.105, PavelR (ok), 10:19, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >> 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 (десять). Жаль только, что это в апстрим приняли _в таком виде_.

     
  • 4.114, AlexAT (ok), 20:51, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, "виртуальная машина" там - одно название. Суть та же таблица команд и вызовов, псевдокод. Разница только в том, что если раньше цепочку вызовов собирало само ядро, причем каждый 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 - этих хуков тоже не будет.

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

     
     
  • 5.133, pavel_simple (ok), 08:34, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > В принципе, определенная оптимизация имеет место быть. Операции "на каждый пакет" заменяются
    > разовыми при генерации псевдокода.

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

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

     
  • 3.102, pavel_simple (ok), 09:19, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > 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 на этот раз сильно перемудрил, как таковой виртуальной машины я там не разглядел - код конечно вполне приличный, но как только оно начнёт обростать фичами начнёться беда, как его нормальным способом расширять я пока не понял.

     
     
  • 4.104, PavelR (ok), 10:16, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >как его нормальным способом расширять я пока не понял.

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

     

  • 1.107, rshadow (ok), 11:10, 23/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А с таким подходом теперь запилят нормальный юзерспейсный фаервол? С показом кто куда идет, счетчиком трафика по приложениям и т.д....
     
     
  • 2.115, AlexAT (ok), 20:58, 23/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А с таким подходом теперь запилят нормальный юзерспейсный фаервол? С показом кто
    > куда идет, счетчиком трафика по приложениям и т.д....

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

     
  • 2.126, Аноним (-), 02:47, 24/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А с таким подходом теперь запилят нормальный юзерспейсный фаервол?

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

     

  • 1.112, gapsf2 (ok), 17:21, 23/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ответы на некоторые вопросы:
    https://home.regit.org/wp-content/uploads/2013/09/2013_kernel_recipes_nftables
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру