LINUX.ORG.RU

Взаимодействие с libfwbuilder

 , , , ,


0

2

Всем привет.

В связи со спецификой моей работы требуется использовать Firewall Builder. Автор неактивен года так с 2015-го. Я решил вдохнуть немного жизни в проект, а именно реализовать компилятор правил в формат nftables используя библиотеку libfwbuilder из состава программы.

План такой:
1) Собрать проект.
Уже оказалось проблемой. На GitHub два репозитория от одного автора. Пришлось скачать оба и сделать git diff, чтобы понять какой более актуальный. С компиляцией, в связи с обновлением gcc тоже вылезла проблема, так как куча Makefile использует -isystem /usr/include (регрессия: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129 ).
2) Изучить работу libfwbuilder и fwcompiler.
Шестистраничного architecture_overview.pdf явно недостаточно. Надо написать документацию. С форматом документации не определился. Предложения приветствуются.
3) Написать консольную утилиту для формирования правил.
Это, собственно, будет финиш всей работы. Для меня актуален выбор ЯП, так как это говно надо будет ещё и поддерживать потом. Смотрю в сторону Rust, Mono (C#) и Go (Go особенно не доверяю, ибо гуглоподелие, но всё же.). Предложения по выбору ЯП приветствуются.

Задача максимум (спецолимпиадные):
4) Перевести систему с Git на Fossil.
Так-то безразлично, но Fossil меня вдохновляет. Особенно однофайловостью репозитория и встроенной Wiki.
5) Избавить Firewall Builder от automake в пользу CMake.
Вообще, я довольно плохой программист и в теме сильно не ориентируюсь. Есть какие-нибудь свежие системы сборки кода для нормальных людей, а не для инопланетян?
6) Избавить Firewall Builder от GUI.
Qt это хорошо, но в силу того, что народ активно пилит Wayland и не очень активно Mir, а Qt больно часто обновляется - я бы предпочёл реализовать весь интерфейс на какой-нибудь curses, чтобы было стабильно.

Собственно, главный вопрос:
Нужен кто-то, кто уже сталкивался с libfwbuilder и libfwcompiler, чтобы ткнуть меня в примеры кода или сколь либо куцую документацию. Буду очень признателен любой помощи, так как для моей квалификации проект будет достаточно трудный.



Последнее исправление: NIR (всего исправлений: 1)

Ответ на: комментарий от sin_a

Привет! Вообще, я отвечал на твоё письмо в начале 2016-го. Так-то было тяжело найти доступ в Интернет и к телефону там, где я оказался. :)

NIR
() автор топика
Ответ на: комментарий от xaizek

Ну, последнее изменение же не означает, что это изменение к лучшему. Потому и пришлось смотреть diff.

NIR
() автор топика
Ответ на: комментарий от NIR

Опаньки.., наверно оно в спам упало и я не заглядывал туда в то время. Ну да вернулся и хорошо :)

sin_a ★★★★★
()
Ответ на: комментарий от anonymous

Да ладно. Там всего лишь надо разобрать дерево иксэмеля в объекты и сериализовать объекты в конфиги nftables. Моя проблема в том, что я не хочу велосипедить свой парсер, а предпочитаю использовать готовый, но с ним надо научиться работать.

NIR
() автор топика

Теперь это мой бложик по проекту

Короче, потихоньку пишу парсер FWObjectDatabase (формат XML-файла Firewall Builder) на Go. Так как я не осилил генераторы (или фабрики, как их там принято называть), то автоматически конструировать структуры данных я не могу, потому переписываю весь DTD в качестве структур Go руками. Если кто знает как сделать - буду признателен любой информации.

На данный момент можно прочитать описанную в коде часть дерева FWObjectDatabase и выдернуть данные (можно тупо кусок XML) относящиеся к конкретному файерволу. Получение объектов по ссылкам пока не работает и я ещё не придумал как это сделать. Нужен словарь/hashmap, про которые я ещё не читал.

Алсо линковаться с libfwbuilder и libfwcompiler не получилось ни из Rust, ни из Go ибо C++. Говно. Писать обвязки C++ либы на C я не хочу. Современный C/C++ имеет нездоровые языковые конструкции и библиотечные функции, которые жизнь только усложняют. В Rust, кроме прочего, нет вменяемой библиотеки для разбора XML. Работать же с C#/Mono для решения задачи мне показалось слишком просто. Ах, да. Go предполагает middleware hell, прям как у NPM. Красота. Похоже, что патриарха типа того же Гвидо (Ван Россума), который бы принял пакет в апстрим, у Go нет. Лучше бы они перенимали у Python хорошие вещи.

BTW, Go оставляет странное впечатление. Подключить локально расположенный пакет - целая проблема. Точки с запятой формально можно не использовать. Публичные методы/атрибуты должны начинаться с большой буквы. Единственный вариант loop - через for. Я, конечно, всё понимаю, но складывается впечатление, что это разработка для слабоумных. Попытка упростить до предела то, что не стоит упрощать. Ещё на Python очень похоже. Там тоже заявлено, что для всех задач есть один конкретный вариант реализации, а в итоге в язык чего только не напихали. Как ху?в в порнозвезду.

В любом случае, задача разбора XML будет тем или иным образом решена. Дальше хочу по примеру самого Firewall Builder реализовать отдельно драйвер и компилятор, но пока нет идей, как оно должно быть на практике.

Всех заинтересованных приглашаю проанализировать и раскритиковать проект, и, конечно, ОПа.

NIR
() автор топика

Раз уж взялся разбирать FWObjectDatabase, то возникла мысль попутно продумать/написать генератор правил для firewalld.

Вопрос: нужно или нет?

NIR
() автор топика
Ответ на: комментарий от anonymous

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

Iron_Bug ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.