The OpenNET Project / Index page

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

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

19.08.2019 22:25

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

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

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

  • Возможность проверки номера порта из заголовка пакета транспортного уровня независимо от типа протокола 4 уровня:
    
       add rule x y ip protocol { tcp, udp } th dport 53
    
  • Поддержка восстановления времени жизни набора элементов:
    
       add element ip x y { 1.1.1.1 timeout 30s expires 15s }
    
  • Возможность проверки отдельных опций (lsrr, rr, ssrr и ra) из пакетов IPv4:
    
       add rule x y ip option rr exists drop
    

    Для опций маршрутизации возможна проверка полей type, ptr, length и addr:

    
       add rule x y ip option rr type 1 drop
    
  • В выражениях теперь допустимо указание сетевых префиксов и диапазонов адресов:
    
       iifname ens3 snat to 10.0.0.0/28
       iifname ens3 snat to 10.0.0.1-10.0.0.15
    
  • Поддержка использования переменных в определениях цепочек:
    
        define default_policy = accept
        add chain ip foo bar { type filter hook input priority filter; policy $default_policy }
    
  • Указание приоритета цепочки теперь может производиться как в числовом, таки символьном виде:
    
        define prio = filter
        define prionum = 10
        define prioffset = "filter - 150"
    
        add table ip foo
        add chain ip foo bar { type filter hook input priority $prio; }
        add chain ip foo ber { type filter hook input priority $prionum; }
        add chain ip foo bor { type filter hook input priority $prioffset; }
    
  • Реализована поддержка модуля synproxy. Например, для размещения TCP-порта 8888 под защитой synproxy можно использовать набор правил:
    
        table ip x {
                chain y {
                        type filter hook prerouting priority raw; policy accept;
                        tcp dport 8888 tcp flags syn notrack
                }
    
                chain z {
                        type filter hook forward priority filter; policy accept;
                        tcp dport 8888 ct state invalid,untracked synproxy mss 1460 \\
                           wscale 7 timestamp sack-perm  ct state invalid drop
                }
        }
    
  • Для определения в таблице conntrack связанных с текущим соединением ожидаемых дополнительных соединений, которые применяются в требующих установки нескольких соединений протоколах и сценариях, теперь можно определять политики через штатные наборы правил. Например, для определения ожидаемых после соединений к TCP порту 8888 последующих соединений к порту 5432 можно указать следующие правила:
    
            table x {
                    ct expectation myexpect {
                            protocol tcp
                            dport 5432
                            timeout 1h
                            size 12
                            l3proto ip
                    }
    
                    chain input {
                            type filter hook input priority 0;
                            ct state new tcp dport 8888 ct expectation set myexpect
                            ct state established,related counter accept
                    }
            }
    
    
    
    
    


  1. Главная ссылка к новости (https://marc.info/?l=netfilter...)
  2. OpenNews: Выпуск пакетного фильтра nftables 0.9.1
  3. OpenNews: Релиз iptables 1.8.0
  4. OpenNews: Разработчики Netfilter официально объявили инструментарий iptables устаревшим
  5. OpenNews: В состав ядра 4.18 одобрено включение нового пакетного фильтра bpfilter
  6. Борьба с SYN-флудом при помощи iptables и SYNPROXY
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/51312-nftables
Ключевые слова: nftables, firewall
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (45) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, адмирал третьего флота очевидность (?), 23:22, 19/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    осталось подождать когда на eBPF портируют..
     
  • 1.2, Аноним (-), 01:45, 20/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    > пакетного фильтра

    Правильно говорить файрволл.

     
     
  • 2.3, Аноним (3), 03:10, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Ага, брандмауер
     
     
  • 3.7, Andrey Mitrofanov_N0 (??), 08:55, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Ага, брандмауер

    https://www.opennet.dev/openforum/vsluhforumID3/38585.html#11

     
  • 3.25, Sgt. Gram (?), 16:25, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ага, брандмауер

    http://gramota.ru/slovari/dic/?word=%D0%B1%D1%80%D0&

     
  • 2.5, OpenEcho (?), 06:00, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    не-a, - Огненная Стена (ОгнеCтен то бишь :)
     
  • 2.6, Ю.Т. (?), 08:27, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +6 +/
    сетекран
    (сетевой экран)
     
  • 2.23, Аноним (23), 12:53, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Пофигизм в воспитании детей.
     

  • 1.4, Аноним (3), 03:12, 20/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Для определения в таблице conntrack связанных с текущим соединением ожидаемых дополнительных соединений

    Вот это интересно, в таблесах нет такого вроде.

     
     
  • 2.8, Andrey Mitrofanov_N0 (??), 09:01, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >>в таблице conntrack связанных с текущим соединением ожидаемых дополнительных соединений
    >в таблесах нет такого вроде.

    Есть. https://duckduckgo.com/?q=conntrack+iptables&t=ffnt&ia=web

    $ ( cd /lib/modules/$(uname -r) && find -name '*conntrack*' )
    ./kernel/net/ipv4/netfilter/nf_conntrack_ipv4.ko
    ./kernel/net/ipv6/netfilter/nf_conntrack_ipv6.ko
    ./kernel/net/netfilter/nf_conntrack_amanda.ko
    ./kernel/net/netfilter/nf_conntrack_broadcast.ko
    ./kernel/net/netfilter/nf_conntrack_ftp.ko
    ./kernel/net/netfilter/nf_conntrack_h323.ko
    ./kernel/net/netfilter/nf_conntrack_irc.ko
    ./kernel/net/netfilter/nf_conntrack_netbios_ns.ko
    ./kernel/net/netfilter/nf_conntrack_netlink.ko
    ./kernel/net/netfilter/nf_conntrack_pptp.ko
    ./kernel/net/netfilter/nf_conntrack_proto_dccp.ko
    ./kernel/net/netfilter/nf_conntrack_proto_gre.ko
    ./kernel/net/netfilter/nf_conntrack_proto_sctp.ko
    ./kernel/net/netfilter/nf_conntrack_proto_udplite.ko
    ./kernel/net/netfilter/nf_conntrack_sane.ko
    ./kernel/net/netfilter/nf_conntrack_sip.ko
    ./kernel/net/netfilter/nf_conntrack_snmp.ko
    ./kernel/net/netfilter/nf_conntrack_tftp.ko
    ./kernel/net/netfilter/xt_conntrack.ko
    ./kernel/net/netfilter/nf_conntrack.ko
    $ _

     
     
  • 3.18, граммарнаци (?), 10:20, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Так для iptables только набор готовых модулей, а тут можно прямо в конфиге новый протокол добавить
     
     
  • 4.21, пох. (?), 11:00, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Так для iptables только набор готовых модулей, а тут можно прямо в конфиге новый ненужный
    > протокол добавить

    поправил, не благодари.

    добавь туда таким образом... да вот хоть sip ? (раз уж ftp по мнению местных хомячков нинужна и вообще устаревший и плохой, плохой)

     

  • 1.9, привет (?), 09:06, 20/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Кто то им реально пользуется? Так вроде и просто выглядит, и одновременно сложно, из мэ замутили скриптовый язык. Понимаю есть, конечно, серьезные конфигурации , но это вроде больше к сетевикам..
     
     
  • 2.10, Аноним (10), 09:34, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А там уже другие железки со своим фаерволом.
     
  • 2.12, Аноним (12), 09:49, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Многие, причём даже не зная об этом.
     
  • 2.13, пох. (?), 09:51, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > Кто то им реально пользуется?

    firewalld и прочие нескучные десктоп-перделки.

    > Понимаю есть, конечно, серьезные конфигурации

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

    А на этом будут только автогенеренные поделки и васянские суперсекьюрные разработки, которые, после (или даже до) ухода васяна только выбросить целиком получится.

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

     
     
  • 3.19, привет (?), 10:30, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну я имел ввиду - попытка сделать что то серьезное
    на чем то несерьезном, но ты прав, это - фейл.

    Остается только надеятся что в один прекрасный
    момент прослойку с таблесами не уберут.. :)

    Да уж лучше пусть продают коробки :)

     
     
  • 4.20, пох. (?), 10:40, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    как это то есть не уберут? Они ее уже объявили deprecated. Что у нас в ведре случается с таким кодом, надо объяснять?

    Да ладно, было бы по чему плакать... это был проект, как обычно "подававший большие надежды", и в принципе-то и выглядел неплохо на фоне конкурентов, но не доделанный в ста местах.

    Ну будем теперь вместо поделок на линухе использовать краденую asaV. Там хоть packet tracer нормальный. Линейные acl'и - ну как-нибудь переживем.

     
  • 3.38, size_t (?), 11:29, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > "сириозные конфигурации" на этом нечитаемом трэшаке невозможны. Это я тебе как сетевик говорю.

    Серьезный сетевик конечно же купит отдельную железку для stateful firewall, да?

    Как, кстати, на серьезных железках будет выглядеть правило, фильтрующее upd/53 внутри gre-туннеля?
    Да, туннель транзитный.

     
     
  • 4.39, пох. (?), 12:16, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >> "сириозные конфигурации" на этом нечитаемом трэшаке невозможны. Это я тебе как сетевик говорю.
    > Серьезный сетевик конечно же купит отдельную железку для stateful firewall, да?

    ну а куда деваться-то? Если последний условно-вменяемый пакетный фильтр десять лет не чинили в десяти тривиальных и нескольких нетривиальных местах, а потом просто притащили вместо него неработающий мартышачий кал, а его объявили устаревшим и неправильным?

    > Как, кстати, на серьезных железках будет выглядеть правило, фильтрующее upd/53 внутри gre-
    > туннеля?

    на серьезных железках такой херней не занимаются.

    Правило будет выглядеть совершенно иначе - что-нибудь типа "allow dns from vpn clients to google and cloudflare"
    Без уточнения айпишников и того что второй - DoH, и без детальных описаний всех возможных оберток.

    Минус, что в этом полуестественном интеллекте, у тебя только видимость контроля. А реальный - у индуса где-то в горах. Но никакие другие варианты в общем-то уже давно не имеют смысла (ты все равно хуже индуса, да и не очень хочется за него месить навоз). Кроме васянхостовых, а с теми и firewalld справится.

     
     
  • 5.40, пох. (?), 12:18, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > ну а куда деваться-то? Если последний условно-вменяемый пакетный фильтр десять лет не
    > чинили в десяти тривиальных и нескольких нетривиальных местах, а потом просто

    кстати, вот тривиальнейшее место - это нормальный nat/conntrack для gre туннелей.
    Нет, никогда не работал, и не мог - и в код лучше даже вообще не смотрите, это п-ц.

     
  • 2.17, sabitov (ok), 10:15, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Угу, я использую за ради поиграться на парочке машин. Количество косяков и граблей зашкаливает. 092 еще не пробовал ничего не скажу, но 07-091 -- те ещё наборы для нескучных развлечений.
     
  • 2.22, AlexYeCu_not_logged (?), 11:48, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Кто то им реально пользуется?

    В последнем debian он, вроде как, дефолтный. Правда там есть пока возможность старые правила с iptable-овским синтаксисом использовать.

     
     
  • 3.28, пох. (?), 16:53, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    "если бы еще и работали".

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

     
  • 2.30, Аноним (30), 19:04, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Я пользуюсь, благодаря новым возможностям nftables получилось оптимизировать правила и снизить нагрузку на процессор в 2 раза по сравнению с iptables.
     
     
  • 3.34, Анонимный селебрити (?), 23:17, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ничеси,какой суксесс стори? Детали и бенчи будут?
     

  • 1.11, Аноним (10), 09:37, 20/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В выражениях теперь допустимо указание сетевых префиксов и диапазонов адресов:

    Этого не умел? Так теперь чтобы данный функционал появился в стабильных дистрибутивах минимум года три надо будет ждать.

     
     
  • 2.14, пох. (?), 09:53, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    это нынче такой модный подход - объявить уже почти совсем окончательно готовым, предыдущее работающее решение поломать и выкинуть, а потом доделывать базовые тривиальные вещи, патамушта альтернативно-одаренному разработчику они вообще в голову не приходили - там смузи бродит.

     

  • 1.15, лютый жабист__ (?), 09:54, 20/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    1:0 Девопусы vs сисадмины

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

     
     
  • 2.16, пох. (?), 10:06, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > девопусы iptables не знали

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

    Кстати, у него, кажется, возникли какие-то сложности с nft - официальной поддержки по сей день нет, только кривые васян-скрипты.
    Впрочем, через враппер, наверное, кое-как работает.

    > а админам опять страдать.

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

     
     
  • 3.24, PnDx (ok), 13:16, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Файервол. На гипервизоре. Ох.
    * Если оно пилится под аренду "по виртуалке на рыло", вмварь весь профит съест. И вообще непонятно как фронтэнд отдавать. RHEV тогда уж.
    * Если арендаторы "внутренние", 802.1q vlan'ы наружу и там на нормальном оборудовании расписывать.
    ** Если в проекте нет денег, там и трафик вряд ли есть. До ≈200kpps можно непринуждённо таскать через виртуальный "маршрутизатор". Цена вопроса — в пределах 4xCPU, включая NAT. Появятся деньги — меньше проблем вывести маршрутизацию наружу.
     
     
  • 4.27, пох. (?), 16:51, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Файервол. На гипервизоре.

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

    (нет, файрвол не защищает виртуалки, они у вмвари вообще в физически отдельной сети будут, если все делать по инструкции, а не как подешевле-попроще)

    > Если оно пилится под аренду "по виртуалке на рыло", вмварь весь профит съест.

    расскажи это вооон тем ребятам: https://www.arubacloud.com/ -  а то мне они не верят.
    (смотрю, уже не скромное .it, а вполне себе com? хехехе - видать не все вмварь съела)

    > И вообще непонятно как фронтэнд отдавать.

    ну вот эти - справились.

     
     
  • 5.33, Мертвые_опята (?), 21:23, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > смотрю, уже не скромное .it, а вполне себе com

    У них оба адреса были изначально. Кстати, от твари они постепенно уходят, мне на одной из виртуалок в IT1 предложили нажать кнопку для миграции на KVM, прислали письмо, что начали миграцию и если я хочу, то могу нажать кнопочку, что бы встать в очередь на миграцию(а если не хочу то могу пока сидеть внутри твари)

     
     
  • 6.37, пох. (?), 10:24, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    изначально на .com не перенаправляло. Пацаны явно растут, и уже поняли, что .it - плохая марка за пределами родной Италии.

    > Кстати, от твари они постепенно уходят, мне на одной из виртуалок в IT1 предложили нажать кнопку

    мне пока ничего не предлагают, может, я их меньше затрахал? ;-)
    При том что это пресловутые одноевровые виртуалки, для меня в общем загадка, каково экономическое оправдание этого бизнеса.

    Деньги мафии отмывать, разьве что?

     

  • 1.26, mumu (ok), 16:39, 20/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Возможность проверки номера порта из заголовка пакета транспортного уровня независимо от типа протокола 4 уровня

    Расскажите как это? В каких случаях использовать? Звучит интересно, но пока не очень понятно.

     
     
  • 2.29, sabitov (ok), 18:56, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Например, для работы современного DNS надо отрывать и 53udp и 53tcp. Раньше тебе надо было 2 правила для этого. Сейчас -- одно.

    Правда жизни состоит в том, что это можно было и раньше решить одним правилом в iptables + ipset.

     
     
  • 3.31, Igor (??), 20:47, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Правда жизни состоит в том, что это можно было и раньше решить одним правилом в iptables + ipset

    А можно пожалуйста пример как выглядит такое правило?

     
     
  • 4.32, Igor (??), 21:04, 20/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    На ручнике что то я сегодня, вот же оно это правило
    > iptables -A INPUT -m set --match-set dropips src -j DROP

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

     
  • 4.35, evilman (?), 09:47, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ipset create allowed_in bitmap:port range 0-10240 counters
    ipset add allowed_in 53
    iptables -A INPUT -m conntrack --ctstate NEW -m set --match-set allowed_in -j ACCEPT
     
     
  • 5.41, Аноним (41), 15:27, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А то же самое одновременно для IPv4 и IPv6?
     
     
  • 6.42, evilman (?), 20:23, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Одним правилом через netfilter невозможно сделать. Нужно одно правило в iptables, а второе - в ip6tables. Теоретически можно извернуться через ingress queue, классификатором ipset и tc action. Но зачем?
     
     
  • 7.43, Аноним (30), 21:58, 22/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Simplified dual stack IPv4/IPv6 administration, through the new inet family which allows you to register base chains that see both IPv4 and IPv6 traffic. Thus, you don't need to rely on scripts to duplicate your ruleset anymore.

    https://wiki.nftables.org/wiki-nftables/index.php/Main_differences_with_iptabl

     
  • 3.36, mumu (ok), 10:18, 21/08/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Спасибо. Вспомнил, что действительно по два правила раньше писал для tcp и udp. RDP сюда же или openvpn, например.
     

  • 1.44, Аноним (44), 13:34, 23/08/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так что там с заменой ipset? Будет не?
     
     
  • 2.45, Аноним (41), 14:59, 23/08/2019 [^] [^^] [^^^] [ответить]  
  • +/
    https://wiki.nftables.org/wiki-nftables/index.php/Sets
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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