Опубликован выпуск пакетного фильтра nftables 0.9.5, развивающегося в качестве замены iptables, ip6table, arptables и ebtables за счёт унификации интерфейсов фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов. В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. Необходимые для работы выпуска nftables 0.9.5 изменения включены в состав ядра Linux 5.7...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=53106
>> Необходимые для работы выпуска nftables 0.9.5 изменения включены в состав ядра Linux 5.7.А на лтс 5.4 не будет работать новая версия?
ну и извращения. Чтобы прописать простое правило мне еще и кодить надо. Вопрос нафига?
ну дык, никто не запрещает сделать конвертилку из команд иптейблес в байт-код нфт и ок.
тут просто возможностей больше.
Будет работать даже на 3.13, но только в том объеме, который реализован в ядре. Новые функции будут просто возвращать ошибку.
Как посмотреть текущие правила в читаемом виде?
nft list ruleset
Обязательно под рутом.
nft list ruleset
Поддерживаю вопрос с ударением на слове "читаемом" :) Текущий вывод nft list ruleset трудно назвать читаемым...вот, примерно как JSON - вывод больше для машины, чем для человека.Предположим, что разные обвязки (тот же firewalld) успешно абстрагируют "пользователя" от необходимости читать этот вывод и прыгать между ссылками на цепочки беря на себя управление...но, при этом они же не гарантируют соответствия между своим ожидаемым (сохраненные в конфигурации) состоянием и текущими правилами (поскольку последние, как прежде в iptables и т.д. могли быть модифицированы напрямую в обход обвязки).
Итого, остаётся только ждать появления или способствовать появлению 100500+ разных обвязок которые будут читать, парсить и делать вывод nft понятным для людей (структурированным и последовательным).
Ага всетаки аналога iptables -L не предполагается. Да чтож такое то
Насчёт JSON...любопытства ради добавил к команде флаг -j (Format output in JSON): лучше не стало, так что после такого, текущий вывод уже начинает казаться читабельным ^_^Сам факт наличия флага для вывода информации в JSON одновременно и радует (значит при желании можно распарсить и преобразовать в нечто субъективно более адекватное текущему выводу), но и (субъективно) тонко намекает на две вещи:
- раз оба варианта вывода информации плохо предназначены для чтения людьми, то по задумке, люди их в таком виде каждый день читать и не должны.
- текущий вывод - предел читабельности который заложен (и не исключено, что так и будет).P.S. После того, как посмотрел на вывод в формате JSON стал замечать за собой желание перейти на сторону (и начать защищать) авторов формата вывода правил в том виде как он есть...25-ый кадр во время листинга правил поймал, не иначе.
P.P.S. Главное, чтобы от долгого смотрения в правила nft они не начали смотреть в вас.
> Поддерживаю вопрос с ударением на слове "читаемом" :) Текущий вывод nft list ruleset трудно назвать читаемым...вот, примерно как JSON - вывод больше для машины, чем для человека.Тем не менее, уже четверть века, по мнению большинства, эталоном читаемых правил фаервола остаётся pf из OpenBSD.
block in quick on egress inet from { 127.0.0.0/8, 192.168.0.0/16, \
172.16.0.0/12, 10.0.0.0/8 } to any
block out quick on egress inet from any to { 127.0.0.0/8, \
192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }Что-то я не улавливаю тонкой разницы, которая делает синтаксис pf идеальным, а синтаксис nftables — нечитаемым.
Большинства пользующихся BSD?
> Что-то я не улавливаю тонкой разницыВ вашем примере нет ссылок, зачем вы его показали?
> эталоном читаемых правил фаерволаПока туда не завезут кастомных цепочек, набор правил хотя бы в 30-40 правил неизбежно будет превращаться в нечитаемую лапшу. skipto - костыль, а по другому оно не умеет.
> JSON - вывод больше для машины, чем для человека.С дуба рухнул? Для машин это ни в одном глазу неудобно, это для двуногих перекуривших JS.
Осталось yaml впилить
и с этим дерьмом теперь придется жить... (
всё, как в Win.. э-эмм.. простите, а оно уже умеет в разбор трафика на уровне приложений, как, например, в Windows-firewall?
По-моему еще во времена iptables выкинули. Рекомендутся uid/gid, возможно cgroup.
ну-да, ну-да.. "ненужно"©™.. ога.. особенно на выделенном серваке контроль исходящего трафа по приложениям - совершенно лишняя шняга..
"даже не знаю, что сказать.. всё отлично.. всё просто отлично.."©(Феечка)
Для _серверных_ приложений (т.е. демонов) — уже давно есть https://www.freedesktop.org/software/systemd/man/systemd.res...Б─╕Попробуйте ещё раз.
Замечательный движок опеннета побил якорь в ссылке (в предпросмотре было нормально). Поэтому специально для труЪ oдминов — смотреть описание опций IPAddressAllow и IPAddressDeny.
Т.е. я правильно понял, что всем, кто захочет что-то позакрывать для, допустим, MySQL, придётся редактировать его unit-файл (который потом перепишет установщик пакетов)?
Садись, два и линейкой по рукам. За что линейкой? За то, что пошёл править дистрибные файлы, которые притащил пакет.
> Т.е. я правильно понял, что всем, кто захочет что-то позакрывать для, допустим, MySQL, придётся редактировать его unit-файлПравильно. systemctl edit mysql.service
> (который потом перепишет установщик пакетов)?
Неправильно. Не надо мыслить категориями veteran unix admins (простреливаем себе ногу, страдаем, гордимся, потому что это KISS).
Управляемая пакетным менеджером конфигурация находится в /usr/lib/systemd, управляемая администратором — в /etc/systemd. Конфиги админа имеют приоритет над дистрибутивными.
Мало того, что простреливаем свою ногу, так ещё и кладём мину замедленного действия под ноги тем, кто в один прекрасный момент столкнется с тем, что старый подход к использованию новых инструментов привёл к неожиданному результату :)
Извините, не сдержался, хочу набросить!> Неправильно. Не надо мыслить категориями veteran unix admins (простреливаем себе ногу, страдаем, гордимся, потому что это KISS).
Я например знаю что и куда правильно писать. Но честно говоря не ковырял вопрос а что будет, если я вот такой вот умный и знающий сделал правильный юнит в правильном месте. А потом прилетела новая версия пакета, и в ней старые параметры что в моём юните записаны не поддерживаются уже (не говорите что такого не бывает). При этом она обновила дефолтный конфиг в /usr/... а мой молча оставила. И конечно же у меня от этого всё сломается, но узнаю я об этом только в момент когда оно стало не работать, а не в момент когда стал устанавливать пакет и он мне ругнулся что "вижу правки файла, что сделать - оставить ваши, оставить мейнтенера вариант, или смержить?"
Эта ситуация как-нибудь обрабатывается, или тут просто новый способ отстрелить себе ногу?
> Управляемая пакетным менеджером конфигурация находится в /usr/lib/systemd, управляемая администратором — в /etc/systemd.
А вот это, вот это за что, за какие грехи? Я давно это знаю, но каждый раз удивляюсь - почему вдруг системные дефолты свалились в */usr/... (от user, т.е. пользовательское), а как раз пользовательские правки вдруг разместились в /etc? Ещё раз повторюсь, что я знаю всё это, но мне интересно как пришли именно к такому способу мышления? Такое ощущение, что от ненависти к старым порядкам, в которых подразумевалось что всё наоборот. Типа до основания, а затем!..
PS К сожалению, частенько история с системдой выглядит не как способ избавиться от старых костылей, а как попытки заменить старые на новые.
>*/usr/... (от user, т.е. пользовательское)Лол. Это "пользовательское" в юниксе случайно образовалось, там были хомяки, а потом у олдфагов закончился диск, на котором корень лежал. Барахлишко из корня частично перетащили в usr, да так и оставили. Так что на самом деле это ничего не значит.
> Лол. Это "пользовательское" в юниксе случайно образовалось, там были хомяки, а потом
> у олдфагов закончился диск, на котором корень лежал. Барахлишко из корня
> частично перетащили в usr, да так и оставили. Так что на
> самом деле это ничего не значит.Да в общем-то в юниксах, и не только в них, много чего случайно образовалось. И сложилось сперва в традицию, а потом в стандарт. creat(), например. Что, давайте исправим наконец уже эту опечатку и переименуем наконец в create()!
И тут приходят такие чуваки, у которых "на самом деле это ничего не значит" и делают всё в стиле "художник так видит". NIH синдром в чистом виде, короче говоря, про это уже много писано.
Но это всё действительно малозначащие детали, говорящие в основном об уважении авторов к остальным, нежели о качестве софта. Мне больше интересен ответ на конкретный технический вопрос.
PS Кстати о традициях, вы если посмотрите, то обнаружите что и законы в человеческих обществах похожим образом делаются. Давайте тоже решим что они ничего не значат :)
>И тут приходят такие чуваки, у которых "на самом деле это ничего не значит" и делают всё в стиле "художник так видит".Да. А вы думали, только дедам можно что-то менять? Не было принято, так щас будет. Вжух и дефолтные конфиги лежат в usr, новый стандарт.
>NIH синдром в чистом виде, короче говоря, про это уже много писано.
Это не NIH, а решение проблемы, которая до этого была проигнорирована.
>Но это всё действительно малозначащие детали, говорящие в основном об уважении авторов к остальным, нежели о качестве софта. Мне больше интересен ответ на конкретный технический вопрос.
Технически если у вас нормальный дистрибутив, вам не ломают совместимость конфигов. Если у вас Арч, вы знали на что идете.
>PS Кстати о традициях, вы если посмотрите, то обнаружите что и законы в человеческих обществах похожим образом делаются. Давайте тоже решим что они ничего не значат :)
Вы там может по уложениям 17 века живёте, а у нас законы меняют.
> Да. А вы думали, только дедам можно что-то менять?Мы ничего не думали. Мы видим что деды вполне нормально для своих времён сделали, а не сломали чужое.
> Это не NIH, а решение проблемы, которая до этого была проигнорирована.
Да не, это он самый. Или объясните мне что мешало решить проблему не ломая стандартов? Есть техническое обоснование? Интересно будет ознакомиться.
> Технически если у вас нормальный дистрибутив, вам не ломают совместимость конфигов.
А слабо не юлить, а просто взять и ответить что будет в случае описанном мною выше?
> Вы там может по уложениям 17 века живёте, а у нас законы меняют.
Где там, кто "вы", где у вас? Столь радикальным образом законы меняются только в ситуации "всё до основания, а затем". Но вообще-то это тогда иначе называется.
Кто в лес, кто по дрова. Уже в своих ногах запутались. Лучше на конкретный технический вопрос ответьте.
На сколько я помню, usr - Unix System Resources
> На сколько я помню, usr - Unix System ResourcesПо воспоминаниями из книжек - таки User, а не Unix. Педивикия говорит то же самое даже ссылаясь сюда https://www.pathname.com/fhs/pub/fhs-2.3.html - правда тут дословно этого нет, хотя по логике вещей это именно user. Т.к. там лежат как раз не-системные утилиты.
Вообще, функционал интересный, жаль только, что появился он сравнительно не давно и, например, в RHEL/CentOS 7 (с которыми ещё минимум пару лет работать) этот патч так и не портировали.
> контроль исходящего трафа по приложениям - совершенно лишняя шняга..А как вообще можно представить фильтр по "приложению"? Номер pid указать, или argv[0] анализировать? А если будет fork?
Если процесс нужно изолировать - запусти его от специального пользователя (или специальной группы) и изолируй сколько влезет. У меня, например, есть группа ipblacklist, для которой никакого сетевого обмена быть не может.
Можно наоборот (и сейчас это даже лучше!) - сделать группы localnet/globalnet, для которых разрешен сетевой обмен.Если лень с uid/gid ковыряться - бери cgroups (кажется там и в рантайме можно туда/сюда процессы перемещать, соответственно фильтр можно вообще в рантайме изменить).
На уровне приложения-то и нужно больше всего. В на век телеметрии...
Ничего ничего зайдеш под безопасным рутом и правила то накарябаеш.
> На уровне приложения-то и нужно больше всего. В на век телеметрии...Как правило, основные отправители телеметрии — это браузеры.
Будете им запрещать доступ в интернет?
Разумеется.firejail + squid с white-листами
И некоторое количество возни с ssl_bump, если нужна полноценная L7-фильтрация.Рекламодатели, то есть, простите, разработчики браузеров, позаботились о том, чтобы отфильтровать их по дороге было максимально трудно.
Ну, можно с peek+splice жить, по крайней мере по хостам резать доступ — уже хорошо. Настраивается легко.
> Будете им запрещать доступ в интернет?uMatrix это до некоторой степени умеет, приколитесь?!
Боюсь, что со встроенной в браузер телеметрией он ничего поделать не сможет.
> Боюсь, что со встроенной в браузер телеметрией он ничего поделать не сможет.Ungoogled chromium же
А в Firefox'е почти всё отключается в конфиге (кроме firefox.settings.services.mozilla — но либо пропатчить и перекомпилять, либо hosts/squid/файрволом закрыть).
> Ungoogled chromium жеЧто-то после историй с Brave, сборочкам от Васи верить не очень хочется.
Это можно сделать сделать с помощью дополнительных модулей - Dtrace, Bpftrace, или написать самому модуль ядра для линукс на С, обрабатывающих пакеты от приложений и записывающий их pid, или если ленивый то есть готовое решение - opensnitchd
iptables сто лет умеет в фильтры по pid, например...
Сто лет НЕ умеет, если быть точным.
С тех, как в Linux появилась поддержка SMP.
-j NFQUEUE
> и с этим дерьмом теперь придется жить... (Всё повторяется. 20+ лет назад то же самое было — уютный тёплый ламповый ipfwadm заменили на ipchains (вместе с переписанным с нуля IP стеком), сколько воя было.
Большинство комментаторов, наверное, даже в 1 класс ещё тогда не ходило.
С чего это тоже самое? Абсолютно разные ситуации.
аналог netmap так и не завезли?
Когда уже в линукс портируют нормальный файрвол... Тео, дай свет безумцам!
firewall-config
Нормальный это про Agnitum Outpost
ого, а он еще жив?
это не отменяет его качества
Да вообще-то глючная штука.
> Когда уже в линукс портируют нормальный файрвол... Тео, дай свет безумцам!Выше на nftables ругаются именно из-за pf-подобного синтаксиса.
Получается, pf уже не катит в качестве "нормального файрвола"?
> pf-подобного синтаксисаГде вы там его увидели? Или вам раз фигурные скобки есть — значит pf?
Проще надо быть. Фигурные скобки есть — значит, JSON.
Просто у pf и nftables JSON не вполне корректный.
Синтаксис вроде всем хорош, но выглядит удолбищно. Как-то надо это всё упрощать. Может быть действительно JSON, как некоторые предлагают.
То есть допустим неip daddr @y и отдельно set
а что-то вроде
"z":{"filter":"daddr","proto":"ip","daddr":["192.168.10.35", "192.168.10.101", "192.168.10.135"]}
для простых правил
кому надо set, можно записать как
"y":{"set":"ip", "ip":["192.168.10.35", "192.168.10.101", "192.168.10.135"]}
"z":{"filter":"daddr","proto":"ip","daddr":"set:y"}короче трансляторы под это дело лепить и лепить ещё
Годная новость! https://github.com/devkid/nftables-systemd вообще сказка!
Только смысл в этой новизне? Нфт также работает через тот же нетфильтр и все, единственный плюс - объединение айпи протоколов - для всех протоколов сразу правила можно писать и всё, а так ничего принципиально нового, в нфт нельзя сделать ничего что нельзя сделать в иптаблес, другой вариант написания правил и все, это как один и тот же документ набить в разных редакторах, дело только в удобство
Плюс в том, что iptables — кривая хрень с кучей легаси, которое пришло время переписать. Смотри: https://youtu.be/CCHV-W4Oh04?t=187
Вот когда в модерн/кул/тремендоус/эмайзинг инструменте будет совпадать документация с актуальщиной, то можно будет подумать, может ли он заменить "легаси"...Один из примеров:
man nft:
"export Print the ruleset in machine readable format. The mandatory format parameter may be either xml or json."Пробуем: nft export json
результат:
Error: this output type is not supported
export json
^^^^^^^^^^^^Но почему-то не документированный ключ -j вполне себе понимает жсон
nft -j list ruleset
> Вот когда в модерн/кул/тремендоус/эмайзинг инструменте будет совпадать документация
> с актуальщиной, то можно будет подумать, может ли он заменить "легаси"...iptables не умел json
Да и вообще, кому нужен json этот адовый?
> man nft:
> "export Print the ruleset in machine readable format. The mandatory
> format parameter may be either xml or json."Это откуда такое? меня в мане про '-j' написано
> Но почему-то не документированный ключ -j вполне себе понимает жсон
> nft -j list rulesetТак работает, да. В man'е тоже написано
>Да и вообще, кому нужен json этот адовый?Тем кто понимает зачем он нужен :) (репрезентация/сравнение/мониторинг на фронт эндах в больших конторах)
>Это откуда такое? меня в мане про '-j' написано
Debian 10 (Buster) - latest release
>Так работает, да. В man'е тоже написано
Может быть, но только не в самом популярмом линух дистрибутиве ака Debian
> Тем кто понимает зачем он нужен :)Гы, ну речь не про JSON вообще — а про json вывод nftables. Зачем?
> но только не в самом популярмом линух дистрибутиве ака Debian
Ну у меня тоже Debian.
> Гы, ну речь не про JSON вообще — а про json вывод
> nftables. Зачем?Я ж уже сказал - затем что удобно парсить на фронэнде/мониторинге, т.к. формат поддерживается практически везде
>> но только не в самом популярмом линух дистрибутиве ака Debian
> Ну у меня тоже Debian.Ну тогда сравните на предмет опции -j
https://manpages.debian.org/testing/nftables/nft.8.en.htmlс
man nft
сходится?
Даже интересно стало, что вы там мониторите через json в фаерволе?
> Даже интересно стало, что вы там мониторите через json в фаерволе?Сходство рулсетов в кластере
>> Даже интересно стало, что вы там мониторите через json в фаерволе?
> Сходство рулсетов в кластереЧто-то велосипедом попахивает. В кластере по определению такие вещи должны быть одинаковыми на всех узлах. Раскидываем один и тот же конфиг Ansiblt'ом (например) и всё.
> Что-то велосипедом попахивает.Ну, вот на этом, пожалуй и закончим, сорри, совсем забыл что нахожусь на ресурсе среди самых, самых умных админов которые обладают единственно правильным решениями и которые самые ясновидящие на планете...
Смузи допей сначала, потом оркестраторы для администрирования пакет-фильтров прикручивай.Такие вещи оркестратором не делаются, а любой zero-touch делается последовательно по нодам.
А у тебя борода отклеилась и свитер без оленей.Такие вещи делаются так, как адекватно для конкретной ситуации. Не вижу никакой проблемы раскатать ансиблом файрвол. Не нравится анисбл — ок, chef или даже CFEngine можно использовать.
К сожалению, раскидать правила тем же Ansible не равно убедиться в том, что правила совпадают: к сожалению (для тех, кто хочет контролировать этот момент) и счастью (тех, кто рад тому, что сторонний софт делает часть "грязной" работы) некоторые программные продукты могут самостоятельно модифицировать правила фаервола.Наглядный пример такого софта: Docker, который не первый год благополучно доставляет этим неудобство тем, кто хочет быть уверен в том, что в мир открыты только ожидаемые порты...и столь же благополучно помогает выставлять в мир что попало тем, кто просто хочет увидеть результат работы своего кода в действии.
Пример выше может и не самый удачный, зато наглядный.
Ну, а ещё, будем реалистами: кроме софта, возможность управлять правилами, как правило есть ещё у операторов которые далеко не всегда горят желанием отразить сделанные на лету изменения хотя бы в локальной версии конфига, не то, что где-нибудь ещё (в коде того же Ansible).
Иначе говоря, проверять правила фаервола на соответствие ожидаемому состоянию - правильно, тем более в кластерах и, тем более, если на этих правилах многое держится.
> некоторые программные продукты могут самостоятельно модифицировать правила фаервола.Ну так не надо им этого разрешать.
> Наглядный пример такого софта: Docker,
apt-get purge -y docker
Если надо отдельные контейнеры, то берём podman. Если это таки кластер, то там, видимо куб крутится?
> Пример выше может и не самый удачный, зато наглядный.
Докер, возможно, имеет какой-то смысл на девелоперской машинке, но не более того.
> есть ещё у операторов которые далеко не всегда горят желанием отразить
> сделанные на лету изменения хотя бы в локальной версии конфига, неЗаставить. Иначе рано или поздно будет большая боль.
> Иначе говоря, проверять правила фаервола на соответствие ожидаемому состоянию - правильно,
Я бы тогда уж не проверял, а просто жёстко перезаписывал (puppet/chef/cfenfine на выбор). Заодно и те «операторы» переучатся ручками лезть.
> удобно парсить на фронэнде/мониторингеУ вас уже есть готовое решение для парсинга? Или может быть, когда нибудь?
> Ну тогда сравните на предмет опции
Для Debian есть бэкпорты, там всё это есть (в 0.9.3 есть '-j'). Зачем страдать?
# apt-cache policy nftables
nftables:
Installed: 0.9.3-2~bpo10+1
Candidate: 0.9.3-2~bpo10+1
Version table:
*** 0.9.3-2~bpo10+1 500
500 http://ftp.ru.debian.org/debian buster-backports/main amd64 Packages
100 /var/lib/dpkg/status
0.9.0-2 500
500 http://ftp.ru.debian.org/debian buster/main amd64 Packages
А да, чуть не забыл, предложенный "новый" синтакс
nft export vm json
выдает такое ЖСОН чудо : {"nftables":[и усе, ничего больше...
Минусовальщики, обьясните плиз, в чем мой то криминал?
"Ты виноват лишь тем что хочется им кушать" //троллям каким-то.
Ты посмел сомневатся в великих людях придумавших и написавших nft!
> напоминающей BPF (Berkeley Packet Filters)Местами очень-очень напоминающий:
https://minnie.tuhs.org/cgi-bin/utree.pl?file=Net2/usr/src/s...
* This code is derived from the Stanford/CMU enet packet filter,
* (net/enet.c) distributed as part of 4.3BSD, and code contributed
* to Berkeley by Steven McCanne of Lawrence Berkeley Laboratory.
@(#)bpf.h 7.1 (Berkeley) 5/7/91 *
* @(#) $Header: bpf.h,v 1.20 91/04/24 22:06:24 mccanne Locked $ (LBL)/* ld/ldx fields */
#define BPF_SIZE(code) ((code) & 0x18)
#define BPF_W 0x00
#define BPF_H 0x08
#define BPF_B 0x10
#define BPF_MODE(code) ((code) & 0xe0)
#define BPF_IMM 0x00
#define BPF_ABS 0x20
#define BPF_IND 0x40
#define BPF_MEM 0x60
#define BPF_LEN 0x80
#define BPF_MSH 0xa0/* alu/jmp fields */
#define BPF_OP(code) ((code) & 0xf0)
#define BPF_ADD 0x00
#define BPF_SUB 0x10
#define BPF_MUL 0x20
#define BPF_DIV 0x30
#define BPF_OR 0x40
#define BPF_AND 0x50
#define BPF_LSH 0x60
#define BPF_RSH 0x70
#define BPF_NEG 0x80
#define BPF_JA 0x00
#define BPF_JEQ 0x10
#define BPF_JGT 0x20
#define BPF_JGE 0x30
#define BPF_JSET 0x40
#define BPF_SRC(code) ((code) & 0x08)
#define BPF_K 0x00
#define BPF_X 0x08
https://github.com/torvalds/linux/blob/master/include/uapi/l...
/* ld/ldx fields */
#define BPF_SIZE(code) ((code) & 0x18)
#define BPF_W 0x00 /* 32-bit */
#define BPF_H 0x08 /* 16-bit */
#define BPF_B 0x10 /* 8-bit */
/* eBPF BPF_DW 0x18 64-bit */
#define BPF_MODE(code) ((code) & 0xe0)
#define BPF_IMM 0x00
#define BPF_ABS 0x20
#define BPF_IND 0x40
#define BPF_MEM 0x60
#define BPF_LEN 0x80
#define BPF_MSH 0xa0
/* alu/jmp fields */
#define BPF_OP(code) ((code) & 0xf0)
#define BPF_ADD 0x00
#define BPF_SUB 0x10
#define BPF_MUL 0x20
#define BPF_DIV 0x30
#define BPF_OR 0x40
#define BPF_AND 0x50
#define BPF_LSH 0x60
#define BPF_RSH 0x70
#define BPF_NEG 0x80
#define BPF_MOD 0x90
#define BPF_XOR 0xa0
#define BPF_JA 0x00
#define BPF_JEQ 0x10
#define BPF_JGT 0x20
#define BPF_JGE 0x30
#define BPF_JSET 0x40
#define BPF_SRC(code) ((code) & 0x08)
#define BPF_K 0x00
#define BPF_X 0x08
Удивительнейшие совпадения самих опкодов, как и наименования, порядка определения, форматирования и даже комментариев. Если бы не отсутствующий в версии Линукс заголовок:
* This code is derived from the Stanford/CMU enet packet filter,
* (net/enet.c) distributed as part of 4.3BSD, and code contributed
можно было бы черте что подумать, но к счастью ... )))
Ну, чтобы развеять подозрения, вы можете подать в суд на "мерзких линукcятников" за кражу интеллектуальной собственности...
Только, боюсь, вердикт суда вам не понравится.
> от аннонн (?), 07-Июн-20,О, узнаю старых знакомых бедолаг. Но ник у меня теперь зарегистрирован, так что придется вам обойтись без совсем уж детсадовских глупостей, увы ((
> Ну, чтобы развеять подозрения, вы можете подать в суд на "мерзких линукcятников" за кражу интеллектуальной собственности...
Ну, чтобы охладить очередной батхерт очередных гордых носителей маечки с пингвинчиком от одного упоминания "нечествой" ОС *BSD* – вы можете для начала пересказать мне наш диалог в вашей голове?
Где я там что-то говорил о "подозрениях", "мерзких линуксятниках" и "кражах"?
Я привел только два куска кода и высказал удивление таким вот совпадениям, не выдвигая никаких обвинений - вы же, похоже, уже заранее принялись оправдываться в стиле "да вы че, да мы, да никогда, да вообще не докажете, ха!"Или как обычно - когда опеннетному носителю маечки с пингвинчиком, за отсутствующим знанием матчасти, нечего возразить аргументативно, начинается очередной детский сад и цирк с понями? ))
> Только, боюсь, вердикт суда вам не понравится.
Только, боюсь, на результат в виде чьего-то проженного кресла - это уже никак не повлияет ))
А что есть "нечествой"? Это не черствой? Или не честной?
У меня только один вопрос к авторам nftables: почему нельзя было просто сделать синтаксис как в pf? Почему опять какая-то страшная срань, которую без мана и трех примеров прочитать невозможно? Почему некоторые правила должны заканчивать ';', а некоторые нет?
> У меня только один вопрос к авторам nftables: почему нельзя было просто
> сделать синтаксис как в pf? Почему опять какая-то страшная срань, которую
> без мана и трех примеров прочитать невозможно?Опять учиться, какая боль, да?
> Почему некоторые правила должны заканчивать ';', а некоторые нет?
Никакие правила там не надо заканчивать ';'
Это нужно только если два или более правила на одной строке.
Было бы чему учиться...
Когда есть возможность ставить ';' - ставь ';'!
- правило башника (и сишника, само собой)
Потому что поколение сменилось. Если раньше был K.I.S.S., то теперь одни понты вперед скиллов бегут.
Да, раньше и трава зеленее была.
Оболочка nft крайне неудобная кривая и баговпнная.