Написання пакета для 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 файл тільки один, повинен бути зазначений повний шлях до підключеного файлу.
 
<?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.
 
Тут можна подивитися повний текст файлу:
 Файл mypkg.xml
<?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 створюємо порожнім, оскільки наш тестовий пакет нічого не робить.
 Файл mypkg.inc
<?php
/*
        mypkg.inc
*/

?>

 
 
Після збереження створених файлів mypkg.xml і mypkg.inc в каталозі / usr / local / pkg можна перевірити, як наш пакет буде виглядати. Для цього заходимо в WEB інтерфейс pfSense і додаємо в адресному рядку шлях / pkg_edit.php? Xml = mypkg.xml . Якщо все правильно і без помилок зроблено, отримаємо ось таку картинку
 
 image
 
У підсумку нами був отриманий дуже простий GUI пакет, який не виконує нічого корисного, не зберігає ніяких даних, і навіть не зареєстрований в меню WEB інтерфейсу. Але проте, на прикладі цього пакету можна отримати уявлення про механізм роботи графічного інтерфейсу pfSense.
 
PS: За раніше приношу вибачення за можливі недоліки. Ця стаття написана для отримання инвайта . Якщо дана тема буде цікава спільноті, то постараюся розповісти більш докладно про те, як створити повноцінний GUI пакет для pfSense.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.