Установка и эксплуатация «Rudder»

    Предисловие

    Наша "дружба" началась два года назад. Я пришел на новое место работы, где предыдущий админ непринужденно оставил мне в наследство данную софтину. В интернете кроме официальной документации найти ничего не получалось. Даже сейчас, если загуглить "rudder" то в 99% случаев будет выдавать: штурвалы кораблей и квадрокоптеры. Мне удалось найти к нему подход. Поскольку Комьюнити данного софта ничтожно мал, я решил поделиться своим опытом и граблями. Думаю кому-то это будет полезно.

    Итак, Rudder

    Rudder - это утилита для аудита и управления конфигурацией с открытым исходным кодом, которая помогает автоматизировать настройку системы. Работает она по принципу установки агента на каждого конечного пользователя. Через удобный интерфейс мы можем наблюдать на сколько наша инфраструктура соответствует всем заданным политикам.

    Использование

    Ниже я перечислю для чего использую Rudder.

    • Контроль файлов и конфигов: ./ssh/authorized_keys ; /etc/hosts ; iptables ; (а дальше куда фантазия заведет)

    • Контроль установленных пакетов: zabbix.agent или любой другой софт

    Установка сервера

    На днях обновился с 5 версии до 6.1, все прошло успешно. Ниже будут представлены команды для Deban/Ubuntu но также есть поддержка: RHEL/CentOS и Sles.

    Спрячу установку в спойлеры, чтобы вас не отвлекать.

    Spoiler

    Зависимости

    Для rudder-server требуется Java RE минимум 8 версии, можно установить из стандартного репозитория:

    Проверяем не установлена ли она

    java -version

    если вывод

    -bash: java: command not found

    то устанавливаем

    apt install default-jre

    Сервер

    Импортируем ключ

    wget --quiet -O- "https://repository.rudder.io/apt/rudder_apt_key.pub" | sudo apt-key add -

    Вот сам отпечаток

    pub  4096R/474A19E8 2011-12-15 Rudder Project (release key) <security@rudder-project.org>
          Key fingerprint = 7C16 9817 7904 212D D58C  B4D1 9322 C330 474A 19E8

    Так как у нас нет платной подписки то добавляем следующий репозиторий

    echo "deb http://repository.rudder.io/apt/6.1/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/rudder.list

    Обновляем список репозиториев и устанавливаем сервер

    apt update
    apt install rudder-server-root

    Создаем юзера admin

    rudder server create-user -u admin -p "Ваш Пароль"

    В дальнейшем можем управлять юзерами через конфиг

    Всё, cервер готов.

    Настройка сервера

    Теперь необходимо добавить в агент руддера ip адреса агентов или же целую подсеть, ориентируемся на политику безопасности.

    Settings --> General

    В поле "Add a network" Вписываем адрес и маску в формате x.x.x.x/xx . Для того чтоб разрешить доступ со всех адресов внутренней сети (Если конечно это тестовая сеть и вы находитесь за NAT) вписываем : 0.0.0.0/0

    Важно - после добавления ip address не забыть нажать Save changes, в противном случае ничего не сохранится.

    Порты

    На сервере открываем следующие порты

    • 443 - tcp

    • 5309 - tcp

    • 514 - udp

    С первоначальной настройкой сервера разобрались.

    Установка Агента

    Spoiler

    Добавляем ключ

    wget --quiet -O- "https://repository.rudder.io/apt/rudder_apt_key.pub" | sudo apt-key add -

    Отпечаток ключа

    pub  4096R/474A19E8 2011-12-15 Rudder Project (release key) <security@rudder-project.org>
          Key fingerprint = 7C16 9817 7904 212D D58C  B4D1 9322 C330 474A 19E8

    Добавляем репозиторий

    echo "deb http://repository.rudder.io/apt/6.1/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/rudder.list

    Устанавливаем агент

    apt update
    apt install rudder-agent

    Настройка агента

    Укажем агенту ip address сервера политик

    rudder agent policy-server <rudder server ip or hostname> #Без скобок. Можно также использовать доменное имя 

    Запустив следующую команду мы отправим запрос о добавлении нового агента на сервер, через пару минут он появится в списке новых агентов, как добавлять объясню в следующем разделе

    rudder agent inventory

    Также можем принудительно запустить агент и он отправить запрос моментально

    rudder agent run

    Наш агент настроен, идем дальше.

    Добавление агентов

    Логинимся

    https://127.0.0.1/rudder/index.html

    В разделе "Accept new nodes" появится ваш агент, ставим галочку и нажимаем Accept

    Должно пройти немного времени пока система проверит сервер на соответствие

    Создание групп серверов

    Создадим группу (то еще развлечение), без понятия почему разработчики сделали столь геморное формирование групп, но как я понял, по другому никак. Переходим в раздел Node management -> Groups и нажимаем на Create, выбираем статическую группу и название.

    Фильтруем необходимый нам сервер по особым приметам, к примеру по ip address, и сохраняем

    Группа настроена.

    Настройка правил

    Переходим в Configuration policy → Rules , и создаем новое правило

    Добавляем группу подготовленную ранее группу (это можно сделать и позже)

    И формируем новую директиву

    Создадим директиву добавления публичных ключей в .ssh/authorized_keys. Я это использую в случае выходя нового сотрудника, или для перестраховки, например если кто-то выпилит случайно мой ключ.

    Переходим в Configuration policy → Directives слева мы видим "Directive library" Находим "Remote access → SSH authorised keys", справа нажимаем Create Directive

    Вписываем данные о юзере и добавляем его ключ. Далее выбираем политику применения

    • Global - Политика установленная по умолчанию

    • Enforce - Выполнить на выбранных серверах

    • Audit - Проведет аудит и скажет на каких клиентах есть ключ

    Обязательно указываем наше правило

    Затем сохраняем и все готово.

    Проверяем

    Ключ успешно добавлен

    Плюшки

    Агент отдает полную информацию о сервере. Списки установленных пакетов, интерфейсов, открытых портов и многое другое, что именно можете посмотреть на скриншоте ниже

    Также можно устанавливать и контролировать софт не только на linux но и на windows, последнее я не проверял, не было необходимости..

    От автора

    Должно быть, вы спросите, зачем изобретать велосипед, если давно уже придуманы ansible и puppet?

    Отвечаю: У Ансибла есть недостатки, например мы не видим в каком состоянии сейчас находится данный конфиг, или всем знакомая ситуация когда запускаешь role или playbook и полетели ошибки о краше, и начинаешь лезть на сервер и смотреть какой там пакет куда обновился. А с puppet я просто не работал..

    Есть ли минусы у Rudder-a? Очень много .. Начиная от того, что отваливаются агенты и приходится их переинсталивать или использовать команду rudder reset. (но кстати в версии 6 я такого еще не видел), заканчивая крайне сложной настройкой и не логичным интерфейсом.

    Есть ли плюсы? И плюсов тоже масса: В отличие от всем извесного ansible мы имеем веб интерфейс в котором видно примененный нами комплаенс. К примеру - торчат ли порты в мир, в каком состоянии firewall, установлены ли агенты безопасности или другие приблуды.

    Данный софт отлично подойдет для отдела информационной безопасности, так как состояние инфраструктуры всегда будет перед глазами, и если какое-то из правил засветится красным, то это повод посетить сервер. Как я и говорил 2 года уже использую Rudder, и если его немного покурить, то жизнь становится лучше. Самое сложное в большой инфраструктуре, то что вы не помните в каком состоянии находится сервер, не пропустил ли джун установку агентов безопасности или правильно ли на настроил iptables , rudder же поможет вам быть в курсе всех событий. Осведомлён, значит вооружен! )

    P.S. Вышло гораздо больше чем я планировал, не буду описывать как устанавливать пакеты, если вдруг будут просьбы то напишу вторую часть.

    P.S.S Статья несет информационный характер, решил поделиться так как на просторах интернета очень мало инфы. Может-быть это будет кому-то интересно. Хорошего времени суток уважаемые друзья )


    На правах рекламы

    Эпичные серверы - это VPS на Linux или Windows с мощными процессорами семейства AMD EPYC и очень быстрыми NVMe дисками Intel. Спешите заказать!

    VDSina.ru
    Серверы в Москве и Амстердаме

    Комментарии 10

      0

      По ощущениям больше заточен под десяток серверов или сотни и тысячи?

        0
        У меня около 40
          0

          Есть ощущение, что это близко к его пределу или, наоборот, оверинженеринг?

            +1
            У меня работает все отлично. До придела, я думаю еще далеко. Товарищ PnDx говорит, что у него несколько сотен.
        +3
        На моей грядке rudder 4.x обслуживает несколько сотен «statefull»-хостов. Был выбран (во времена 3.х) как способ «затоптать» порог вхождения в cfengine. Чтобы специалисты (кроме одного «архитектора») оперировали своими понятиями, а не занимались «программированием» на yaml в ansible, ruby в chef etc. В свою очередь, cfengine позволяет тратить на управление предсказуемые ресурсы. Его когда-то спроектировали. Пусть и не без нюансов (а дело-то было в 1980х!). Агент потребляет 10…15 МБ RSS, 1 ядро CPU (≈20 секунд пользовательского времени на отработку около сотни директив из rudder (внутри так и вовсе до полу-тысячи субъектов управления), который та ещё абстракция-над-абстракцией).

        Пишут rudder французы из Normation. На Scala, в основном. Несколько лет назад были вполне вменяемые (я помогал им баги фиксить которые мне мешали). С 5.x проект сменил форму монетизации («дайте денег за каждую фичу которая до этого работала за так» и «LTS за доп. плату»), и мы пока решили подождать.
        • Я на самом деле могу выпустить статью с ворохом технических подробностей и разборами «почему там — так». Материалов хватит даже на несколько, т.к. поверх этого ещё и «сетевую модель» построил на их API. Вопрос, насколько это интересно аудитории?

        Из наших вики:
        В основу решения положена система управления конфигурацией cfengine, оперирующая понятиями теории обещаний. Роль сервера при этом сводится к декларированию (версионирование git, транспорт ssh/http(s), обратная связь syslog) пожеланий к каждому из подписанных на него агентов, установленных на хостах сети.

        …И понеслась. Нужно только (слегка?) разбавить формат «редбуков», чтобы читатели зевать не начали.
          +1
          Мне была бы интересна ваша статья )
          0
          достаточно интересная поделка.
          просадил несколько хостов, прописал несколько правил.
          но идея идет вперед быстрее, чем реализация.
          клиенты действительно отваливаются, в логах всякая ерунда, без force-reinit агентов иногда просто перестает работать.
          а я уж обрадовался…
            0
            В 6 версии пока не наблюдал отвал клиентов… Но раньше это прям головная боль(
            0

            Торчат ли порты в мир должен показывать внешний сканер периметра а не штурвалы /французские/

              0
              я не совсем понял ваш вопрос. У меня все за white-list.

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

            Самое читаемое