Предисловие
Наша "дружба" началась два года назад. Я пришел на новое место работы, где предыдущий админ непринужденно оставил мне в наследство данную софтину. В интернете кроме официальной документации найти ничего не получалось. Даже сейчас, если загуглить "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. Спешите заказать!