22 | 02 | 2020

Пользовательские скрипты

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

Иногда у пользователей pfSense возникает необходимость применения своих собственных скриптов. Для этого необходимо встроить свой собственный код в графический интерфейс pfSense. В этой статье будут рассмотрны некоторые подобные вопросы и способы их решения.

 

Пользовательские правила Firewall и NAT

Если перед Вами стоит задача генерации правил файрвола и НАТ своими скриптами, то необходимо использовать механизм обработки packages. При каждой генерации правил NAT или файрвола система ищет в каталоге /usr/local/pkg файлы INC и просматривает их на наличие специальной функции с именем filename_generate_rules($type). Функция в первой своей части должна иметь имя, совпадающее с именем INC файла. К примеру функция в файле squid.inc будет называться squid_generate_rules.

function squid_generate_rules($type) {

global $config;
 
switch($type) {
case 'nat':
$rules .= "\n# Setup Squid proxy redirect\n";
$rules .= "no rdr on $iface proto tcp from any to { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 } port 80\n";
$rules .= "no rdr on $PPPOE_ALIAS proto tcp from any to { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 } port 80\n";
 
break;
 
case 'filter':
case 'rule':
$rules .= "pass in quick on $iface proto tcp from any to !($iface) port 80 flags S/SA keep state\n";
$rules .= "pass in quick on $iface proto tcp from any to !($iface) port $port flags S/SA keep state\n";
$rules .= "\n";
break;
default:
break;
}
 
return $rules;
}
Аргумент функции $type входящий и может принимать значения 'nat' и 'filter' или 'rule'. Соответственно в зависимости от значения аргумента $type функция должна возвратить набор правил NAT или файрвола.
 
 

Установка пакета из консоли

ПРЕДУПРЕЖДЕНИЕ: Выполнение приведенных ниже действий может привести к неработоспособности вашей системы. Вы должны понимать что и зачем делаете.

Примечание: Приведенные ниже сведения относятся к установке пакетов FreeBSD в систему. Следует отличать пакеты FreeBSD, и пакеты pfSense. Пакеты FreeBSD не имеют графического WEB интерфейса и необходимо будет выполнить ряд действий по  их настройке.




Как Удалить пакет из консоли
1. Смотрим список пакетов в системе


Code:
> pkg_info

2. Удаляем пакет


Code:
> pkg_delete имя_пакета-ХверсияХ


Как Установить пакет из консоли
1. Смотрим версию FreeBSD


Code:
> uname -a

2. Находим в интернете или других источниках ссылку на нужный пакет, подходящий к нашей версии FreeBSD. Запускаем инсталляцию.


Code:
> pkg_add -r полный_URL_к_пакету

3. Если имеем скачанный пакет, копируем его в ваш pfSense в '/tmp'. Запускаем установку.


Code:
> pkg_add /tmp/имя_пакета.tbz

Web интерфейс pfSense

 

Web интерфейс в pfSense служит основным средством управления службами и конфигурацией.

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

Все XML и INC файлы пакетов хранятся в папке /usr/local/pkg.

В XML файлах описывается структура форм данных Web интерфейса пакета и обработка этих данных. При изменении и сохранении данных из формы должны происходит некоторые действия по их проверке и реконфигурации системы/исполняемых программ. Все php функции для этого содержатся в INC файле пакета (в большинстве случаев).