Привет. Мы, команда проекта CrowdSec, рады сообщить о выходе версии CrowdSec 1.0.0. Этот релиз крайне важен, потому что кроме добавления нескольких новых функций весь проект претерпел серьезные архитектурные изменения, чтобы стать быстрее, выше и сильнее.

В первую очередь, рады представить вам главное изменение этого патча — внедрение локального REST API. Благодаря ему весь проект серьезно изменил свою архитектуру в сторону упрощения и облегчения взаимодействия компонентов на локальном уровне. При этом в целом простота использования не пострадала — пользоваться CrowdSec все еще легко и приятно.

Для тех, кто не знает о CrowdSec или задается вопросом, как вообще французский стартап оказался на Хабре, сделаем небольшое отступление:
Несколько недель назад тут, на Хабре, вышла целая статья о нашем проекте, конкретно в ключе сравнения нас с Fail2Ban: «CrowdSec — современная альтернатива Fail2Ban и коллективный иммунитет для Интернета».

Команда нашего проекта базируется во Франции и хотя для нас русскоязычный сегмент всегда имел большое значение, мы не имели представления, как попасть в него и продемонстрировать наш продукт местному IT-сообществу. Имел место и языковой барьер. Однако оказалось, что существует Хабр и для местных специалистов наш проект оказался весьма интересен — мы зафиксировали достаточно много трафика со стороны РФ и несколько десятков новых пользователей.

Еще больше нас удивила техническая глубина комментариев на Хабре, а также совершенно иной взгляд на многие вещи. И вот, как итог, мы тут. Презентуем вам версию 1.0.0 :)

Как было и как стало


Главное, что случилось с выходом версии 1.0 — внесение изменений в архитектуру, которое произошло из-за внедрения в работу локального REST API. С архитектурной точки зрения наша система состоит из трех основных компонентов:

  • постоянно работающая служба CrowdSec, которая отслеживает логи, атаки и т. д.;
  • командная строка, интерфейс для взаимодействия со службой;
  • модули интеграции (bouncers) для обеспечения блокировки атакующих адресов.

Ниже — схема, как работал CrowdSec раньше:



Как видно из схемы, как минимум три элемента системы постоянно напрямую обращались к базе данных. На схеме эти направления отмечены красными кружками (cwcli-DB, output plugins-DB, Bouncers-DB). При этом под «Bouncers» подразумевается минимум пять модулей, которые постоянно общаются между репутационной БД и БД забаненных IP-адресов.

Когда вы развиваете какой-то проект с нуля, подобные костыли — простой, быстрый и дешевый способ создать рабочий прототип системы. Однако если говорить о стабильности и скорости работы, столько точек обращения к БД — не лучшее решение. Подобная архитектура проекта привела к возникновению ряда ограничений, с которыми мы столкнулись на этапах дальнейшего развития CrowdSec. Следовательно, мы хотели избавиться от них как можно быстрее.

После переработки проекта на архитектурном уровне, мы пришли к решению, что лучшим вариантом будет локальный REST API, через который уже и будет проходить общение указанных выше компонентов и базы данных.

Как итог, мы получили архитектуру следующего вида:



Теперь все внутренние модули общаются между собой и с базой данных исключительно через REST API.

Главное преимущество API перед старой реализацией — упрощение работы модулей (Bouncers) по сравнению со старой версией CrowdSec. Если раньше баунсер обращался к различным базам напрямую, то теперь, благодаря работе через REST API, ему понадобиться всего один HTTP-get реквест с API-токеном. Вся остальная работа происходит на стороне API.

Облачная схема работы CrowdSec


В классическом представлении предполагается, что на одной из машин будет развернута серверная часть CrowdSec, которая через новый API сможет управлять модулями на других машинах внутри определенной администратором сети. При желании, пользователь сможет использовать собственную БД забаненных адресов, либо же обращаться к нашей базе данных на платной основе. Однако создание единой точки общения между локальным REST API и нашим собственным API создает новые возможности: работа CrowdSec по модели, близкой к облачному SaaS.

Теперь администратору не обязательно разворачивать на своей машине полноценную серверную часть CrowdSec с локальным REST API. Вместо этого он может использовать наш внешний центральный API CrowdSec и пользоваться для защиты сети только баунсерами.

Дополнительно


Тем, кто уже пользовался CrowdSec ранее, мы предлагаем ознакомиться с полным списком изменений в версии 1.0.0 относительно версии 0.3.x на GitHub.

Новым пользователям советуем обратиться к информации из нашего репозитория на GitHub.

Хотим отметить, что CrowdSec — опенсорсный инструмент, который выпускается под свободной лицензией MIT. Таким образом, любой желающий может пользоваться им абсолютно бесплатно. Проект пока не монетизируется, мы находимся в стадии разработки собственного бан-листа и тарифных планов. На нашем сайте hub.crowdsec.net специально для новых пользователей собраны коллекции, конфигурации и готовые баунсеры для облегчения настройки и начала использования CrowdSec.



Вы можете задать любой вопрос о нашем проекте прямо здесь, в комментариях. Использование английского упростит коммуникацию — нам не придется использовать Google.Translate или просить русскоязычных знакомых перевести нам ваше сообщение.