D-Bus API или библиотека C для управления firewalld - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над проектом, реализуя все на языке Си. В рамках проекта нам необходимо иметь возможность контролировать и настраивать firewalld, брандмауэр текущей системы.

  • firewalld реализован на Python и доступен интерфейс. Однако мы не хотим делать вызовы Python из C или наоборот.
  • Существуют инструменты командной строки для настройки firewalld (например, firewall-cmd), но мы также не хотим делать такие вызовы из C.

Я недавно начал работать над firewalld, я не очень разбираюсь в его внутренностях. Я читал, что он использует D-Bus, я также мало что знаю о D-Bus.

  • Существует библиотека C, разработанная Томасом Вернером: libfirewall. Однако с момента последнего коммита прошло более полутора лет, поэтому он не поддерживается. Кроме libfirewall, я не знаю никакого интерфейса firewalld в C.
    • Я дал libfirewall выстрел. При компиляции и запуске примеров у меня возникли некоторые проблемы, и мне все еще нужно решить их. Стоит ли продолжать с libfirewall? Должен ли я использовать это?
    • Есть ли какой-нибудь другой интерфейс, о котором я не знаю?
  • Возможно, наивный вопрос из-за непонимания D-Bus: Я подумал, может быть, с интерфейсом D-Bus я могу выдавать команды для firewalld. Это можно сделать? (Т.е. работает ли D-Bus именно так?) Можем ли мы написать программу, которая имитирует, скажем, firewall-cmd, и таким же образом взаимодействует с D-Bus и в конце позволяет нам управлять огненным миром?
    • Если это возможно, как это сделать и что использовать? libdbus и GDBus имеют относительно хорошую документацию, хотя libdbus требует значительных усилий. Они даже сказали «Если вы используете этот низкоуровневый API напрямую, вы подписываетесь на некоторую боль». в документации. В любом случае мне понадобятся примеры или любой текст, демонстрирующий их использование.

Как мне подойти к этой проблеме?

1 Ответ

0 голосов
/ 28 августа 2018

Да, вы можете подавать команды на firewalld через D-Bus. Я не проверял, но ожидаю, что firewall-cmd сам по себе реализован как клиент D-Bus.

API D-Bus тщательно документирован: https://firewalld.org/documentation/man-pages/firewalld.dbus.html. Документация должна дать вам приблизительное представление о том, что может быть достигнуто с помощью API. Вы можете попробовать отладчик D-Bus d-feet для взаимодействия с firewalld без кода.

GDBus - определенно самый простой способ использовать D-Bus от C, но он все еще не тривиален, а firewalld - довольно сложный API: его использование может потребовать некоторого опыта (полностью в зависимости от того, что вам нужно сделать).

...