Как мы оседлали OPNsense
Пока не стихают холивары на тему, аморально или нет использовать бесплатные платформы для создания коммерческих продуктов, мы тихой сапой сделали это. И не стесняемся брать с клиентов деньги, потому что запилили на базе свободного кода реально классную штуку — универсальный аппаратный шлюз безопасности. Раньше у нас был коммерчески успешный межсетевой экран, но для Microsoft Windows. Бурный поток идей в какой-то момент вышел из берегов «винды», и встал вопрос — а что дальше? А дальше — Linux или Net/Open/Free BSD. Наши гуру собрались, покурили и решили вместо изобретения собственного велосипеда использовать OPNsense. Эта статья поможет тем, кто захочет сделать нечто подобное.
Почему OPNsense?
Во-первых, OPNsense — форк открытой UTM-системы pfSense, который считается одним из лучших решений такого класса на базе FreeBSD. Мы изучили код OPNsense и нам понравилось его качество, а также подход к реализации функциональности. Здесь активно используются современные принципы разработки и прежде всего — модель MVC, когда данные хранятся в одном месте, а отображение делается с помощью специальной подсистемы шаблонов. Есть контроллеры на каждый модуль, реализовано нормальное WebAPI по всей функциональности, код хорошо структурирован, а лидеры проекта много внимания уделяют стилю программирования. Это облегчает нам разработку и поддержку, разделение функциональности на отдельные модули, выделение плагинов и прочую программерскую рутину. Помимо прочего, лицензия BSD идеально подходит создателям коммерческого продукта — она не содержит связанных с т.н. «копилефтом» ограничений. Последняя в списке, но не последняя по значимости причина — раньше наши разработчики уже использовали FreeBSD в своих проектах. Имеющийся опыт и навыки ни в коем случае нельзя сбрасывать со счетов.
Начало работы
Сотрудничество с командой OPNsense началось с создания русской локализации для основной ветки проекта. Это было затратно, профессиональные переводчики работали несколько месяцев, чтобы русифицировать огромное количество элементов интерфейса, системных сообщений и справочной информации с большим количеством специальных терминов — все это мы до сих пор поддерживаем в актуальном состоянии. Кстати, когда мы сталкиваемся с ошибками в OPNsense, то предлагаем исправления, улучшения и доработки продукта, которые становятся доступны всем желающим совершенно бесплатно, так что и «наживающиеся на бесплатном ПО барыги» внесли свою лепту в развитие свободного кода.
Вливаемся в мейнстрим
Ребята из OPNsense оказались готовыми к сотрудничеству. Когда мы делаем какие-то изменения, ключевые разработчики проекта реагируют оперативно и сразу же дают обратную связь. Если мы отдаём новую функциональность в основную ветку базового проекта, поддерживать её приходится самим, но поиск ошибок и тестирование серьезно упрощаются. Есть моменты, с которыми нам тяжело жить, но с ними приходится мириться — плюсы свободного ПО перевешивают минусы.
Если мы делаем затрагивающий большой объём кода рефакторинг, разработчики OPNsense не всегда могут быстро переварить изменения. У них просто не хватает для этого ресурсов, поэтому в Traffic Inspector Next Generation уже доступны функции, которых в базовой версии до сих пор нет. В OPNsense используется стандартный syslog, мы же давно перешли на syslog-ng — он позволяет, например, писать логи в БД. Система протоколирования много чего затрагивает, объём изменений получился огромным. Для переноса кода в OPNsense мы попытались разбить его на несколько итераций, но процесс пока не завершён.
Второй момент связан с изменениями веб-интерфейса. В OPNsense модель MVC используется далеко не повсеместно, унаследованный код там тянется ещё с pfSense и нам предложили перевести его на новые «рельсы». Переделку мы начали со страницы работы с сертификатами, но когда в OPNsense прикинули объём необходимых для принятия нового кода в основную ветку работ, волосы у них встали дыбом.
Проблемы…
Хоть мы и являемся официальными контрибьюторами OPNsense, это не даёт повышенных привилегий на изменение кода свободного продукта. Своё хозяйство сообщество контролирует самостоятельно, протестировать и принять наши изменения разработчики проекта должны сами. Мы только можем им предложить переделать какие-то решения, чтобы облегчить прохождение изменений.
Накопление различий с кодом основного продукта — серьёзная проблема. Мы стараемся строить свою работу таким образом, чтобы максимально облегчить процесс обновления. Когда обновление OPNsense переносится в Traffic Inspector Next Generation, наша функциональность не должна ломаться и она, в свою очередь, не должна ломать новую функциональность OPNsense. Важно понимать, что Traffic Inspector Next Generation не является независимо развивающимся форком — взаимодействие продуктов происходит постоянно и держать их в неконфликтующем состоянии трудно. Объём работы бешеный, но с этим приходится жить. Не получится просто воткнуть свой логотип и брать за продукт за деньги, хотя некоторые умники пытаются это делать.
…и решения
Разбираемся с проблемами следующим образом: если есть возможность добавить функциональность плагином, мы так и поступаем. У OPNsense хорошо продуман API для встраивания плагинов, он редко меняется и вопросам обратной совместимости разработчики уделяют достаточно внимания. Когда выходит новая версия OPNsense, мы тоже поднимаем новую версию Traffic Inspector Next Generation и актуализируем кодовую базу без лишней головной боли, хотя совсем без головной боли обойтись не получается.
Ещё один интересный момент, не все свои наработки мы отдаём в OPNsense. Какие-то из них нужны только на российском рынке, а у проприетарных модулей есть лицензионные ограничения. В нашей стране действует закон, который обязывает, например, кафе с точкой доступа Wi-Fi производить идентификацию клиента. В Traffic Inspector Next Generation это делается через SMS, но за рубежом локальная российская кухня никому не интересна.
Можно упомянуть антивирус Касперского — для него у нас собран пакет с использованием библиотек «Лаборатории Касперского». В основную ветку такой пакет не интегрируешь. Есть ещё российский фильтр ресурсов по категориям NetPolice, предполагающий подписку на сервис, ну и, конечно, связанные с сертфикацией ФСТЭК вещи. Такие, например, как проверка целостности системы и оповещение администраторов о её нарушениях.
Разбиение функциональности на модули и активное использование плагинов позволили нам эффективно отделить мух от котлет, но между двумя продуктами накопилась масса различий. Помимо уже упомянутых можно назвать модуль отчётов по трафику и единый Центр управления для работы с несколькими устройствами Traffic Inspector Next Generation. Ещё есть плагин для интеграции с Microsoft Active Directory, система ограничения доступа к сетевым ресурсам по IP- и MAC-адресам и NTLM-аутентификация. Часть этих вкусностей рано или поздно появится в OPNsense, но многих там не будет никогда.
Машина различий
Самое главное отличие: Traffic Inspector Next Generation — это аппаратно-программный комплекс, т.е. коробочное решение. Мы берём железо ведущих производителей серверного оборудования, создаём для него софт и продаём все, что называется, одним куском. Плюсы очевидны: заказчик получает не требующий сложной настройки продукт без проблем с программной совместимостью. При этом у него есть ограниченная гарантия и, разумеется, бесплатная техническая поддержка по телефону и электронной почте.
Создатели свободного ПО не могут протестировать все аппаратные платформы и предлагают использовать софт на свой страх и риск. Из поддержки у них есть только документация и форумы, которые у нас тоже имеются (притом русскоязычные). Добавьте сюда дополнительную функциональность, о которой мы уже рассказали, и вы получите русифицированный OPNsense на стероидах вместе с готовым к употреблению железом — за это можно заплатить. Тем более, в продаже имеются конфигурации с сертификатом ФСТЭК и вот этого OPNsense точно вам не предложит по объективным причинам.
Вывод: свободное ≠ бесплатное
Использование свободных продуктов в качестве основы для коммерческих решений требует комплексного подхода и наличия подготовленной команды. Большое сообщество разработчиков быстрее замечает и исправляет ошибки, а также отслеживает внесенные изменения. В нашем случае получается двойной контроль: мы проверяем код OPNsense, а другие участники проекта инспектируют наш открытый код. В результате растёт качество и увеличивается надёжность обоих продуктов. Сложно не заметить и уменьшение расходов: нам не нужно оплачивать лицензии на операционную систему, средства разработки и реализующие UTM-функциональность модули. Это не значит, что мы получили всё совершенно бесплатно. Разработчики команды Smart-Soft посвятили немало лет созданию решений для платформы FreeBSD. Наш опыт — значительная составляющая стоимости создания Traffic Inspector Next Generation, да и прямых финансовых затрат здесь тоже немало. Разработка решений на базе СПО — удовольствие далеко не бесплатное и если этот момент упустить, сделать что-то достойное не получится.
Протестировать Traffic Inspector Next Generation в своей сети.
Бесплатно в течение 30 дней.