Автоматизируем pfsense через pfsense PHP Shell

14/10/2019

pfsense

Продолжу свою серию статей об open source межсетевом экране pfsense. Хотелось бы затронуть тему автоматизации процесса настройки и перенастройки этого программного продукта. Веб интерфейс фаервола безусловно отлично продуман и функционален. Однако, в работе современных больших IT систем, этого зачастую бывает недостаточно. Для динамически быстро меняющейся инфраструктуры крайне необходима автоматизация всех ее элементов. А реализовать это через веб интерфейс крайне затруднительно и проблематично. Так же и элементы Информационной Безопасности в сети должны быть максимально автоматизироваться. Каких-то прямых и готовых инструментов для этого к сожалению нет. Но разработчики дают доступ к pfsense Dev shell или pfsense PHP Shell. Эта командная оболочка не радует обилием документации, но позволяет с помощью скриптов управлять межсетевыми экранами pfsense.

Сами разработчики не очень приветствуют использование данного инструмента. В интернете для автоматизации работы pfsense есть варианты с самописными модулями ansible, а также внешним модулем Rest API для pfsense. Но для меня эти инструменты показались недостаточно функциональны и опасны в использовании. Так с помощью Rest API — FauxAPI можно вносить изменения напрямую в конфигурационный файл /cf/conf/config.xml. По сути, все найстройки межсетевого экрана находятся в этом файле. Однако, любая ошибка или неточность при работе с данным файлом приводит к общему фейлу фаерволу и глобальным проблемам в его работе. Поэтому в продакшене использование такого подхода для меня кажется слишком рискованным. И наиболее адекватным для автоматизации видится обращение к функционалу pfsense PHP Shell.

Примеры настройки Virtual IP и NAT port forwarding

В качестве примера автоматизации процесса конфигурации pfsense в данной статье рассмотрим настройку внешнего виртуального IP адреса на CARP интерфейсе, а также прокидку одного TCP порта с этого внешнего публичного IP адреса на внутренний адрес сервера. Для этого мы будем использовать pfsense PHP shell — /usr/local/sbin/pfSsh.php. Пусть к этому шелу лежит либо через обычный доступ к терминалу и выбор 12 в меню. Либо можно по ssh использовать акаунт root с паролем пользователя admin и запуском /usr/local/sbin/pfSsh.php.

Ниже привожу пример конфигурации, которая создает новый виртуальный IP адрес, а также привязывает его с внешнему CARP адресу с id — _vip1234567890. Для того, чтобы конфигурация применилась в конце выполняем команды write_config() и exec.

$newIp['mode'] = 'ipalias';
$newIp['interface'] = '_vip1234567890';
$newIp['descr'] = 'Test IP';
$newIp['type'] = 'single';
$newIp['subnet_bits'] = 24;
$newIp['subnet'] = '1.1.1.1';
$config['virtualip']['vip'][] = $newIp;
parse_config(true);
write_config();
exec

Далее приведем команды, которые выполняются в PHP shell для настройки NAT port forwarding. Здесь процесс конфигурации немного усложнится за счет использования массивов. Так же в конце конфигурации мы используем команды write_config() и exec.

$newNat['descr'] = "Test Nat";
$newNat['interface'] = "wan";
$newNat['source'] = array('any' => "");
$newNat['destination'] = array('address' => "1.1.1.1", 'port' => "80");
$newNat['protocol'] = "tcp";
$newNat['target'] = "192.168.1.101";
$newNat['local-port'] = "80";
$newNat['associated-rule-id'] = "pass";
$config['nat']['rule'][] = $newNat;
write_config();
exec

Команды, которые мы привели выше, мы можем применить интерактивно в самом PHP шеле. Либо записать в скрпит и выполнить его при необходимости. Пример как это реализовать представлен ниже. Допустим ip адрес нашего pfsense — 192.168.1.1. Мы создаем скрипт pfsense.conf с нужными командами для pfsense PHP shell. После этого выполним этот скрипт с помощью ssh.

ssh root@192.168.1.1 '/usr/local/sbin/pfSsh.php' < pfsense.conf

На этом, в целом, все. Напоследок хотелось бы показать команду в PHP shell, с помощью которой мы можем просмотреть нужный участок конфигурации pfsense. Для примера привожу команды, которые выведут настройки NAT Port Forwarding.

print_r($config['nat']['rule']); 
exec

Заключение

В статье затронули тему автоматизации настройки и поддержки межсетевых экранов pfsense. Данный вопрос, я думаю, стоит на повестке дня практически у всех системных администраторов. Максимальная автоматизация всех процессов конфигурации и переконфигурации — не побоюсь этого сказать, основная работа ITшников. С межсетевыми экранами pfsense этот вопрос плохо задокументирован и не очевиден в решении. Поэтому в процессе их эксплуатации Вам наверняка придется углубиться в тонкости их работы и конфигурирования, чтобы достичь желаемого уровня автоматизации.

Добавить комментарий

Ваш адрес email не будет опубликован.