14/10/2019
Продолжу свою серию статей об 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 этот вопрос плохо задокументирован и не очевиден в решении. Поэтому в процессе их эксплуатации Вам наверняка придется углубиться в тонкости их работы и конфигурирования, чтобы достичь желаемого уровня автоматизации.