[Из песочницы] Написание пакета для PFSense

В этой статье я постараюсь на простом примере показать создание собственного GUI пакета для pfSense. Предполагается, что читатель имеет опыт работы с pfSense, имеет некоторые знания в PHP.image

Маршрутизатор pfSense (на базе FreeBSD) используется многими сисадминами благодаря, в первую очередь, управлению настройками системы через WEB интерфейс. С многими настройками вполне по силам справиться даже начинающему администратору, что позволяет расширить область применения этого маршрутизатора. При этом, опытные коллеги могут в полной мере воспользоваться доступом к консоли для изучения и контроля работы системы.

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

И так, у Вас есть установленный и настроенный тестовый pfSense. Для начала нам понадобятся инструменты доступа к консоли и файлам pfSense по SSH. Так как я winuser, то и инструменты для работы буду использовать WinSCP + Putty.

Подключаемся с помощью WinSCP3 к pfSense и открываем каталог /usr/local/pkg. В этой папке хранятся файлы, относящиеся к GUI пакетам. Обычно это XML и INC файлы, включающие в себя описание конфигурации и PHP обработчики пакетов. Описание конфигурации GUI пакета размещено в XML файлах, и содержит в себе:

служебную информацию; шапку страницы WEB интерфейса; форму страницы WEB интерфейса; информацию о PHP функциях-обработчиках событий WEB интерфейса. Создаем два пустых файла mypkg.xml и mypkg.inc. Название mypkg является именем нашего пакета, и имя XML файла является ключевым для доступа к WEB интерфейсу пакета. Название inc файла может быть произвольным, и далее будет показан способ его подключения.

Формируем наш XML файл.Служебная информация содержит имя, заголовок, категорию, версию GUI пакета и список подключаемых INC файлов. В нашем случае подключаемый INC файл только один, должен быть указан полный путь к подключаемому файлу.

mypkg My First Package Test 0.1 /usr/local/pkg/mypkg.inc Шапка WEB интерфейса содержит описание GUI страниц в узле tabs, и выводится в области навигации. У нас будет только одна страница. Элемент text содержит имя пункта навигации в GUI. Элемент url содержит относительный путь доступа к странице нашего пакета.

My Package /pkg_edit.php? xml=mypkg.xml Форма WEB интерфейса описывает, какие элементы управления параметрами нашего пакета будут доступны пользователю. Для начала создадим одно единственное поле Enable с элементом checkbox

Enable enable Check this for enable package. checkbox Обработчики событий WEB интерфейса является завершающим участком XML файла, и описывает какие функции будут вызваны в тот или иной момент работы формы GUI. Представлено три часто используемых обработчика:

custom_php_command_before_form — вызывается перед отображением формы; custom_php_validation_command — вызывается при проверке данных каждого элемента формы перед сохранением ее данных; custom_php_resync_config_command — вызывается при сохранении данных формы Пользуясь обработчиками, можно указать имена php функций из файла mypkg.inc, которые будут вызваны при том или ином событии. Выполнение конкретных действий по изменению конфигурации маршрутизатора производится в обработчике custom_php_resync_config_command, вызываемом как при нажатии кнопки Save на формы, так и при загрузке pfSense.

Здесь можно посмотреть полный текст файла:

Файл mypkg.xml mypkg My First Package Test 0.1 /usr/local/pkg/mypkg.inc My Package /pkg_edit.php? xml=mypkg.xml Enable enable Check this for enable package. checkbox Файл mypkg.inc создаем пустым, так как наш тестовый пакет ничего не делает.

Файл mypkg.inc

?> После сохранения созданных файлов mypkg.xml и mypkg.inc в каталоге /usr/local/pkg можно проверить, как наш пакет будет выглядеть. Для этого заходим в WEB интерфейс pfSense и добавляем в адресной строке путь /pkg_edit.php? xml=mypkg.xml. Если все правильно и без ошибок сделано, получим вот такую картинку

image

В итоге нами был получен очень простой GUI пакет, который не выполняет ничего полезного, не сохраняет никаких данных, и даже не зарегистрирован в меню WEB интерфейса. Но тем не менее, на примере этого пакета можно получить представление о механизме работы графического интерфейса pfSense.

PS: За ранее приношу извинения за возможные недочеты. Эта статья написана для получения инвайта. Если данная тема будет интересна сообществу, то постараюсь рассказать более подробно о том, как создать полноценный GUI пакет для pfSense.

© Habrahabr.ru