Маршрутизатор 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 файл только один, должен быть указан полный путь к подключаемому файлу.
<?xml version="1.0" encoding="utf-8" ?> <packagegui> <name>mypkg</name> <title>My First Package</title> <category>Test</category> <version>0.1</version> <include_file>/usr/local/pkg/mypkg.inc</include_file>
Шапка WEB интерфейса содержит описание GUI страниц в узле tabs, и выводится в области навигации. У нас будет только одна страница. Элемент text содержит имя пункта навигации в GUI. Элемент url содержит относительный путь доступа к странице нашего пакета.
<tabs> <tab> <text>My Package</text> <url>/pkg_edit.php?xml=mypkg.xml</url> <active/> </tab> </tabs>
Форма WEB интерфейса описывает, какие элементы управления параметрами нашего пакета будут доступны пользователю. Для начала создадим одно единственное поле Enable с элементом checkbox
<fields> <field> <fielddescr>Enable</fielddescr> <fieldname>enable</fieldname> <description>Check this for enable package.</description> <type>checkbox</type> </field> </fields>
Обработчики событий WEB интерфейса является завершающим участком XML файла, и описывает какие функции будут вызваны в тот или иной момент работы формы GUI. Представлено три часто используемых обработчика:
- custom_php_command_before_form — вызывается перед отображением формы;
- custom_php_validation_command — вызывается при проверке данных каждого элемента формы перед сохранением ее данных;
- custom_php_resync_config_command — вызывается при сохранении данных формы
<custom_php_command_before_form/> <custom_php_validation_command/> <custom_php_resync_config_command/> </packagegui>
Пользуясь обработчиками, можно указать имена php функций из файла mypkg.inc, которые будут вызваны при том или ином событии. Выполнение конкретных действий по изменению конфигурации маршрутизатора производится в обработчике custom_php_resync_config_command, вызываемом как при нажатии кнопки Save на формы, так и при загрузке pfSense.
Здесь можно посмотреть полный текст файла:
<?xml version="1.0" encoding="utf-8" ?> <packagegui> <name>mypkg</name> <title>My First Package</title> <category>Test</category> <version>0.1</version> <include_file>/usr/local/pkg/mypkg.inc</include_file> <tabs> <tab> <text>My Package</text> <url>/pkg_edit.php?xml=mypkg.xml</url> <active/> </tab> </tabs> <fields> <field> <fielddescr>Enable</fielddescr> <fieldname>enable</fieldname> <description>Check this for enable package.</description> <type>checkbox</type> </field> </fields> <custom_php_command_before_form/> <custom_php_validation_command/> <custom_php_resync_config_command/> <custom_php_install_command/> <custom_php_deinstall_command/> </packagegui>
Файл mypkg.inc создаем пустым, так как наш тестовый пакет ничего не делает.
<?php /* mypkg.inc */ ?>
После сохранения созданных файлов mypkg.xml и mypkg.inc в каталоге /usr/local/pkg можно проверить, как наш пакет будет выглядеть. Для этого заходим в WEB интерфейс pfSense и добавляем в адресной строке путь /pkg_edit.php?xml=mypkg.xml. Если все правильно и без ошибок сделано, получим вот такую картинку
В итоге нами был получен очень простой GUI пакет, который не выполняет ничего полезного, не сохраняет никаких данных, и даже не зарегистрирован в меню WEB интерфейса. Но тем не менее, на примере этого пакета можно получить представление о механизме работы графического интерфейса pfSense.
PS: За ранее приношу извинения за возможные недочеты. Эта статья написана для получения инвайта. Если данная тема будет интересна сообществу, то постараюсь рассказать более подробно о том, как создать полноценный GUI пакет для pfSense.
ссылка на оригинал статьи http://habrahabr.ru/post/228977/
Добавить комментарий